Remote desktop ar expired paroli

Windows iebūvētais Remote Desktop gaužām dīvaini strādā, ja lietotājam ir beidzies derīguma termiņš parolei. Tā vietā, lai konkrēti paziņotu par šo faktu vai pat piedāvātu paroli nomainīt, tiek izmests paziņojums: “An authentication error has occurred. The Local Security Authority cannot be contacted”. Risinājums ir pieslēgties pie datora vai servera lokāli un nomainīt paroli.

Word automātiskā stilu labošana

Replace direct formatting with style

Microsoft Word ar 2007. versiju ieviesis attēlā redzamo funkciju “Replace direct formatting with style…”. Lai arī mērķis principā ir cēls, tas nepārtraukti traucē, ja dokumenta noformējums tiek veidots ar roku, neizmantojot definētos stilus, pat tad, kad šīs izmaiņas ir minimālas (atkāpes, numerācija u.tml.). Kā arī funkcija ir viens liels “gļuks”, kad apstrādā vecākās versijās nekorekti veidotus dokumentus – tad no šīs zilās, viļņotās līnijas nevar tikt tikt vaļā, pat atkārtoti spiežot “Ignore Once” vai “Ignore Rule” iespējas.

Par laimi, to var atslēgt. Jāver vaļā Word uzstādījumi (lielā apaļā poga kreisajā augšējā malā un tad poga “Word Options”), sadaļa “Advanced” un jāņem nost ķeksis no “Mark formatting inconsistencies”.

Word Options

Smtp un Pop3 serveris

Kādu laiku jau nomoka doma, ka vajadzētu publicēt savus risinājumus Lattelecom IT olimpiādes uzdevumiem. Kaut vai tāpēc, lai topošajiem dalībniekiem būtu iespēja ne tikai redzēt, kādi uzdevumi bija jārisina agrāk, bet arī redzēt risinājumu piemērus, tādā veidā nedaudz izlīdzinot izredzes starp jaunajiem dalībniekiem un tiem, kas olimpiādē piedalās jau otro vai trešo gadu pēc kārtas.

Kā pirmo šādu piemēru izvēlējos 2009. gada fināla kārtas studentu grupas 1. dienas uzdevumu “S: SMTP/POP3 serveris”. Šāds uzdevums tika izvēlēts, jo SMTP un POP3 protokoli, lai arī mūžseni, ir vēl joprojām ļoti aktuāli, bet tajā pašā laikā ļoti triviāli, ja nav mērķis saprast e-pasta saturu, bet tikai to pārsūtīt tālāk.

Pirmais solis, šo uzdevumu pildot, ir atrast protokola aprakstus. Pirmā iespaida iegūšanai nekā labāka par Wikipedia nevar vēlēties – SMTP un POP3. Tālāk jau var pētīt precīzās specifikācijas, kurās būtu jābūt aprakstītām visām detaļām: RFC 5321 (SMTP) un RFC 1939 (POP3). Un, pats galvenais, jāver vaļā komandrinda un telnet, lai izmēģinātu ar roku pieslēgties kādam reālam serverim.

IT olimpiādē dalībniekiem bija 6,5 stundas, lai ar šo uzdevumu tiktu galā. Diemžēl tikai viena komanda (Tornado) iesniedza risinājumu, kas veiksmīgi tika galā ar e-pastu saņemšanu un atdošanu klienta programmatūrai. Tā kā man pašam ir acīmredzamas priekšrocības, kas radās, pašam izdomājot šo uzdevumu, risinājums tādā formā, kā tas redzams pievienotajā arhīvā, aizņēma apmēram 2,5 līdz 3 stundas.

SimpleMail risinājums: SimpleMail.zip  (44kb). Risinājums gan netiek darbināts kā serviss, bet gan kā komandrindas aplikācija, taču tas darīts, lai vienkāršotu tā izmēģināšanu. Tāpat nav arī realizētas papildus iespējas, par kurām olimpiādē vienojās dalībnieki. Tornado komandas risinājumā vairākas papildus iespējas bija realizētas.

Kā darbināt serveri – jāpalaiž SimpleMail.exe un sava klienta programmatūra jākonfigurē, lai izmantotu 127.0.0.1:25 un 127.0.0.1:110. Jāņem vērā, ka localhost vārda izmantošana varētu nestrādāt, ja e-pasta programmatūra atbalsta IPv6 – tādā gadījumā tā mēģinās slēgties pie adreses ::1, kuru serveris var neatbalstīt. Serveris pieņem e-pastus visiem adresātiem, lai piekļūtu pie saņemtajām e-pasta adresēm, kā POP3 lietotāja vārds un parole jānorāda šī e-pasta adrese.

Risinājumā ir ļoti daudz punktu, kurus vajadzētu pielabot, taču galveno virzienu, kādā strādāt, tas labi parāda.

Pamata servera darbību nodrošina klase BaseServer. Izveidojot šo objektu, tas automātiski palaiž TCP serveri (izmantojot TcpListener klasi) un jaunu pavedienu (Thread), kurš gaidīs, kad pie servera kāds pieslēgsies. Svarīga nianse – šis pavediens pats jauno pieslēgumu neapstrādā. Tā vietā tas izmanto metodi QueueUserWorkItem, kas nodrošina spēju apstrādāt vairākus pieslēgumus reizē. QueueUserWorkItem izmanto .NET iebūvētu slodzes dalīšanas mehānismu, kas ļauj reģistrēt vairākas darba vienības, kuras tiek izpildītas viena pēc otras, nodrošinot, ka paralēli netiek izpildīti vairāk uzdevumu kā dators spēj veiksmīgi darbināt.

BaseServer nodrošina pamata funkcionalitāti – tas no pieslēguma nolasa komandu (gan SMTP, gan POP3 komanda tiek nodota vienā atsevišķā teksta rindā) un nodod šo komandu apstrādei IProcessor interfeisam. Klases, kas implementē šo interfeisu (SmtpProcessor un Pop3Processor), nodrošina katras konkrētas komandas izpildi, kā arī saglabā pieslēguma stāvokļa informāciju (lietotāja vārdi, e-pasta saņēmēji utt.).

Šādi sadalīts kods ļauj izvairīties no koda dublēšanas un nodalīt tīkla savienojuma apstrādi no SMTP vai POP3 komandu apstrādes. Izmantotais mehānisms arī demonstrē salīdzinoši elegantu veidu, kā nodrošināt salīdzinoši augstu veiktspēju, kur viens pieslēgums nebloķē citus.

Windows Server 2008 ar un bez R2

Kad Windows Server 2003 iznāca R2 versija, tā neieviesa nekādus būtiskus jaunumus. Tas pieradināja pie domas, ka R2 var uztvert vairāk vai mazāk kā sinonīmu SP2.

Taču, kad runa ir par Windows Server 2008, tad stāsts ir nedaudz savādāks. Windows Server 2008 var nosaukt arī par “Windows Vista Server”, bet Windows Server 2008 R2 savukārt ir “Windows 7 Server”. Ir diezgan skaidrs, kāpēc Microsoft izvēlējies šādu nosaukumu veidošanas politiku – ja jauno OS nosauktu par, piemēram, Windows Server 2010, tad daudzi uzņēmumi gaidītu vismaz SP1, pirms vispār apsvērtu tā izmantošanu.

Taču šī nosaukumu līdzība var pievilt – ir vairākas programmas, kas uz R2 nevēlas strādāt, piemēram, Exchange 2007, kuru uz Windows Server 2008 R2 nemaz normāli nevar uzlikt un kuram vajag SP2, lai tas spētu strādāt domēnā, kurš tiek uzturēts uz R2. Pēdējā nedēļā saskāros ar vēl vairākiem produktiem, kuri prasa papildus piepūli, lai tos piedarbinātu uz R2.

ASP.NET problēma ar AutoPostBack

Diemžēl sastapta kārtējā problēma ASP.NET iekšienē, kam būtu jābūt ļoti plaši izplatītai, tik nez kāpēc Microsoft nav uzskatījis par vajadzīgu to labot. Arī Connect sistēmā neatrodu, ka kas līdzīgs ir reģistrēts (būs jāpacenšas, taču nedomāju, ka tas ko mainīs).

Lai problēmu atkārtotu, var izveidot šādu lapu:

<asp:ScriptManager runat="server" EnablePartialRendering="true" />
<asp:UpdatePanel runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:TextBox runat="server" ID="txt" AutoPostBack="true" />
        <asp:Button runat="server" ID="btn" Text="Submit" OnClick="Button_Click" />
        <asp:Label runat="server" ID="lbl" />
    </ContentTemplate>
</asp:UpdatePanel>

protected void Page_Load(object sender, EventArgs e)
{
    this.lbl.Text = this.Request["__EVENTTARGET"] == "txt" ? "textbox" : "other";
}

protected void Button_Click(object sender, EventArgs e)
{
    this.lbl.Text = "submit";
}

Problēma attiecas ne tikai uz ASP.NET Ajax, bet arī uz parastu ASP.NET lapu bez ScriptManager un UpdatePanel, taču tad tā parasti nav pamanāma, ja vien lapas apstrādē ir kaut neliela aizture.

Ja izmaina teksta lauka vērtību, tā tiek automātiski nosūtīta uz serveri un tas atgriež vērtību “textbox”. Savukārt, ja tiek nospiests uz pogas, tad serveris atgriež vērtību “submit”. Problēma slēpjas apstāklī, ka lietotājs, izmainot teksta lauka vērtību un uzreiz spiežot uz pogas, sagaida, ka tiks apstrādāta pogas nospiešana (piemēram, saglabāti dati). Šī brīža ASP.NET implementācijā tā nenotiek – uz serveri tiek nosūtīts AutoPostBack pieprasījums, bet lietotāja nospiestā poga paliek bez efekta. Ir pat tā, ka uz serveri reizēm var tikt nosūtīti abi divi, taču lietotājs redz, ka izpildās tikai viens.

Piedāvāju savu risinājumu (apkārtceļu) šai problēmai. Tam ir vairāki mīnusi, piemēram, ja no teksta lauka iziet ar Tab taustiņa palīdzību, uzreiz nonākot uz pogas, tad AutoPostBack nenostrādās (lai gan reāli uz pogas nospiests netiek). Tāpat to var apiet, nospiežot uz pogas un tad nobīdot peli nost, lai pogas klikšķis nenostrādā.

function shouldAbortRequest(eventTarget) {
    if (document.activeElement && document.activeElement.id != eventTarget
        && (document.activeElement.id || document.getElementById(eventTarget))) {
        var tagName = document.activeElement.tagName.toLowerCase();
        var type;
        if (tagName == "input")
            type = document.activeElement.type.toLowerCase();
        if (type == "submit" || type == "button" || tagName == "button" || tagName == "a")
            return true;
    }
    return false;
}

window.original__doPostBack = __doPostBack;
window.__doPostBack = function (eventTarget, eventArgument) {
    if (shouldAbortRequest(eventTarget))
        return;
    window.original__doPostBack(eventTarget, eventArgument);
};

Dotais JavaScript kods (jāievieto lapas beigās) aizvieto ASP.NET iebūvēto __doPostBack metodi, kas tiek izsaukta AutoPostBack gadījumā. Jaunā funkcija pārbauda, vai lietotājs nav nofokusējies uz kādu pogu un, ja tā ir, atceļ AutoPostBack pieprasījumu. Diemžēl tas nav ideāls risinājums, bet šobrīd vienīgais, kas lietotāju glābj no nepatīkamas situācijas, kur viņš ir nospiedis saglabāšanas pogu, bet reāli nekas saglabāts netiek.

Komandrindas rezultātu kopēšana

Gana bieži ir nepieciešamība nokopēt komandrindas komandas rezultātus uz clipboard. Labā peles poga, Edit, Mark, Enter. Un problēmas gadījumos, ja teksts izpletās pa vairākiem ekrāniem.

Windows Vista ieviesa jaunu komandu, kas šo procesu padara jau pavisam baudāmu. Komanda ir clip. Piemēram, lai nokopētu atmiņā visu failu nosaukumus konkrētā direktorijā, var izmantot komandu:

dir /a-d /b | clip

Mr. Bīna akadēmiskā disciplīna

Pasmieties par Bīnu iekš youtube var regulāri, liela daļa ir dikti labi. Bet šis viens mani sajūsmināja krietni vairāk kā citi. Tas būtu risinājums visām mūsdienu skolēnu disciplīnas problēmām…

SmarterMail 6.6 uz miga.lv

Uz miga.lv ir atjaunināta e-pasta servera versija no SmarterMail 6.1 uz 6.6 (izmaiņu saraksts). Izmaiņas nav nekādas lielās, dažādi sīki labojumi. Būtiskākais ir tas, ka vajadzētu būt uzlabotai ātrdarbība – iepriekšējā versija pamanījās noēst 100% CPU un turēt dažus e-pastus bezgalīgā mēstuļu pārbaudes procesā.

TVNET arī kļuvis nelasāms

Arī TVNET nomainījis dizainu un kļuvis tāds pats kā apollo - nelasāms. Kas visiem kaiš, ka jāsataisa lapas izkārtojumi, kur visi bloki pamīšus, kārtības nekādas un grūti atpazīt, ka parādījies kas jauns...

TVNET iepriekš lasīju, jo tā pirmo lapu bija viegli uztvert. Šobrīd viņiem gan tematiskie bloki lapas apakšā ir sakārtotāki nekā apollo, bet tās milzu bildes pat uz milzīga ekrāna neļauj pārredzēt vairākus tematus reizē.

Neko darīt, atliek lasīt http://www.citadiena.lv/ - viņiem gan lapa arī nav nekas spīdošs (lai gan neko sliktu arī nevar teikt), toties raksti interesanti un bez lieka spama. Starp citu, pie viņiem var parakstīties uz bezmaksas pirmo žurnāla numuru, kurš iznākšot februārī.

IT olimpiādes rezultāti un bildes

Olimpiādes mājas lapā publicēti fināla rezultāti un fotogrāfijas no fināla norises un apbalvošanas.