www.lu.lv jauna seja

http://www.lu.lv/ nomainīts viss portāla izskats. Jaunais izskatās briesmīgi. Viss portāls būtu dodams kā uzskates materiāls, kā nevajag veidot lapas.

Milzīgas bildes fonā, dažādi krāsaini bloki, kas vizuāli nekādi nesaistās ar lapu utt. Meklēšana, kur neko nevar ievadīt (Internet Explorer 8). Kā papildus bonuss nav iespējams piekļūt vairākām sadaļām, piemēram, forumam.

Var jau būt, ka es tāds vienīgais, bet nu šis jauninājums padara lapu nelietojamu un rada iespaidu nevis par nopietnu universitāti, bet gan par lauku pamatskolu, kur vienīgais skolnieks, kam mājās bija dators, uz ātru roku iekš FrontPage uzklabināja lapu.

Es tiešām ceru, ka šis ir neizdevies un pāragrs aprīļa joks.

Remote Desktop drošība ar SSL sertifikātu

Remote Desktop (jeb Terminal Services) protokols ar katru Windows versiju lēnām attīstās. Pēdējās versijās (sākot ar Windows Vista) krietni uzlabota ir arī protokola drošība – pirms savienojuma izveides tiek pārbaudīta servera (ar serveri domāts dators, pie kura slēdzas klāt, tam nav obligāti jābūt ar servera operētājsistēmu) identitāte. Aktīvajā direktorijā problēmu ir maz – identitāti pārbauda, izmantojot domēna līdzekļus (Kerberos autentifikāciju).

Šo identitātes pārbaudi gan var atslēgt sistēmas uzstādījumu attiecīgajā sadaļā. Tas ļauj pie datora pieslēgties izmantojot vecākas Remote Desktop klienta versijas, piemēram, tās, kas iekļautas Windows XP.Drošības līmeņa uzstādījumi

Ja servera identitātes pārbaude ir atslēgta (vai serveris to neuztur), tad jaunās klienta versijas attēlos brīdinājumu, pirms vēl tiek prasīts ievadīt lietotāja vārdu un paroli.
Brīdinājums, ja atslēgta identitātes pārbaude 

More...

Neredzamās bungas

Misters Bīns spēlē neredzamas bungas. Plus vēl kaķis beigās…

Par līdzīgu tēmu – Lee Evans Trio.

IT olimpiādes plakāti

Plakāts-ikona


Lattelecom IT olimpiādes mājas lapā publicēti drukājami un pie sienas līmējami plakāti ar nelielu informāciju par šī gada olimpiādi.

Mazā plakāta lejupielāde (A4; 992 x 1404; 1,08 Mb)

Lielā plakāta lejupielāde (A4; 2481 x 3509; 4,99 Mb)

Sākusies reģistrācija IT olimpiādei 2009

16. septembrī 00:00 sākas reģistrācija Lattelecom IT olimpiādei 2009. Vēlams reģistrēties pēc iespējas ātrāk - tas ļaus organizatoriem redzēt, cik ļoti olimpiāde ir nepieciešama un ka ir vērts tajā ieguldīt naudu (balvas utt.).

Šī gada nolikums vēl nav atjaunināts un publicēts, taču tas neko daudz neatšķirsies no iepriekšējiem gadiem. Galvenie punkti, saistīti ar reģistrāciju:

  • komandā viens līdz trīs dalībnieki;
  • skolēnu grupā drīkst piedalīties jebkurš Latvijas vidējās izglītības vai vidējās speciālās izglītības mācību iestādes audzēknis;
  • skolēnu komandām obligāti jābūt norādītam pilngadīgam pieskatītājam (var būt komandas dalībnieks);
  • studentu grupā drīkst piedalīties jebkurš vidējās vai augstākās izglītības mācību iestādes (ne tikai Latvijas) audzēknis, kuram vēl nav 2. līmeņa vai augstākas (bakalaura, maģistra, doktora) augstākās izglītības IT jomā;
  • dalībnieku vecums netiek reglamentēts;
  • nedrīkst piedalīties Lattelecom grupas uzņēmumu darbinieki;
  • uz fināla kārtu drīkstēs nomainīt tikai vienu dalībnieku.

Lattelecom IT olimpiāde 2009

Par spīti vispārējai ekonomiskajai krīzei, Lattelecom IT olimpiāde 2009. gadā notiks. Tieši tāpat kā iepriekšējos gados, sacensības notiks divās grupās – skolēnu un studentu – un divās kārtās. Diemžēl, ir tikai godīgi brīdināt, ka šogad diemžēl uzvarētājiem netiks tik lielas dāvanas kā iepriekšējos gados. Taču organizatori meklēs visas iespējas uzvarētājus godīgi atalgot.

Aptuvens grafiks sacensību norisēm:
14.-16. septembris – tiek atvērta reģistrācija
1. oktobris – sākas kvalifikācijas kārta neklātienē
19. oktobris – beidzas kvalifikācijas kārta
nedēļa no 16. līdz 22. novembrim – fināls (2 dienas) klātienē Rīgā

Olimpiādes mājas lapa: http://olimpiade.lattelecom.lv/

Raksts par un ap HTTP pāradresācijām

Uzgāju milzīgi detalizētu rakstu par HTTP pieprasījumu pāradresācijām (redirect). Derētu izlasīt ikvienam, kam interesē SEO (search engine optimization) vai kas veido mājas lapas, izmantojot tajās pāradresācijas.

The anatomy of a server sided redirect: 301, 302 and 307 illuminated SEO wise

Radio SWH (un ne tikai) tiešie linki internetā

Radio SWH mājas lapā pieejamā lapa, lai klausītos radio, nenoliedzami nav slikta – ja interesē uzzināt, kas šobrīd skan ēterā. Taču viņi nav pacentušies publicēt tiešās saites, kas ļautu klausīties radio uz datora instalētā programmā (mans iemesls – lai varētu ērti un ātri pārslēgties uz citu staciju, kad sākas reklāmas).

Nedaudz paložņāju pa SWH lapas failiem un izvilku šādas saites:
SWH Rock: http://www.radioswh.lv/rock_s.asx
SWH: http://www.radioswh.lv/swhlivee_s.asx
SWH bez sākuma reklāmas: http://knagis.miga.lv/blog/file.axd?file=swh_live.asx

Pie reizes arī linki arī uz citām stacijām, kuras reizēm klausos:
Skonto: http://www.radioskonto.lv/online_radio/stereo.asx
Star FM: http://www.starfm.lv/stream/starfm_lv.asx
Latviešu Radio: http://stream.latviesuradio.lv:8000/lhr.mp3
Eiropas Hitu Radio: http://stream.europeanhitradio.com:8000/ehr64

Un, apkopojot visus linkus kopā, uztaisīju vienu failu, kas satur visas iepriekš minētās radio stacijas:
http://knagis.miga.lv/radio.m3u

DiskUsage v1 – atrast, kas aizņem diska vietu

Klasiska problēma – atrast vaininieku pie tā, ka atkal jau nav kur likt jaunāko 16Gb lielo lejupielādēto filmu, jo kaut kas kārtējo reizi ir aizsitis visu brīvo vietu.

Sen gribēju uzrakstīt savu mazu programmiņu, kas ļautu izsekot cietā diska aizņemtajai vietai koka struktūrā, kur katram failam vai direktorijai redzams, cik lielu daļu no diska tas aizņem.

Beidzot uzrakstīju pirmo, pavisam vienkāršo risinājumu šai problēmai – tā visu cietā diska struktūru attēlo kokā un katram no punktiem parāda, cik procentu no augstākā līmeņa tas aizņem. Tas ļauj ērti atrast, kas Windows direktorijā aizņem lielāko daļu vietas un kas savukārt šajā vaininiekā aizņem cik.

Darbināšanai nepieciešams Microsoft .NET Framework 3.5, rediģēšanai – Microsoft Visual Studio 2008.

DiskUsage v1

ASP.NET StateManagedCollection nekorekta darbība

ASP.NET satur ļoti noderīgu kolekcijas klasi System.Web.UI.StateManagedCollection (MSDN dokumentācija). Galvenā tās priekšrocība pār parastajām kolekcijām ir tās spēja saglabāt visas izmaiņas ViewState, lai, lapai apstrādājot vairākus secīgus pieprasījumus, veiktās izmaiņas tiktu automātiski saglabātas.

Piemēram, ObjectDataSource parametru kolekcijas izmanto šo kolekciju, lai gadījumos, kad parametri tiek mainīti (tiek pievienoti parametri vai mainītas to vērtības), šīs izmaiņas saglabātos ViewState tāpat kā ievades lauku vērtības.

Diemžēl šī kolekcija satur diezgan brangu kļūdu – tā nesaglabā ViewState datos izmaiņas situācijās, kad visa kolekcija tiek iztukšota. Piemēram, ja izmanto asp:Menu vadīklu un kāda pieprasījuma laikā iztīra kāda zara visus ierakstus. Pēc nākamā pieprasījuma šīe ieraksti atkal būs savās vietās it kā nekad nekas nebūtu noticis.

Šo kļūdu pieteicu Microsoft, lai gan cerība, ka tā tiks salabota, ir diezgan minimāla. Visdrīzāk tiks pateikts, ka, jā, kļūda ir, bet tā netiks labota, lai nenograutu eksistējošas sistēmas, kas uz šo kļūdu paļaujas (apzināti vai neapzināti).

Bet katrā ziņā, vismaz nosacīts apkārtceļs eksistē (izmantojams tikai savās atvasinātajās klasēs, tas nevar salabot esošās .NET klases).

#region [ Workaround for the bug when the original StateManagedCollection does not persist Clear() call ]

/*
* Workaround for the bug described here: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=486953
*
* If Clear() was called StateManagedCollection saves all of the items in the ViewState. Unfortunately,
* if the collection remains empty when the state is saved, StateManagedCollection saves just a "null".
* When LoadViewState is called, _saveAll private field is not set as it should be.
*/

private static Func<StateManagedCollection, bool> _SaveAll;
private static object _SaveAllLock = new object();
private bool SaveAll
{
    get
    {
        if (_SaveAll == null)
        {
            lock (_SaveAllLock)
            {
                if (_SaveAll == null)
                {
                  �� var p = System.Linq.Expressions.Expression.Parameter(typeof(StateManagedCollection), "col");
                    var f = System.Linq.Expressions.Expression.Field(p, "_saveAll");
                    _SaveAll = System.Linq.Expressions.Expression.Lambda<Func<StateManagedCollection, bool>>(f, p).Compile();
                }
            }
        }
        return _SaveAll(this);
    }
}

private static Func<StateManagedCollection, object> _BaseSaveViewState;
private static object _BaseSaveViewStateLock = new object();

object IStateManager.SaveViewState()
{
    if (this.Count == 0 && this.SaveAll)
        return new Pair(new object[0], new int[0]);

    if (_BaseSaveViewState == null)
    {
        lock (_BaseSaveViewStateLock)
        {
            if (_BaseSaveViewState == null)
            {
                var p = System.Linq.Expressions.Expression.Parameter(typeof(StateManagedCollection), "col");
                var f = System.Linq.Expressions.Expression.Call(p, "System.Web.UI.IStateManager.SaveViewState", Type.EmptyTypes);
                _BaseSaveViewState = System.Linq.Expressions.Expression.Lambda<Func<StateManagedCollection, object>>(f, p).Compile();
            }
        }
    }
    return _BaseSaveViewState(this);
}

#endregion