Archive for March, 2007

Ezen jót röhögtem

Thursday, March 29th, 2007

Tóta W. Sciós cikkét olvastam, és abban a kommentek között találtam ezt:

Jehova tanúi becsöngettek egyik az albérletbe. Két nő az egyik igazi bombázó, hát haver beengedte őket. Rővid felvezetés után előkaptak a hátitatyóból egy Geforcemx200 videokáryát, majd rejtélyes hangon feltették a kérdést: Ön szerint ez mi???

Barátom kissé meghökkenve, megnézte, megmondta: ez egy Geforcemx200 videokárya.

Válasz: nem! Ez egy alaplap!!
Ő: talán mégsem, ez van az én gépemben is.
Válasz: Jó,jó de kik csinálták ezt???
Ő: Taiwaniak, a felirat szerint.
Válasz: Ezt nem emberek csinálták!!
ő: A taiwaniak nem emberek?
Válasz: Nézze milyen bonyolult, ilyet emberek nem képesek maguktól csinálni!!
Ő: Ha a nyáklemezre gondol, olyat már én is csináltam, persze egyszerűbbet.
Válasz: Tehát nem tudna ilyen bonyolult szerkezetet készíteni.
Ő: Nem, nincs meg hozzá a gyáram.
Válasz: Látott már ilyen gyárat?
Ő: Nem.
Válasz: Nem tud ilyet készíteni, nem látta még soha hogyan és kik csinálják, nem furcsa ez??

Itt fulladt röhögésbe a dolog.

Tudnék mesélni mindkét bandáról…
Majd egyszer.

Balássy Gyuri Ajaxos szerszámosládája

Tuesday, March 27th, 2007

Ha Ajaxolnék, most örülnék nagyon.

WIX kérdés

Tuesday, March 27th, 2007

Hátha valaki ért hozzá, ha nem, holnap kiírom az amerikai wix listára.

Szóval, lokalizálni kellene az installer GUI-t.

light.exe installer.wixobj -ext WixUIExtension -loc %LANGDIR%\strings.xml -loc WixUI_%CULTURE%.wxl -cultures:%CULTURE% -out %1

Ugye a GUI a WixUIExtension.dll-ben van. A saját lokalizált stringjeim a strings.xml-ben, a WixUI_%CULTURE%.wxl pedig a WixUI lokalizált stringjei.

No, ezt lefordítva több száz hibaüzenetet kapok, melyek szerint több, mint egy helyen vannak definiálva lokalizált stringek.

Pl.
d:\WorkTFS\TargetApps\Wxt\WIX\WixUIExtension.dll : error LGHT0100 : The localization identifier ‘VerifyReadyDlg_Title’ has been duplicated in multiple locations. Please resolve the conflict.

Gondolom az a baja, hogy a WixUIExtensionben eleve benne vannak az angol stringek, és én még megadok neki a wxlben más nyelvűeket. Csak azt nem értem, hogy elvileg a WixUIExtension-ben definiált stringek felülírhatók, de mégse ez történik. Biztos valami apróságot rontok el, de nem tudom mit.

Felajánlok egy Boci csokit a megfejtőnek. Vagy Tibit. :)

vsprops fájlok

Tuesday, March 27th, 2007

Érdekes, nem agyonreklámozott, de nagyon hasznos kis lehetőséget találtam a C++ fordításhoz.
A project fájlok MSBuild formátumú fájlok, amelyeket egyes buildek során jó lenne kicsit módosítani. Pl. máshová és sokszor kissé másképp kell buildelni a fejlesztői gépen és másként a rendszeres buildben. Vagy a nemzetközi vagy brandelt verziók fordítása során máshonnan kell venni erőforrásokat, stb.

No, az ilyen esetekben tök jól jönnek a vsprops fájlok. Ezek pont olyan szerkezetűek mint egy C++ project fájl (vcproj). Parancssori fordításkor meg lehet őket adni a project fájl mellé, így felül lehet írni abban a számunkra szükséges beállításokat.

Pl. a.vsprops

[source:xml]




[/source]

És egy fordítás a vsprops használatával:

[source:C++]
vcbuild.exe /override:a.vsprops akarmi.vcproj “Release|Win32”
[/source]

Félreértés ne essék, pont az include könyvtárakat meg lehet adni környezeti változókban is, de itt csak ez a megoldás volt jó, mert az eredeti projectbe be vannak égetve az angol erőforrásokat tartalmazó elérési utak, így a projectet minden környezeti változó nélkül lehet buildelni a fejlesztői gépen. Ezeket nem lehet kiütni csak a környezeti változókkal, mert előbb dolgozza fel a projectben beállított includede path-okat az rc.exe, és csak utána nézi meg az INCLUDE környezeti változóban megadott pathokat. Azaz az angol erőforrások fordulnának mindig be, nem a lokalizáltak. Így viszont kiütöm az angol include patht, ezért a környezti változókban megadott include patht fogja használni, amit meg már ráállítottam a megfelelő nyelvnek megfelelő könyvtárra.

WTF gyanús kód :)

Tuesday, March 27th, 2007

Benevezhetne ide.

Update: gaba kedvéért itt a kód:

[source:VB]
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click

Dim name_cost As String
Dim i As Integer ‘A ListView-kat lépteti
Dim b As Integer ‘Az item-ket lépteti
Dim c As Integer ‘A subitem-ket lépteti
Dim d As Integer ‘A találatok item részét lépteti
d = 1
i = 0

If Me.CheckBox1.Checked Then
While i <= 21 c = 1 b = 0 If i = 1 Then Főablak.változó = Főablak.ListView1 End If If i = 2 Then Főablak.változó = Főablak.ListView2 End If If i = 3 Then Főablak.változó = Főablak.ListView3 End If If i = 4 Then Főablak.változó = Főablak.ListView4 End If If i = 5 Then Főablak.változó = Főablak.ListView5 End If If i = 6 Then Főablak.változó = Főablak.ListView6 End If If i = 7 Then Főablak.változó = Főablak.ListView7 End If If i = 8 Then Főablak.változó = Főablak.ListView8 End If If i = 9 Then Főablak.változó = Főablak.ListView9 End If If i = 10 Then Főablak.változó = Főablak.ListView10 End If If i = 11 Then Főablak.változó = Főablak.ListView11 End If If i = 12 Then Főablak.változó = Főablak.ListView12 End If If i = 13 Then Főablak.változó = Főablak.ListView13 End If If i = 14 Then Főablak.változó = Főablak.ListView14 End If If i = 15 Then Főablak.változó = Főablak.ListView15 End If If i = 16 Then Főablak.változó = Főablak.ListView16 End If If i = 17 Then Főablak.változó = Főablak.ListView17 End If If i = 18 Then Főablak.változó = Főablak.ListView18 End If If i = 19 Then Főablak.változó = Főablak.ListView19 End If If i = 20 Then Főablak.változó = Főablak.ListView20 End If If i = 21 Then Főablak.változó = Főablak.ListView21 End If While b < Főablak.változó.Items.Count.MaxValue If chc2.Checked Then name_cost = Főablak.változó.Items.Item(b).SubItems(4).Text Else name_cost = Főablak.változó.Items.Item(b).Text End If If name_cost = Me.TextBox1.Text Then 'Me.találatok_mini.Items.Add(Főablak.változó.Items.Item(b).Text) 1: 'Me.találatok_mini.Items.Item(d).SubItems(1).Text = Főablak.változó.Items(b).SubItems(4).Text Dim add As ListViewItem add = találatok_mini.Items.Add(Főablak.változó.Items.Item(b).Text) add.SubItems.Add(Főablak.változó.Items(b).SubItems(4).Text) add.SubItems.Add("") If i = 1 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Merev acélbetétek" If i = 2 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Betonacélok" If i = 3 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Adalékanyagok" If i = 4 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Egyéb" If i = 5 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Faanyagok" If i = 6 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Beton falazók" If i = 7 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Égetett agyagtégla" If i = 8 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Pórusbeton termékek" If i = 9 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Habarcsok" If i = 10 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Ragasztók" If i = 11 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Beton" If i = 12 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Szálas hőszigetelők" If i = 13 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Poliészter hőszigetelők" If i = 14 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Kiegészítő anyagok - Hőszigetelés" If i = 15 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Beton cserép" If i = 16 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Kerámia cserép" If i = 17 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Zsindely" If i = 18 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Kiegészitő anygagok - Tetőfedés" If i = 19 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Bitumenes lemez" If i = 20 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Műanyag lemez" If i = 21 Then Me.találatok_mini.Items.Item(d).SubItems(2).Text = "Fóliák" d = d + 1 End If End While End While End If End Sub [/source]

Edit and Continue – hasznos-e?

Tuesday, March 27th, 2007

Annak idején, még a VS 2005 illetve a .NET fw. 2.0 tervezésekor szó volt róla, hogy a C#-ban lesz refactoring (ez ugye csak VS fícsör), a VB-ben nem. Cserébe a VB-ben lesz Edit and Continue, de a C# nem kap ilyet.
Akkor az volt az érv, hogy a C#-osok komoly emberek, akik naphosszat refactorolnak, de nem hekkelnek a debugolás alatt álló kódon, mert az gagyi. De aztán a C# lobbi belerakatta.
Most, hogy C++-ban dolgozok, ahol már a VC6 óra van E&C elég sokat használom. Azért, mert gyakran van, hogy valami apróságot elszúrok, és mire azt a kódot újrafuttatom, sok időt veszítenék. Egyébként egy IE addont írok. Tudom, ha lennének jó Unit tesztjeim, akkor pikk-pakk újra lehetne futtatni a kódot a vizsgált pontig, de nincsenek, C++-ban még nem értek a Unit teszteléshez.
Szóval értem az érvet, komoly, unit tesztekkel felvértezett programoló nem használja az EC-t, de én úgy látszik nem vagyok az, így örülök neki, hogy van.

Amikor év elején egy C# kódot gyúrtam át, akkor nem is emlékszek, hogy használtam volna, de ott volt valag sok unit tesztem.
Ti használjátok, vagy komoly programolók vagytok? :)

User interface description for ASP.NET és WinForms

Thursday, March 22nd, 2007

Kiírom, hátha van valakinek jó ötlete, vagy akár csinált már ilyet.
A feladat, hogy viszonylag egyszerű, form alapú, adatbázis hátterű appokat (ez ugye az enterspájz dev) akarnak írni. A UI-t mindenképpen csak egyszer akarják leírni, valamilyen metanyelven, amelyből egy-egy keretrendszer asp.net WebForms és Winforms kimenetet készít. Nem feltétlen előfordítással, hanem akár azonnali értelmezéssel.
Nem csak a GUI-t kell leírni, de egyszerűbb logikát is kell támogatni. Pl. ha nincs valami kitöltve, akkor egy másik control csoport disabled legyen, stb.

Vannak GUI leírók, mint a XUL vagy a XFDL, esetleg XAML.
Az egész cuccnak menni kell w2k-n, így fw. 2.0 a max, amit lehet használni. Jó lenne, ha a meglévő nyelvet kibővítve a hozzá kapcsolódó esetlegesen létező designer programot is ki lehetne bővíteni az új nyelvtannak megfelelően.

Van valakinek ötlete, netán tapasztalata a témában? Szívesen beszélgetnék róla kicsit.

Wix UI a 3.0-hoz

Thursday, March 22nd, 2007

A legtöbb fellelhető doksi még a 2.0-ról szól, amiben wixlib xml fájlok tartalmazták a GUI-t. A 3.0-ban ezek bekerültek DLL-ekbe.

Csak azért írom ezt le, mert elég nehezen akadtam rá erre az infóra.

Grid színezés .NET-ben

Sunday, March 11th, 2007

Tocsi színezi a gridet, jópofa.

Reflector magic

Friday, March 9th, 2007

Durva! Az 5.0-s reflectorban Ctrl-Alt-C-t nyomva egy típuson vagy memberen, kapsz egy urlt a clipboardra, pl:
code://System:2.0.0.0:b77a5c561934e089/System.IO.Compression.GZipStream/Flush()
vagy
code://System:2.0.0.0:b77a5c561934e089/System.Net.Cache.RequestCachePolicy

Ezeket be lehet rakni linkként egy oldalba.

Ha fenn van a reflector a gépeden, akkor a linkre kattintva egyből ott vagy a megfelelő helyen.
Hihetetlen jó ez, amikor valakinek meg kell mutatni valamit az FCL-ből.
Gratula Lutz barátunknak, eddig is kibaszott jó volt ez a program, de most…

Hogyan kell Vista alatt szervizeket debugolni?

Wednesday, March 7th, 2007

Ha Vista alatt akarunk szervizt debugolni bajban vagyunk, mert másik sessionben fut, mint a debuggerünk (az UAC miatt).

A megoldás remote debugging (lehet van más is), itt leírják, hogyan kell ezt megtenni.

Office 2007 Addin ATL-lel

Wednesday, March 7th, 2007

(Másodszor írom be, az első post elveszett. Büdös FireFox meg nem jegyzi meg az input mezők tartalmát a back-hez. Monnyon le.)

No, szóval ha nincs .NET fw. a kusztomereknél, akkor nincs mese, ATL-lel, C++-ban kell megírni az Office addint.

Ez a cikk nagyon jó bevezető a témában.

Visual Studio 2005 Service Pack 1 Update for Windows Vista letölthető

Wednesday, March 7th, 2007

A bétáját már régóta használom, debugolás közben renszeresen beteg volt a gui, remélem a végleges ezt is gyógyítja.

Forrás.

Mocks Aren’t Stubs

Tuesday, March 6th, 2007

Martin Fowler bátyó szokás szerint éleslátóan ír, ezúttal a különböző Unit tesztelési módszereket elemzi ki.

Rá kellett jöjjek a cikk alapján, hogy a DP tanfolyamon Mockként tanított objektumok valójában Fake objektumok voltak. Mert hogy:

  • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what’s programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it ‘sent’, or maybe only how many messages it ‘sent’.
  • Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

Érdemes rászánni tíz percet, tudattágító hatású cikk.

SQL adatbázis scriptelő

Tuesday, March 6th, 2007

Egyszerű kis open source projekt, amely SMO segítségével leszkripteli az adatbázis objektumokat.

Ha másra nem, hát SMO példának jól jöhet.

A sebessége egyébként meglepően gyalázatos, 12 perc alatt végzett az AdventureWorks-szel, 800 objektummal (jó, a replikáció be van benne izzítva, az ad hozzá sok objektumot).

Megnéztem már munka közben profilerrel, mert érdekelt, miért ilyen lassú. Nos, minden egyes objektumhoz lefuttatott egy jó nagy rendszertáblákra vonatkozó lekérdezést, amelyek végrehajtási ideje 100 és 500 ms között volt. Ezt beszorozva 800-zal kijön a fenti idő.

Ízelítőül egy 650 ms-os állatfajta:

[source:SQL]
SELECT
SCHEMA_NAME(v.schema_id) AS [View_Schema],
v.name AS [View_Name],
tr.name AS [Name],
trr.is_instead_of_trigger AS [InsteadOf],
CAST(ISNULL(tei.object_id,0) AS bit) AS [Insert],
CAST(ISNULL(ted.object_id,0) AS bit) AS [Delete],
CAST(ISNULL(teu.object_id,0) AS bit) AS [Update],
CASE WHEN tr.type = N’TR’ THEN 1 WHEN tr.type = N’TA’ THEN 2 ELSE 1 END AS [ImplementationType],
CAST(OBJECTPROPERTYEX(tr.object_id,N’ExecIsAnsiNullsOn’) AS bit) AS [AnsiNullsStatus],
CAST(OBJECTPROPERTYEX(tr.object_id,N’ExecIsQuotedIdentOn’) AS bit) AS [QuotedIdentifierStatus],
NULL AS [Text],
CAST(
tr.is_ms_shipped
AS bit) AS [IsSystemObject],
CASE WHEN ted.is_first = 1 THEN 0 WHEN ted.is_last = 1 THEN 2 ELSE 1 END AS [DeleteOrder],
CASE WHEN tei.is_first = 1 THEN 0 WHEN tei.is_last = 1 THEN 2 ELSE 1 END AS [InsertOrder],
CASE WHEN teu.is_first = 1 THEN 0 WHEN teu.is_last = 1 THEN 2 ELSE 1 END AS [UpdateOrder],
ISNULL(smtr.definition, ssmtr.definition) AS [Definition]
FROM
sys.all_views AS v
INNER JOIN sys.objects AS tr ON (tr.type in (‘TR’, ‘TA’)) AND (tr.parent_object_id=v.object_id)
LEFT OUTER JOIN sys.assembly_modules AS mod ON mod.object_id = tr.object_id
INNER JOIN sys.triggers AS trr ON trr.object_id = tr.object_id
LEFT OUTER JOIN sys.trigger_events AS tei ON tei.object_id = tr.object_id and tei.type=1
LEFT OUTER JOIN sys.trigger_events AS ted ON ted.object_id = tr.object_id and ted.type=3
LEFT OUTER JOIN sys.trigger_events AS teu ON teu.object_id = tr.object_id and teu.type=2
LEFT OUTER JOIN sys.sql_modules AS smtr ON smtr.object_id = tr.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmtr ON ssmtr.object_id = tr.object_id
WHERE
(v.type = ‘V’)and(v.name=N’MSmerge_ppmv_B78A4C9C984B46D6BD69FEF04493340F’
and SCHEMA_NAME(v.schema_id)=N’dbo’)
ORDER BY
[View_Schema] ASC,[View_Name] ASC,[Name] ASC
[/source]

ATL Server: Visual C++ shared source software

Saturday, March 3rd, 2007

Valaha még jól jöhet.

The following parts of ATL Server will part of the shared project:

  • Core ATL Server Framework classes in atlisapi.h, atlstencil.h, atlserr.h
  • Caching classes in atlcache.h
  • Cryptography classes in atlcrypt.h
  • HTML generation on server side and reading on client sides in atlhtml.h
  • Performance monitoring classes in atlperf.h
  • Extension management classes in atlextmgmt.h
  • Server and client side support for SOAP based Web services in atlsharedsvc.h, atlsoap.h
  • Session-state classes and interfaces in atlsession.h
  • MIME/SMTP support in atlmime.h and atlsmtpconnection.h
  • Regular Expression support from atlrx.h
  • Stream helpers in atlsoap.h and atlhtml.h
  • Many of the ATL Server tutorials, samples and help pages

Orcas – márciusi kiadás

Saturday, March 3rd, 2007

Érdekelne ez az új kiadás, de nekem nem virtuális gép image kellene, hanem a sima telepítők.
Találkozott valaki ezzel, vagy csak virtuális izé van?

Case insensitive keresés firebirdben

Saturday, March 3rd, 2007

Mostanában néha ránézek a firebirdre, mert a céges programban ez működik kliens oldalon.

Most pl. case insensitive keresésre van szükség, file nevek összehasonlítása miatt, de természetesen csak indexxel gyorsított megoldás érdekel.

Úgy látom a fb alapban nem tud olyat, mint az SQL Server, hogy egy adott ország szerinti rendezést case insensitive módon végezze el. A feladatot indexelt, számított oszloppal lehet megoldani.

Még nem próbáltam ki, majd ha a kolléga beépíti, elmesélem megy-e rendesen.

In Firebird 2.0 it is possible to create a so-called “Expression Index” on an UPPER() function call:
CREATE INDEX IDX_PERSON_LASTNAME ON PERSONS COMPUTED BY (UPPER (LAST_NAME COLLATE DE_DE))

From now on, it is possible to search using exactly the same expression:
SELECT * FROM PERSONS WHERE UPPER (LAST_NAME COLLATE DE_DE) = UPPER(:SEARCH_STRING COLLATE DE_DE)

Nagyon hasznos kis eszköz – Resource Refactoring

Saturday, March 3rd, 2007

A meglévő VS refactoringok listáját bővíti ki ez a kis eszköz.
Kijelölve egy stringet berakja azt egy típusos erőforrásba, és kibodva a stringet a kódból berakja az erőforrás hivatkozást. Nagyon cool, de tényleg.

JS injektálás html oldalba

Thursday, March 1st, 2007

Az AJAX-os izék szeretnek dinamikusan maguk alá húzni plusz JavaScript kódokat, és azokat betölteni a többi script közé. Ez nem is mindig olyan egyszerű, főleg, hogy minden böngészőben jól menjen. Az eval ugyanis nem egyformán működik a különböző böngészőkben, IE-ben az execScript időnként nagyon sikert arat.

Lsd. bővebben.