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ā.