Változások

Megszűnt a voji.hu régi mivolta, helyét teljes egészében a blog vette át, mivel a voji.hu oldal karbantartására abszolút nem volt már időkeret.
Ellenben a blog kategóriái picit átrendezésre kerültek, és mostmár látok arra is (pici) esélyt, hogy ne csak programozási, hanem zenéléssel kapcsolatos postok is kerüljenek bele.

SVCgen batch processing, and parameters

Az SVC technológia kapcsán (ami egyébként kivételesen ötletes) az az érzése lehet az embernek, mintha nem lett volna rá idő rendesen beintegrálni a Visual Studio 2008-ba, ugyanis nincs módunk a kliens stub-ok generálására studióból. Vagy legalábbis én még nem jöttem rá erre. De sebaj, van megoldás. Írni kell két bat filét.

svc.bat

@echo off
echo Starting servicestub generation 
cmd /V:ON /C svcgen.bat

svcgen.bat

@echo off
set serviceList=system/system.svc,other/other1.svc,common/common.svc,admin/admin.svc

set serviceHost=http://localhost:3467/services/
set outputDir=.\client\serviceproxy\servicestubs\
set outputConfig=.\..\..\..\services_app.config
set resourceFile=.\..\common\bin\Debug\common.dll
set svcTool="c:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\SvcUtil"

set wsdlPostFix=?WSDL
set commonParams=/noLogo /target:code /l:cs /ser:datacontractserializer /importxmltypes

 
set cmdLine=%commonParams% /r:%resourceFile% /config:%outputConfig% /d:%outputDir%

del %outputDir%%outputConfig%
del /Q %outputDir%\*.* 

set firstrun=true

for %%a in (%serviceList%) do (        
  echo Processing service: %%a       
  echo ------------------- 
  rem echo %svcTool% %cmdLine% %serviceHost%%%a%wsdlPostFix%
  
  if "!firstrun!" == "false" (  
    %svcTool% %cmdLine% /mergeConfig %serviceHost%%%a%wsdlPostFix%   
 )
    
  if "!firstrun!" == "true" (
     %svcTool% %cmdLine% %serviceHost%%%a%wsdlPostFix%     
     set firstrun=false
 )  
)

A szolgáltatásokat a serviceList listába kell felvenni, vesszővel elválasztva.
A /r: paraméter arra szolgál, hogy azon osztályok, amik szerepelnek a megadott dll-ben nem kerülnek legenerálásra a kliens oldalon.

Ha igazán széppé akarjuk tenni a megoldást, akkor kell írnunk egy alkalmazást, ami a végeredményül kapott services_app.config fájlt bele tudja illeszteni az app.config fájl megfelelő xpath helyére.

Panoráma

Semmi időm nincs, élni sem, nem hogy blogolni.
De ha valaki szeret fényképezni, és hatalmas felbontású képeket szeretne csinálni, akkor nincs szüksége másra, mint egy fényképezőre, ami támogatja a képek nagyáboli egymáshoz illesztését (stitch assist) és egy PTGui nevű programra.

És az eredmény valami ilyesmi lesz:
kép_1
kép_2

Na pá

Bérletigazolvány

Hogy mi közöm a BKV-hoz? Néha magam is elgondolkozom rajta. Amióta van autóm teljesen elszeparálódtam a Máv értékelhetetlen, színvonaltalan szolgáltatásától. És milyen jól tettem. A havi bérlet árából bőven megtankolok, és nem 1.5 óra az út hanem maximum 40 perc. A sztrájkokról is csak akkor értesülök, ha valakit felhozok pestre, mert épp megint nem járnak a vonatok. Ennek ellenére pesten nem használom az autót, mert úgy érzem, hogy nem helyes megfullasztani embertársaimat. Így hát marad a BKV amivel nagy általánosságban nem is volt bajom. Eddig.
Történt ugyanis, hogy hazafele tartok, mikor odajött hozzám egy kedves ellenőr. Sebaj, mindennapos dolog, és amúgy is mindig van bérletem, mert bízom benne, hogy ha fizetek, akkor talán szolgáltatást is kapok. A szolgáltatást meg is kaptam, az ellenőr kedvesen megkérdezte, hogy mi az a szám a bérleten. Én kedvesen mondtam neki, hogy a személyi igazolványom száma, mi más. Válasz: hát fiatalember szét kellene tépnem a bérletét, mert ez így nagyon helytelen. Szerintem meg nem az, de a vége az lett a dolognak, hogy nagylelkűen mégsem tépte szét, és a lelkemre kötötte, hogy azonnal másnap de rögtön csináltassak BKV bérletigazolványt. Kb. 4-5 éve nincs ilyenem, és azért meg voltam nélküle egész jól. De mivel én jó fej vagyok, és a világért sem akarok konfrontálódni a helyi magasan képzett BKV-s ellenőr urakkal, valamint úgyis mentem bérletet venni, gondoltam akkor most már lesz ilyenem is. Sajnos az utolsó igazolvány kép körülbelül 5 évesen készült rólam. De gondoltam az pont megfelelő is lesz. Nagy lelkesen odaálltam egy bérletpénztárhoz, ahol balszerencsémre éppen valami probléma kezdett kibontakozni. Valaki ugyanis épp 30 napos bérletet akart venni, de azt mondta a kedves hölgy hogy olyan nincs. Ezt a párbeszédet ismételgették már 5 perce, amikor arra a szörnyű felismerésre jutottam, hogy én is olyat akarok az új igazolványom mellé, szóval gyorsan oda is álltam egy másik ablakhoz. Ez az ablak sokkal jobbnak tűnt, odaadtam a képet, meg a pénzt, és meglepő módon ott volt 30 napos bérlet is 🙂
Az igazolvány. Szóval csak a kép kellett. Azt egy hölgy beszegecselte egy lapra, csodapecsét, és már kész is a szupi, eredeti BKV bérletigazolvány. A képre annyi volt a reakció, hogy megkérdezte, diák bérletet kérek e? Sebaj, az élet szép, és már bérletigazolványom is van.
De a hülyeségek helyett inkább:
Vehetnének. számlázó szoftvert, hogy ne kelljen várni arra, amíg a szerencsétlen árusok minden hónapban, minden alkalmazottnak beírják kézzel a számlára a cégadatokat (a várakozási idő 70%-át ez tette ki)
Aztán érdemes lenne elgondolkozni azon is, mennyivel jobb a személyigazolványomnál, egy darab fehér lap egy képpel, amit egyébként bárki, bármikor meghamisít. Továbbá nincs rajta semmilyen adat, se név, se cím se semmi. Pontosabban nekem senki nem mondta, hogy meg kellene adni. Hely az van neki. Majd lehet, és persze ha lesz kedvem, kitöltöm ceruzával. Azt legalább ki tudom radírozni, ha kölcsönadom valakinek a bérletem.
De ami a legnagyobb probléma. Egy újabb iratot kell magamnál tartani, teljesen feleslegesen, ami ráadásul nem is kártya méretű… (nekem már akkora mert összehajtogattam ügyesen)

C# Singleton

Generics mint fogalom létezik a .net-ben. És ez jó. Gondoltam csinálok egy singleton ősosztályt mert az legalább olyan jó mint a generics.

   public abstract class Singleton<T> System.Object, new()
    {
        private static T _instance;

        public static T get()
        {
            if (_instance == null)
            {
                _instance=new T();
            }
            return _instance;
        }
    }

Öröm boldogság, gondoltam. De a fordító nem örült, és ezt mondta:

Error 1 Constraint cannot be special class ‘object’

Ejnye. Megnéztem a helpet.

Compiler Error CS0702
The following types may not be used as constraints: System.Array, System.Delegate, System.Enum, or System.ValueType.

Szerencsére, mint a Microsoft termékeknél általában, mindig van egy alternatív megoldás.

    public abstract class Singleton<T>
    {
        private static T _instance;

        public static T get()
        {
            if (_instance == null)
            {
                _instance = System.Activator.CreateInstance<T>();
            }
            return _instance;
        }
    }

Szolgáltatás és a Timer

Naivan azt gondolhatnánk, hogy ha egy Timer komponenst használunk a szolgáltatásunkban az működni fog. Pedig nem. A .Net rendelkezik pár Timer osztályal számunkra most kettő érdekes (az ismertetés csak felületes, akit érdekel nézze meg msdn-en ügyesen):
System.Threading.Timer: mint neve is mutatja külön szálat hoz létre, és az végzi az üzemezést
System.Windows.Forms.Timer: ezt használja a gui, azon keresztül történik az ütemezés
A feladat csak annyi, hogy amikor a szolgáltatásunk elindul, eldöntsük azt melyiket is kell használnunk. Célszerű erre egy burkoló osztályt létrehozni, ami a külső használók elöl elrejti, hogy milyen timer is működik a háttérben valójában.
Az én implementációm nagyon egyszerű, egy szempont volt: működjön. Letölthető itt.

Simian Mobile Disco – Hustler lyrics

Mivel még továbbra sem lelhető fel ezen alapmű szövege, közzéteszem, hogy mindeki meg tudja tanulni ügyesen.

Simian Mobile Disco – Hustler

Yeah, I’m a hustler baby
That’s what my daddy’s made me

If I had the money to go to a record store, I would
Go to the record store
Go to the record store and put records in my clothes
Go to the record store

Gotta walk out the record door past that record man

Go to the record store and put it in my clothes and walk past that record man
Gotta have the sticky hands when your *** is broke like me
Go to that record store, steal some records man
I’m telling you I’m broke
But I’m surviving and I can cope
Yeah, I’m a hustler baby
That’s what my daddy’s made me

It’s eight o’clock and I got nothing to do
Can’t go to the club so I guess I’ll go to the record store
Visit my record man with my sticky hands,
Walk out that record door with the records in my clothes

What the **** is you gonna do?
What the **** is you gonna do about it?
Nothing.

Push it, push it, push it

I’m a hustler baby
That’s what my daddy’s made me