Windows 7 / 8 autologon

Zilele astea am reinstalat sistemul de operare de pe HTPC, am pus un W7 Enterprise, am avut W7 Home Edition. Am schimbat pentru că:

  1. am vrut sa pun un SSD
  2. am avut tot felul de dude cu maparile de share-uri de retea

Zis si facut. Am reinstalat sistemul de operare, am pastrat setarile de XBMC ca să nu mai stau să reinstalez librariile de filme, muzici, configurat add-onuri, etc.

După ce am instalat si asteptat câteva ore să se facă toate update-urile am zis să mă folosesc de funcția de Automatic Logon că și-așa nu e cazul să mă stresez cu securitatea unei mașini de filme.

Autologon-ul se configurează astfel:

  • se apasă pe butonul de start și se executa comanda netplwiz. Această comandă o să incarce appletul din Advanced User Accounts (din Control Panel)
  • in tab-ul Users, se debifează checkboxul Users must enter a user name and password to use this computer. Apăsați butonul Apply din partea de jos.
  • o să apară un dialog cu titlul Automatically Log On unde introduceți username și parola pentru userul pe care vreți să-l folosiți. Apăsați butonul OK.
  • apăsați butonul OK din fereastra de User Accounts.
  • gata. la urmatorul reboot, Windows 7 se va loga automat.

Toate bune si frumoase, doar că checkbox-ul de la pasul 2 nu-l vedeam. Într-un final am găsit pe blogul unui nene următorul lucru:

Modificați o cheie din regiștri:

HKEYLOCALMachine/Software/Microsoft/Windows NT/CurrentVersion/WinLogon/

numele cheii este Autoadminlogon iar valoarea trebuie să fie pe 1.

 

XBMC rulează

Toata lumea apreciază un film bun, o carte, etc. Eu apreciez puțin mai mult, dacă e lăsată o zi de la Dumnezeu fără să vad un serial măcar, atunci o consider ratată.

Mașina mea de filme, cu carcasa Silverstonetek LC16 are acum două hard discuri a 2TB pentru stocare iar hardul de boot (sistem) e unul oarecare de 500G, un procesor dual core de 2.4G și 4GB RAM.

Am încercat tot felul de aplicații pentru redarea filmelor:

Windows Media Center (o porcarie inimaginabilă),

iMedian HD (softul cu care vine receptorul de telecomandă de la carcasă și cu care m-am înțeles binișor pina acum vreun an când filmele HD 1080p au apărut cu bocancii în viața noastră)

VideoLAN VLC – bunuț

BSPlayer  – bunuț dar la filmele HD in full screen are oarecare probleme de îngheț….

XBMC – aplicție open source, media player și centru de entertainment. caută toate filmele le aranjează în diverse moduri, afișează informații despre film sau episod, actorii care joacă, etc. Cel mai bun media center de până acum

Cireașa de pe tort poate fi un sistem de operare Linux minimal, construit de la zero și nu bazat pe o distribuție existenta: OpenELEC. Acesta este construit în jurul XMBC iar dacă aveți norocul să vă meargă instalarea și să aveți hardware-ul cu drivere scrise deja atunci aveți o mașină de filme , se pot atașa și diverse carduri TV dar pe mine nu m-a interesat subiectul.

O altă variantă de OS ar fi si Ubuntu care e ceva mai stabil dar nu am reușit să-l fac să arunce sunetul digital 5.1 prin SPDIF, pe cablul optic. Vroia doar stereo. Așa că am revenit la Windows 7, care după ce bootează porneste imediat XBMC și cu asta basta.

 

 

window.print() black belt

Vine un client si vrea un print preview pentru o pagina, dar nu vrea toata pagina ci doar o bucata.
Tu esti lenes si n-ai chef sa te apuci sa faci un raport frumos, cu export, etc. Pur si simplu vrei un html chior sa fie deschis intr-un popup si mai departe print.
Evident ca IE implementeaza altfel povestea asta…
Logic, scriptul JS ar fi cam asta:

var wnd = document.open();
wnd.document.write(“your shit”);
wnd.print();
 

Ei bine nu… pe interneti lumea zice ca ar fi ceva cu securitatea in browser, ca sa nu te apuci sa faci magarii. Altii zic ca pe IE, scriptul trebuie sa fie:

var wnd = document.open();
wnd.document.write(superContent);
window.print();
 

Nici asa nu merge. M-am apucat sa injectez javascript in wnd.document.write() si sa execut cod pe body.onload.
Firefox, Chrome merg. IE nu. Dar stati ca nu e tot: daca se pune pe onload() un alert mic, ala se executa. doar window.print() nu.
Mai mult decit atit, daca acel superContent e salvat pe disc si apoi deshis cu IE, print-ul se executa. doar din window.open() nu.

Dupa lungi cautari am gasit:

var myWindow = window.open(”, ”, ‘width=200,height=100’);
myWindow.document.write(allcontent);
myWindow.document.close();
myWindow.focus();
myWindow.print();
myWindow.close();
 

Nu ma intrebati de ce, dar merge. Practic popup-ul se executa ca un ahem… popup, nu in alt tab ca pina acum.
Welcome to the Twilight zone.

De ce vreau iPhone4S de la Vodafone?

Ca urmare a provocarii de aici, raspunsul meu e urmatorul: vreau sa imi spuna Siri o poveste in fiecare seara. Lasand gluma la o parte, cam asta ar fi principalul motiv pentru care mi-as schimba telefonul curent (iPhone 4, cumparat de la Vodafone in Ianuarie): asistentul personal.

Mai sint citeva functii de care m-as bucura: camera de 8MP, filmarea 1080p si nu in ultimul rind procesorul dual core A5. Ar mai fi de mentionat si viteza modemului 3G de 14.4MBps dar cum majoritatea timpului mi-l petrec la serviciu unde am WiFi atunci nu e chiar relevant pentru mine.

Una peste alta un update major, dar nu un telefon nou asa cum se asteptau fanii asta-primavara.

A.. si de ce vreau tot de la Vodafone? Pentru ca sint abonat VDF din 1997 🙂 fara alte comentarii.

Crystal Reports – proceduri stocate cu sql adhoc

Bun. Deci esti nefericitul cistigator al loteriei: “Cine face raportul care arata rata pe ecran” si esti obligat sa folosesti o constructie de SQL pentru ca nu stii exact ce parametri o sa vina, din ce tabele o sa iei datele, etc.

La un moment dat se declara variabila @sqlDeExecutat de tip varchar(). In mod normal iti aloci loc suficient in dimensiunea variabilei ca deh… sa nu consumi, etc.

Dar ce te faci cind raportul crapa iar tot ce gasesti in SQL Profiler arata 100% ok? Daca iei procedura stocata si o executi de mina, totul e in regula, raportul e bine definit, doar ca nu merge cu parametri mai lungi pasati la procedura stocata… iar parametrii se incadreaza in dimensiunile declarate!

Mai mult decit atit, variabila @sqlDeExecutat nu contine un sir mai mare decit cel declarat de tine… Deci.. frack it! Declara @sqlDeExecutat varchar(max) si hai noroc.

Update

Dupa 487 de emailuri de la hosting care ma avertizau sa imi fac update la wordpress m-am invrednicit sa trec pe versiunea noua. Nici acum nu reuseam daca hostx nu trecea pe o versiune noua de PHP incompatibila cu versinea mea de WP. Deci, iata. Deci da.

Securitate in TFS 2010 web access

Am avut de facut o chestie care să ascunda niște taburi din Web Access de pe Team Foundation Server 2010. Mai precis tabul de Build pentru că nu folosim mecanismul de build din TFS și tabul Source ca să nu vadă dușmanul codul sursă. Mai mult decât atît, hakăru nu o sa aibă voie sa vadă codul sursă nici din changeset-uri.

În mod normal trebuie să dai drepturi pina îi ia dracii la uzări ca să nu poata face click pe taburile respective. Dar… ca să nu mai umblu ca nebunu prin documentație, am intrat cu bocancii direct în pagini și în controale și am început să șterg. A mers, pentru ca TFS web access nu e bazat pe tehnologie Sharepoint, ci e o aplicație relativ normală.

Gata, am plecat în weekend. Nu am apă caldă.

ANTS memory profiler de la RedGate

Se da un serviciu Windows care din motive complet obscure ajunge pe la 4-500 de MB ocupati in memorie. Cum facem?

1. Ne uitam prin cod. Daca nu ne sare nimic in ochi, mergem la punctul

2. Cautam scurgeri (nu rideti) de memorie cu un profiler bun. Cica cel mai bun e ANTS Memory Profiler pentru aplicatii .NET

Da, e foarte tare. Iti arata instantele ramase ca proastele agatate de niste evenimente, tot felul de obiecte care nu au apucat sa fie colectate, etc.De asemenea faci snapshoturi de memorie si vezi exact ce se umfla si unde.

Dar… are o mare problema, e complet instabil. Cind ti-e lumea mai draga iti crapa  si se duce pe apa Simbetei toata munca de ore in sir, pentru ca:

– fie nu ai apucat sa salvezi rezultatele profilului si o iei de la capat. Si iar.. si iar.. Iar din cind in cind sesiunea de Terminal Services unde esti legat la un client prin New Jersey se apropie de cele 15 minute si iti vine sa-ti bati copii ca se duce dracului tot si o iei de la capat.

– fie ti-ai belit ochii dupa niste clase si uiti cum dracu ai ajuns sa vezi tocmai niste exceptii custom care tin agatati circa 150 de megi de string (System.String)

Deci, foarte bun dar ma cac in el. Noroc ca nu am dat bani si sint in trial.

XIRR pe SQL Server

Recent am avut de facut un raport nu neaparat foarte complex (ce-i dept fac niste calcule in vreo 3 pasi…) dar bomboana pe coliva era de simulat functia XIRR (internal rate of return) care merge bine-mersi in Excel.

Definitie IRR (in engleza ca nu am gasit in limba RO) :

XIRR calculates and returns the internal rate of return of an investment that has not necessarily periodic payments. This function is closely related to the net present value function (NPV and XNPV). The XIRR is the interest rate for a serie of cash flow where the XNPV is zero.

@values contains the serie of cash flow generated by the investment. @dates contains the dates of the payments. The first date describes the payment day of the initial payment and thus all the other dates should be after this date. The optional @guess is the initial value used in calculating the XIRR. You do not have to use that, it is only provided for the Excel compatibility.

Ati inteles ceva? Eu nu. Dar sa continuam.

Circa trei zile mi-a luat sa:

1. Gasesc ceva acceptabil pe internet

2. Sa potrivesc functia gasita cu ceea ce am eu

3. Sa verific datele

Astfel, avind o investitie de X la data D1 si o incasare Y la data D2, pun in tabela tmp_IRR(dayz int, cashflow money) valorile:

0, X

D2-D1, Y

Challenge-ul a fost sa potrivesc calculele din functie ca sa imi iasa fix ca in Excel. Ideea e ca unii calculeaza o medie a zilelor din an ca 360, altii 365 altii 365.25 (ca sa compenseze ziua din anii bisecti). Aparent in Excel se foloseste 365.25 .

alter function ufn_irr (@rateguess real) returns real
begin
declare @delta real — rate delta in 2-point formula
declare @epsilon real — criteria for success, npv must be within +/- epsilon of zero
declare @maxtry smallint — number of iterations allowed
declare @irr real — return value

–set @rateguess=0.1
set @delta=.0001 /*– .0001 equals one hundreth of one percent */
set @epsilon=.005 — .005 equals one half cent
set @maxtry=1000
set @irr=null — assume failure

declare @rate1 real
declare @rate2 real
declare @npv1 real
declare @npv2 real
declare @done smallint
declare @try smallint

set @done=0
set @try=0
while @done=0 and @try<@maxtry
begin
set @rate1 = @rateguess
select @npv1 = SUM(cashflow*power(1+@rate1,-dayz/365.25)) FROM dbo.tmp_IRR

if abs(@npv1) < @epsilon
begin
— success
set @done=1
set @irr=@rate1
end
else
begin
— try again with new rateguess
set @rate2 = @rate1 + @delta
select @npv2 = SUM(cashflow*power(1+@rate2,-dayz/365.25)) FROM dbo.tmp_IRR

set @rateguess = @rate1 – @npv1*(@rate2-@rate1)/(@npv2-@npv1)
set @try = @try + 1
end
end

return @irr

end