tak ten team bude asi cerstvy. Par portu jsem delal a cele to je o jine filosofii distribuce a instalace, ale zejmena o jinem pouzivani knihoven v linuxu. Treba ten systray - to nereseni ani linuxove jadro, ani distribuce, ani Xka.
Sem se jeste kluci z Googlu asi nepodivali.
Ano, prave jste poukazal na jeden z tech problemu. Neexistuje jednotna KOMPLEXNI dokumentace a hrozne tezko se zjistuje, co kdo resi a co ma kdo resit. Je tohle vec jadra? Je tohle vec Xek? Je to vec windows managera? Udelal na to freedesktop nejaky projekt? Jde to vubec? Pochopte, tenhle zpusob prace je mnohem narocnejsi a delsi a tim padem drazsi. Vymluva na to, ze ten tym je cerstvy podle me zas tak uplne nesedi. To si ma kazda firma, ktera eventuelne chce portovat na Linux udrzovat tym guru, kteri z hlavy presne vedi, co dela ta a ta knihovna (a kde k ni ziskat dokumentaci)? Pochopte, ze kdyz tym lidi, co vytvorili projekt ve Windows, zvykli na perfektni a jednotnou dokumentaci vsech volani, jsou najednou postaveni pred ukol portovat projekt do systemu, kde musi u kazde prkotiny vubec zjistit, kdo nebo co ji ma na starosti a pak tezko shanet dokumentaci. A u racionalne rizene firmy musi nutne dojit k tomu, ze portaci pro Linux zastavi, protoze to trva dlouho (je to drahe) a stejne to vlastne nikdo nepouziva. Vedle dependency hell je absence nejake komplexnejsi dokumentace dost velky problem. A ne neresitelny, ale malo pravdepodobny, ze ho nekdo udela.
Vy ale zase pochopte, ze vam to ve Windows prijde jednodussi, protoze s nim mate vetsi zkusenosti nez v Linuxu. Me prijde (a to jsem par Windows aplikaci i driveru delal a ladil jsem i cizi aplikace) podstatne slozitejsi sehnat podporu pro Windows. Na zaklade vasich duvodu bych racionalne zastavil spis vyvoj pro Windows (ostatne jsme to take sice jednou ale presto udelali). Problem ale neni v bajtech, ale v hlavach a emocich.
Ono sehnat taky programatora, ktery umi portabilne programovat neni nic lehkeho. Ani pro Windows ani pro Linux (natoz Unix). BTW Kde se uci/skoli programovani pro Windows? Ale takovy programator citelne snizuje naklady na dalsi vyvoj byt jen v ramci Windows platformy. Aplikace, ktera nema oddelenou prezentacni vrstvu od logicke se samozrejme dost spatne portuje, ale podobny problem nastane i mezi Windows verzemi.
Faktem je, ze dnesni aplikace se programuji dost "hura" akcemi, takze jejich udrzitelnost je komplikovana i na jedne platforme.
Nejde o zkusennosti, jde o informace. Treba zminovany systray. Kdyz chci udelat ve Windows treba ten systray, dojdu na msdn a celkem rychle a bezbolestne to najdu (a to i s odkazy na souvisejici veci).
Ale kde mam hledat to, jestli je to v Linuxu zalezitost toho, toho nebo toho? Existuje nejaka takova knowledge base? Ne. Musim googlit a googlit a pak to treba najdu. A nebo ne, protoze hledam spatnou vec a musim se ptat v dizkusich. Ale takhle se prece neda profesionalne programovat. Proc muj zaver otacite jsem prilis nepochopil.To jste totiz nezduvodnil (na rozdil ode me), krome toho, ze jste napsal, ze jste jednou zastavili vyvoj aplikace pro Windows.
Abyste dobre pochopil, ja na Linux v jistych vecech nedam dopustit. Treba ted jsem programoval usb device pro jednoho arma a samozrejme jsem to potreboval ladit a testovat. We windows by tohle bylo peklo, ale v Linxu diky usbfs a slusnemu logovani to byla hracka. Ale jen tak mimochodem, doporucite mi nejakou SLUSNOU dokumentaci k usbfs? Ja si pulku chovani a konstant vycital ze zdrojaku kernelu... A to je to, o cem mluvim (ta co se da vygooglit ma na kazdem druhem radku TBS...).
"Problem ale neni v bajtech, ale v hlavach a emocich."
Tak tohle jsem uz nepochopil vubec.Ja si stezuju, ze neni dokumentace (coz jste mi nevyvratil), ale kontrujete, ze mam problem v hlave(ano mam, protoze tu dokumentaci z hlavy neznam) a v emocich (co s tim maji ale spolecne ty, to uz opravdu nevim....). Ja si naopak myslim, ze se na to divam naprosto bez emoci (spis na rozdil od Vas).
co mate vsetci so systray? moj WM nema systray, preco by to malo byt standardizovane, isto to ma M$ patentovane, a aj tak je to uchylne, mam pedsa virtualne plochy, nepotrebujem mat nic "minimalizovane". Aj tak je akcia na minimalizovanie a maximalizovanie narocnejsia na CPU ako preskocenie na inu plochu. Takze aj ekologia vravi proti takym akciam :)
Systray je velmi dobra vec. Predstav si, ze nepotrebujes mat X ploch len kvoli tomu, ze ti bezia nejake aplikacie na pozadi. Nepotrebujes ich vidiet, stacia ti len ze bezia a mozes ich nejakou ikonkou sledovat. Toto ti viacero ploch nezabezpeci nikdy.
A neviem odkial beries, ze minimalizovanie a maximalizovanie je narocnejsie na CPU ako stale prekreslovanie plochy :)
Jak najit potrebne informace je otazka zkusenosti. Schvalne jsem si to zkusil v MSDN a aniz bych kdy programoval neco pro systray nebo applet v gnome, tak jsem rychleji nasel navod na applet v gnome. Zkusil jsem tedy najit, jak se provadi IPC. Ani tady jsem s MSDN nepochodil, protoze rada veci byla jen na Windows Mobile, nebo Windows CE . OK do tretice zkusim stesti s ovladanim serioveho portu. Jak psat driver, jak konfigurovat serial port.... Nakonec jsem sice nasel potrebne informace (krome IPC), ale rozhodne to nebylo nijak lehke. Proste je to otazka i zkusenosti (google taky nikomu nepomuze, kdyz nebude vedet jak se poradne zeptat).
Mimochodem jsem zkusil i vsechna vyse uvedena temata vyhledat googlem a nasel jsem je rychleji jez v MSDN. Ja bych ten google zas tak nezatracoval.
Ja take netvrdim, ze MS nema dokumentaci v jistych vecech kompletnejsi. Urcite ma. Ale i tak stale tvrdim, ze vyvoj nebude drazsi na Linuxu nez na Windows.
A s temi emocemi jsem to myslel tak, ze clovek jednoduse at vedomne nebo podvedomne tihne k necemu, co nemusi mit racionalni zaklad a sam si ten fakt zracionalizuje systemem ber kde ber.
je dost pravděpodobné, že to znáte, ale pro jistotu to zde zopakuji.
Docela slušné množství aktuální dokumentace je ve zrojovém stromu jádra.
Stačí napsat "make pdfdocs" nebo "make htmldocs". Je pravda, že závislosti těchto procesů jsou docela pekelné. Na vytvořenou dokumentaci se leze podívat i u jiných. Například následující site je udržované v aktuální verzi
Na tomto site je i dost dalších zajímavých informací především pro začínající jaderné programátory.
Je pravda, že je to jen přehled a na zbytek jsou nutné zdojáky jádra, ale jsou k dispozici.
Další místo, kde je snaha postupně srovnat odkazy na dokumenty k jádru je zde
Když mluvíte o tom, jak jsou Windows krásně dokumentované, mohl by jste mi, prosím, poradit. Vím, téměř na 100%, že jádro Windows umí čekat (např. WaitForMultipleEvents) i na Handle odpovídajícím socketu, či otevřenému device. Myslím skutečně na handle device, ne na read, write, ioctl completion event. Bohužel se mi nikde nepodařilo najít, jak se událost z driveru na vlastní handle nastavuje. Je to nedokumentované, je možné, že to i v některých (kterých?) verzích nechodí. Výsledkem je, že to každý device řeší svým vlastním obastleným IOCTL. Přitom já bych to alespoň na svých driverech chtěl mít hezky tak, jak chodí select na Unixu. Nevíte, kde se to dá zjistit? Prosím, nechci flame, mě to opravdu zajímá.
Co se tyce vaseho postesknuti nad nedokumentaci pro Windows s vasim problemem, tak tohle neni bezne dostupne na MSDN Library. Musite byt MSDN Subscription, kde dostanete k dispozici Windows Driver Kit + Windows SDK, ktery prace slouzi to po cem touzite. Je toho mnohem tam mnohem vice. Bohuzel se ve vasi problematice moc nepohybuji, ale i tak predpokladam, ze to tam je.
Microsoft vydal svého času Windows Drivers Foundation, aby přitáhl více vývojářů driverů k Windows. Tam celkem aktuální dokumentace byla. Zároveň jsem se po tom díval i u kolegy, který měl v práci plný přístup ke korporate MSDN subscription. Obecně mě ta dokumentace tak moc kompletní nepřipadala. Jen jako kuriozitu uvedu úvod k popisu driverů (WDM). Popis modelu začíná tak, že jádro je plně preemptivní včetně ovladačů. Pak postupně vylézá z textů najevo, že driver dispatch rutina ja vždy volána s IRQL Dispatch. Dále je uvedeno, že IRQL != Passive znamená zakázanou preempci. Takže když si to člověk dá dohromady, tak relativně velmi komplikované rutiny zpracovávající IRP pakety jsou volány s blokovanou preempcí. Proč to jasně nepřiznají při počátečním přehledu modelu driveru. Alespoň by programátor byl důrazně upozorněn, že má vždy požadavek co nejdříve vložit do lokální fronty a aktivovat worker thread. Takto mnoho driverů napsaných bez dostatečného rozmyslu často zbytečně blokuje responzivitu systému.
Jinak driver model Windows NT založený na IRP paketech a jeho extrémě dlouhou binární stabilitu a nadled při jeho návrhu někdy v roce 1990 nebo 91 obdivuji. On je naštěstí od architekta, který nevyrostl u MS ale u VMS. Bohužel ho dobastlování PnP a dalších věcí spíš s časem kazí. Interní, pořádně nedokumentovaná, pro různé podsystémy povinná, IOCTL jsou pak vysloveně katastrofa, zlaté funkce s kontrolou typů parametrů v Linuxu. Určitě by si ale WDM model a jeho koncepčnost mělo prostudovat více vývojářů Linuxového jádra pro rozšíření obzorů. Na druhou stranu model je tak rigidní, že neumožňuje optimalizaci a další vývoj jeho vývoj téměř nemožný a Linus má pravdu, že elegatní abstrakce na čistě teoretické úrovni vede téměř vždy k výraznému overheadu, který se již většinou nedá obejít. Viz třeba i téměř všechna mikrojádra.
Zmíňku o výše uváděném chování handlů jsem tam ale nikde nenašel. Opravdu si myslím, že jsem to měl svého času prostudované docela dobře a díky znalosti Linuxu a dalších OS to šlo i z těch často nepřehledných PR friendly dokumentací pochopit.
Aspon to neidealizuj - MSDN nie je v ziadom pripade spasonostne. Jedine, co je tam ako-tak napomocne su rozne articles na casto kladene otazky. Zo srandy som si tam prave hladal systray, vysledok je nasledovny:
1. Windows 98 Hangs with Systray.exe Loading
2. SAMPLE: SysTray.exe ActiveX Control Adds Icons to Status Area
3. System Tray Icons - Minimize Your Application to the SysTray - The ...
atd. zaujimave na tom je, ze ten 3ti vysledok je link na www.codeproject.com ;) Ak nechcem ActiveX control (a povedz mi ktory zacinajuci programator ma vobec sajnu o COM/ActiveX) tak som s cistym MSDN (napr. pri instalacii skoncil. Ale dajme tomu ze vyhrabem 10ty odkaz, ktory ukazuje na Shell_NotifyIcon, tak si ako zacinajuci programator skocim do uzasnej MSDN na stranku funkcie. A teraz moje otazky ked som zacinal:
1. Co do pekla je DWORD? 2x int? 2x long?
2. Ako sa dostanem na zoznam chybovych kodov ku GetLastError () ?
3. NOTIFYICONDATA - co to je? Ved ja chcem len hodit ikonku do trayu. Co je Hwnd? Ako su organizovane eventy? Ako vytvorim z bitmapy hIcon?
4. Preco tam nie je nejaky priklad?
Takze zhrnute a podciarknute, bez googlu sa nepohnes ani vo Win32 - chcem vidiet toho zaciatocnika s Win32, ktory IBA s pomocou MSDN nakodi TrayIcon aplikaciu.
Cim dalej si od "zaujimavych" tem, tym je to horsie - ak mas zaujem sa predviest, tak ti dam dve temy:
1. Naprogramuj mi iba s pomocou MSDN Pull vstupny filter pre zachytavanie obrazovky pre DirectShow.
2. Naprogramuj mi iba s pomocou MSDN aplikaciu pre Windows CE, ktora mi zazalohuje a obnovi SMS spravy cez MAPI (Mail API - existuje uz minimalne 8 rokov).
Neni. No a? Kdyz si (zdarma) stahnete Platform SDK a s MSDN dostanete dost informaci, k tomu abyste udelal co potrebujete. Shrnuto a podtrhnuto, MSDN a Platform SDK Vam bude stacit a googlit nemusite ( a kdyz tak hlavne kvuli prikladum), popisy funkci na MSDN najdete. MSDN je proste reference, Platform SDK hlavne priklady. Mozna jsem to mel zminit, nenapadlo me, ze me budete brat tak doslova.
No, ty dva priklady... Nezabyvam se ani jednim, takze slouzit nemuzu.Ale s pomoci Platform SDK by to urcite nemel byt problem (a verim, ze reference k funkcim, ktere byste pouzil na MSDN najdete).
Ale je hezke (nebo zvlastni), ze jste vybral zrovna takoveto priklady. Dost specificke. Ale ja se Vas zeptam obracene. Jak je udelate na Linuxu? Kde sezenete api k ekvivalentu DirectoShow? Aha, nic takoveho linux nema. A kde standardni API k pristupu k poste? Aha, to taky ne... Hmm, Windowsy to maji maji mozna tezkopadne udelane, Linux to nema vubec. Takze Windowsy jsou shit. Hezky myslenkovy pochod.
Nech sa paci - stiahnite si SDK (nehovoriac o tom, ze to je dalsia komplikacia tahat navyse - kolkoze to ma? snad uz aj 1GB dat kvoli blbemu TrayIcon a na nete o tom nie je ani zmienka). Ano, vy a ja vieme o existencii Platform SDK, ale preco ta zmienka o prikladoch nie je aj v internetovom MSDN?
Ad Platform SDK: Mozno vam to pomoze s jednoduchymi vecami, ale kludne si mozte stiahnut Platform SDK na DirectShow a garantujem vam, ze sa z toho nevyznate - respektive to ani nezbuildujete. Okrem toho potrebujete platform SDK na COM/COM+, ATL atd.
Mozno lepsim prikladom je SharePoint - tak tazko vychvalovane portalove riesenie. Skuste mi v MSDN najst, ako mam korektne autentifikovat a zistit username/rolu prihlaseneho pouzivatela na nejakej portalovej stranke.
Ad MAPI SDK: Nie je. Jednoducho nie je. Aj ked sa postavite na hlavu, nie je to tam a ze som to preliezol komplet. Pritom MAPI na CE zariadeniach je orezane MAPI z Windows, ale polovica pouzivanych flagov a metod jednoducho popisana nie je.
Ad Linux: Nereagoval som stylom, aha, my v Linuxe to mame, vy vo Windowse nie, sam som komercny programator pre Windows platformu. Reagoval som na FUD, ze aj tie najprimitivnejsie developerske ulohy v Linuxe su ohromne tazke. Nie su, ak mate potrebne znalosti - rovnako ako aj vo Windowse. Nemozte cakat, ze si sadnete k pocitacu s dost odlisnou filozofiou a na prvy sup budete vediet spravit aplikaciu, pretoze to sa vam nepodari ani vo Windowse. A ani najlepsie SDK vam nepomoze tak, ako dobre clanky a tutorialy.
Keby som ozaj chcel robit nieco take, siahnem v pripade DS pravdepodobne po Jack/Video for Linux/ffmpeg, v pripade MAPI by som zacal so sendmail/Evolutionu/KMail - zalezi od konkretnych uloh.
Krasnym prikladom je filozofia GUI - zatial co Win32 je spravovo orientovane (ProcMsg atd.), vacsina toolkitov v Linuxe je udalostne orientovane. Ja som zacinal na udalostne orientovanych GUI (Borland) a dalo mi sakra prace do detailov pochopit spravovo-orientovane GUI vo Windows. Znamena to, ze Win system je zly? Neznamena, nemal som iba dostatok skusenosti.
Dal jsem hledat "how send mail" a 6ty odkaz se jmenuje "Send mail sample" a obsahuje ke stazeni cely projekt ve visual studiu, ktery mi to vysvetli vcetne navodu, co si mam na stanici krok po kroku zapnout v IIS tak, abych to mohl zkusit naostro.
Obe ulohy chcem vo Win32 - MAPI napr. nema binding do C#, a nechcem poslat jednu spravu (to je relativne jednoduche), ale chcem vycitat postu z priecinka Dorucene a podpriecinkov a potom ju nasledne pridat spat do rovnakych priecinkov.
Chybi rekneme framework na urovni .NET. Ono programovani pro Windows, kdyz zacnete pekne v cistem c nebo C++, neni taky prochazka ruzovou zahradou.
Je z nich citit to co jste napsal. Ten zmineni autostart... kazde distro kdyz to uzna za vhodne to umi udelat samo, ale kdo vlastne autostart chce. Systray mne funguje na Gentoo v Kde, gnome, xfce, fluxboxu pro vsechny aplikace (skype,psi,bmp,azureus) i s notify area. Stejne tak vygenerujete menu i s ikonkama. A kdyz nevedi jak se to dela, tak at si najdou zdrojaky a podivaj se jak na to.
A dalsi vec - meli by zacit se chovaj jako komunita - rozjet issue tracker, wiki a mailing list. Vydavat brzy a vydavat casto. Dost lidi vam pomuze a zadarmo - treba s tema balickama (napr. ebuild pro skype existuje, atp).
A dalsi pristup na ktery jsem zapomel, ktery jsem pouzival a ktery zase zacal - IRC. Tam vam poradi vyvojari on-line.
.NET port na linuxe sa vola Mono a je to uz celkom stabilne a pouzitelne (sam s tym robim). Je pravda, ze Gtk# je popisane dost slabo, ale s kuskom trpezlivosti sa to da najst na strankach originalneho Gtk. Alebo mozes pouzit Javy/Ruby/Python/multiplatformove whatever.