Portál AbcLinuxu, 1. května 2025 11:31
git push
nebo to máš jenom u sebe?
k3dar@xubuntu1404:~$ dpkg -S bin/ddate util-linux: /usr/bin/ddate
$ dpkg -S bin/ddate dpkg-query: vzoru *bin/ddate* nevyhovuje žádná cesta $ dpkg -S bin/date coreutils: /bin/date $ uname -r 4.4.0-57-generic $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenialAni jsem to neznal – tak jsem se díval, co to je, a moc nevidím důvod, proč by to mělo být v util-linux.
Pokusil se to natlacit i sem: http://ucto.linux.cz/setkani/zapis.php (hledej MAPE)To vypada na projekt, ktery je skoro stejne uspesny jako mistni pokus naprogramovat CAD pro Linux.
Zrovna kvalitní CAD pro Linux by imho ocenil velký počet lidí+1 CAD je globálně použitelný, kdežto české účetnictví bude zajímat maximálně zlomek z cca. 10 milionů lidí.
stejně jako kvalitní alternativu k PhotoshopuMáme Gimp a Kritu.
Pixel bohužel chcíplJe to škoda, byl to hodně zajímavý projekt. Dneska už asi bude trochu zastaralý, ale stejně by ho možná šlo oprášit a pokračovat ve vývoji. Autor z toho chtěl asi vytřískat prachy a když mu nikdo neplatil, tak to radši nechal chcípnout. Dneska by mohl udělat crowdfunding a po dosažení částky vydat zdrojáky pod svobodnou licencí.
kvalitní kancelářský balík (Open/LibreOffice nepočítám)Možná je „kvalitní kancelářský“ oxymorón a správný přístup je z principu jiný – WYSIWYM editor a generování různých výstupních formátů místo kancelářského textového editoru; databáze, skripty, grafové a jiné nástroje místo tabulkového editoru… Ve své kategorii (která je možná z principu špatná) je LibreOffice celkem dobrý. Asi by stálo za to trochu učesat GUI.
Zrovna kvalitní CAD pro Linux by imho ocenil velký počet lidí,To urcite. Nicmene, abych pripomnel, mistni skupina pro vyvoj CADu skoncila u schuzovani a malovani obrazku bez jedineho radku kodu.
kolik neceho, na cem by se dal dalo stavet, vzniklo?Budu mluvit jen za sebe: zabýval jsem se návrhem modulární architektury. Je to samozřejmě jen malá část toho, co je potřeba udělat, ale myslím si, že ten návrh je dobrý a že je správné, aby taková úvaha/diskuse o architektuře proběhla, než začne někdo něco programovat. Architektura se dá později revidovat, není to nějaká posvátná kráva, ale přeci jen je dobré mít nějakou vizi, kam chceme směřovat (a v případě nutnosti ji změnit), než postupovat úplně chaoticky (což je zabiják projektu zvlášť při týmové spolupráci, protože každý může jít jiným směrem, i když každý bude mít svým způsobem pravdu).
Ty bys radši, kdyby se začal bez rozmyslu bušit kód?Presne tak. IMHO lepsi investovat cas do tvorby nejakeho prototypu - tam clovek pozna ty skutecne problemy a vyzvy (ne jak to udelat, aby byl program perfektne modularni). Refaktorovat za chodu tak, jak se to zrovna hodi pro aktualni stav projektu. Architektura se nejspis X-krat prepise, ale tak uz to chodi. Takove diskuse nad architekturou vedou typicky jen k bikesheddingu. Proste to udelej tak, jak je to momentalne nejjednodussi (vyprdni se na modularitu) a res problemy az prijdou. Misto krasneho designu na papiru mozna budes mit monoliticky skaredy program, ktery aspon neco dela. Myslim, ze to druhe je lepsi a ze se z toho i vic naucis o dane domene.
Jako jo, mít osobní radost z toho, že si někdo povídal o architektuře, je samozřejmě fajn, ale čekat, že to ostatní ocení je pitomost.Cílem nebylo, aby někdo ocenil „povídání o architektuře“, ale předejít některým chybám a ušetřit čas v budoucnu. Chyba, která se odhalí při analýze/návrhu, se opravuje nejlevněji, chyba, která se odhalí při vývoji, je dražší, chyba, která se odhalí při testování, je ještě dražší, a úplně nejdražší je chyba, která se odhalí až v produkci. Současně jsem tím sledoval osobní zájem – naučit se dělat modulární aplikace v C++ – čekal jsem, že v té diskusi někdo poradí, jak na to. Bohužel jsem se moc konkrétních řešení nedozvěděl – jen, že je to prý jednoduché. Přesto skutečně modulárních aplikací v C++ je málo – požadavky jsou v komentářích pod tím blogem – jde o to, aby se ta modularita promítla i na úrovni distribučních balíčků (.deb, .rpm…), aby šlo moduly dynamicky přidávat a odebírat (nemusí být nutně za chodu programu, ale musí to být možné tam, kde je program nainstalovaný), moduly musí jít kompilovat nezávisle na sobě, pro kompilaci modulu musí stačit minimum kódu (definice rozhraní – ne že kvůli tomu budu muset mít celý ten systém), musí jít kombinovat moduly zkompilované různými lidmi v různou dobu, moduly musí být možné je verzovat samostatně v nezávislých úložištích… a je k tomu potřeba nějaký šikovný nástroj pro sestavení (build), aby tohle všechno člověk nemusel řešit ručně hromadou kódu/konfigurace, ale stačilo k tomu pár metadat (říct, jaké má modul závislosti a co naopak poskytuje).
Chyba, která se odhalí při analýze/návrhu, se opravuje nejlevněji, chyba, která se odhalí při vývoji, je dražší, chyba, která se odhalí při testování, je ještě dražší, a úplně nejdražší je chyba, která se odhalí až v produkci.Az se mi tomu nechce verit. Vy jste snad na VSE museli mit i nejaky predmet "Obhajování věčných pravd realitě navzdory".
Cílem nebylo, aby někdo ocenil „povídání o architektuře“, ale předejít některým chybám a ušetřit čas v budoucnuKolika chybam jste takto predesli?
jde o to, aby se ta modularita promítla i na úrovni distribučních balíčků (.deb, .rpm…), aby šlo moduly dynamicky přidávat a odebírat (nemusí být nutně za chodu programu, ale musí to být možné tam, kde je program nainstalovaný), moduly musí jít kompilovat nezávisle na sobě, pro kompilaci modulu musí stačit minimum kódu (definice rozhraní – ne že kvůli tomu budu muset mít celý ten systém), musí jít kombinovat moduly zkompilované různými lidmi v různou dobu, moduly musí být možné je verzovat samostatně v nezávislých úložištích…A kolik modulu se takto podarilo jiz vytvorit? Mohl bych klidne sarkastictejsi, ale asi to nema cenu. Ve vasem pripade jste proste pro formu zabili obsah. Radsi jste si vykladali o forme nez, aby nekdo resil skutecny obsah, protoze to by znamenalo skutecnou praci. Ale na tom zaslo jiz hodne projektu, treba to vyse zmine ucetnictvi, takze neni nutne propadat do deprese.
Az se mi tomu nechce verit. Vy jste snad na VSE museli mit i nejaky predmet "Obhajování věčných pravd realitě navzdory".Na VŠE jsme se tohle sice učili, ale pak jsem si to hodně krát ověřil v praxi.
Kolika chybam jste takto predesli?U toho CADu to nejde říct, protože nedošlo na realizaci. U jiných projektů to ale byla spousta chyb, kterým se podařilo předejít. Oproti tomu si představ nějakého alibistického vývojáře, který to naprogramuje podle špatného zadání, aniž by o něm diskutoval (chtěl ho změnit) – on má sice „splněno“, ale výsledek nefunguje. Jestli si myslíš, že to, co píšu, platí jen v „enterprise“ světě, tak to není pravda – jinde to platí snad ještě víc. Když uděláš chyby v RFC nebo obecně specifikaci resp. otevřeném standardu, tak ostatní podle toho začnou psát servery, klienty, knihovny… a pak už to jen tak nezměníš, protože by spousta lidí musela přepsat svůj kód a ještě by se museli koordinovat, aby byli kompatibilní mezi sebou. Přitom by stačilo se jen trochu lépe zamyslet při tvorbě toho standardu. Totéž platí i pro různé interní formáty nebo konfiguraci – když chyby vychytáš ještě před vydáním stabilní/produkční verze, tak o nic nejde, prostě změníš formát a u sebe si soubory přepíšeš – ale když to prošvihneš a necháš tam chybu hnít déle, tak buď ji neopravíš vůbec (stane se z toho vlastnost), nebo budeš muset psát konverzní nástroj a/nebo návody pro uživatele, aby mohli upgradovat (nebo se na to vykašleš a za to ti fakt nepoděkují).
Ve vasem pripade jste proste pro formu zabili obsah.Že jsem si do svého blogu napsal pár slov o architektuře nikomu nebránilo, aby si nezávisle na tom psal prototyp. Vytvořit CAD je hodně velký projekt, který vyžaduje velké investice – buď do toho musí někdo vrazit hodně peněz nebo do toho nadšenci vloží svůj volný čas – tak jako tak je to velká investice – a opravdové zlo by bylo promrhat ji kvůli odfláknutému návrhu.
Tak ted uz tomu opravdu verim.Vy jste snad na VSE museli mit i nejaky predmet "Obhajování věčných pravd realitě navzdory".Na VŠE jsme se tohle sice učili
U toho CADu to nejde říct, protože nedošlo na realizaci. U jiných projektů to ale byla spousta chyb, kterým se podařilo předejít. Oproti tomu si představ nějakého alibistického vývojáře, který to naprogramuje podle špatného zadání, aniž by o něm diskutoval (chtěl ho změnit) – on má sice „splněno“, ale výsledek nefunguje.Tomuhle se snad nemuze smat uz ani pavlix.
Že jsem si do svého blogu napsal pár slov o architektuře nikomu nebránilo, aby si nezávisle na tom psal prototyp.V tom neni nic osobniho. On to byl skvele nastartovany projekt, mel nekolik blogovych zapisku s vasnivymi diskuzemi, webovou stranku s verzovacim systemem, promysleny navrh... akorat z toho byl jeden velky fail, protoze kazdy byl architekt, ale malokdo chtel byt ten mourenin, co bude kopat zaklady.
Když uděláš chyby v RFC nebo obecněTo je v teto diskuzi bezpredmetne, protoze RFC odpovida verejnemu rozhrani. Coz pochopitelne u nove vznikajiciho projektu nema cenu resit. Navic RFC je casto dlouho ve fazi Draft, dokud se na implementacich neoveri, ze je zivotaschopne a pripadne se RFC upravuje podle ziskanych zkusenosti.
Proste to udelej tak, jak je to momentalne nejjednodussi (vyprdni se na modularitu) a res problemy az prijdou. Misto krasneho designu na papiru mozna budes mit monoliticky skaredy program, ktery aspon neco dela.Tenhle přístup vede k tomu, že pořád přidáváš další a další kód… a pak se nad tím po nějaké době zamyslíš a dojde ti, že je to obludnost, která má zásadní chyby, ale už jsi do toho investoval tolik času, že je těžké to zahodit a začít znova nebo to přepsat. Pokud ten program v tu dobu má už nějaké uživatele, tak je přepis mnohem horší až nemožný, protože se musíš nějak vypořádat se zpětnou kompatibilitou. Oba extrémy jsou špatné – a) paralýza analýzou – každý asi slyšel o projektu (nebo ho v horším případě zažil), kde se dlouze analyzovalo a nakonec se nic nevytvořilo nebo to bylo nefunkční b) programování bez rozmyslu, kde autor je zahrabaný v kódu a chybí mu nadhled – až se jednoho dne vynoří a rozhlédne (typicky po nějakém vnějším impulzu) a zjistí, že se dopracoval k programu, který má zásadní návrhové/architektonické chyby a brání to jeho použitelnosti – čemuž se dalo předejít, kdyby trochu víc přemýšlel a méně psal. Proto máme iterativní vývoj, kde máš jednak nějakou dlouhodobou vizi (kterou průběžně aktualizuješ) a jednak plán aktuální iterace, kde si vytyčíš cíle a výstupy. Neříkám, že prototypování nemá smysl – má – tady by ten prototyp vypadal asi tak, že vezmeš nějakou CSG a zkusíš si kolem ní postavit nějaký program. To se několikrát zopakuje s různými knihovnami, pak se nějaká vybere nebo napíše vlastní a pak se to zahodí a začne se psát skutečný program. Úvaha nad návrhem a architekturou probíhá současně s tím. Vynechat jedno nebo druhé je chyba. Nebezpečí prototypů je v tom, že jeden ten kód píše jako prototyp (tzn. rychleji a méně pečlivě) a druhý to pak vezme, řekne si, že je to docela dobré (což tak zvenku a na první pohled může vypadat) a začne na tom stavět. Všichni by měli mít jasno v tom, co se dělá – jestli prototyp/PoC k zahození, nějaká jednorázová aplikace, která bude sloužit pár dní/týdnů/měsíců, nebo software, který tu bude pět deset nebo i více let a bude se rozvíjet. Pokud v tomhle dojde k „nedorozumění“ tak to způsobuje dost vážné problémy a hodně projektů kvůli tomu dopadlo špatně. Jedna z nejhorších vět, které si můžeš říct, je: „pak se to předělá, až bude čas“ – ten čas totiž nebude nikdy – to je smutná realita. Pokud bys náhodou měl možnost do toho ten čas investovat, tak tě to vyjde dost draho, protože předělávat kód po měsících nebo letech (nebo dokonce psaný někým, kdo už v týmu není) je daleko těžší než předělat kód, který jsi psal včera (nebo ho rovnou napsat pořádně). Když už na něčem šetřit, tak na tom, že něco neuděláš, nenapíšeš, ale ne na tom, že to tam sice je, ale je to odfláknuté – pak se na jedno špatné rozhodnutí nabalují další a další a vylepšit ten kámen, který je kdesi vespod už moc nejde.
Tenhle přístup vede k tomu, že pořád přidáváš další a další kód… a pak se nad tím po nějaké době zamyslíš a dojde ti, že je to obludnost, která má zásadní chyby, ale už jsi do toho investoval tolik času, že je těžké to zahodit a začít znova nebo to přepsat.Je potreba refaktorovat za chodu. Vytvaret abstrakce, jak jsou potreba, rusit je, kdyz uz jsou zbytecne. Pri programovani je potreba premyslet a ne jen busit kod.
Pokud ten program v tu dobu má už nějaké uživatele, tak je přepis mnohem horší až nemožný, protože se musíš nějak vypořádat se zpětnou kompatibilitou.Zpetna kompatibilita je tezke bremeno. Prvnich par let vyvoje takoveho CADu by to melo byt zakazane slovo.
Oba extrémy jsou špatné – a) paralýza analýzou – každý asi slyšel o projektu (nebo ho v horším případě zažil), kde se dlouze analyzovalo a nakonec se nic nevytvořilo nebo to bylo nefunkční b) programování bez rozmyslu, kde autor je zahrabaný v kódu a chybí mu nadhled – až se jednoho dne vynoří a rozhlédne (typicky po nějakém vnějším impulzu) a zjistí, že se dopracoval k programu, který má zásadní návrhové/architektonické chyby a brání to jeho použitelnosti – čemuž se dalo předejít, kdyby trochu víc přemýšlel a méně psal. Proto máme iterativní vývoj, kde máš jednak nějakou dlouhodobou vizi (kterou průběžně aktualizuješ) a jednak plán aktuální iterace, kde si vytyčíš cíle a výstupy.To urcite. Tvoje snaha mit projekt modularni od zacatku, a to ve smyslu doinstalovatelnych modulu je ale podle me velmi drahy luxus. Modularita na teto urovni je a) pomerne draha ficura b) nema s CADem jako takovym nic spolecneho. Svazet diskusi na takove periferni tema (v teto fazi projektu) je dost kontra produktivni.
Neříkám, že prototypování nemá smysl – má – tady by ten prototyp vypadal asi tak, že vezmeš nějakou CSG a zkusíš si kolem ní postavit nějaký program. To se několikrát zopakuje s různými knihovnami, pak se nějaká vybere nebo napíše vlastní a pak se to zahodí a začne se psát skutečný program. Úvaha nad návrhem a architekturou probíhá současně s tím. Vynechat jedno nebo druhé je chyba. Nebezpečí prototypů je v tom, že jeden ten kód píše jako prototyp (tzn. rychleji a méně pečlivě) a druhý to pak vezme, řekne si, že je to docela dobré (což tak zvenku a na první pohled může vypadat) a začne na tom stavět. Všichni by měli mít jasno v tom, co se dělá – jestli prototyp/PoC k zahození, nějaká jednorázová aplikace, která bude sloužit pár dní/týdnů/měsíců, nebo software, který tu bude pět deset nebo i více let a bude se rozvíjet. Pokud v tomhle dojde k „nedorozumění“ tak to způsobuje dost vážné problémy a hodně projektů kvůli tomu dopadlo špatně.Opet, je potreba pri programovani premyslet a refaktorovat. Stavet na prototypu realny produkt neni problem, pokud se toto pravidlo dodrzuje. Neni nutne cely prototyp zahodit. Prototyp loguje pres System.out? Pridej log4j. Prototyp neresi transakce? Pridej transaction manager a obal do transakcniho kontextu servisni vstvu. Ze servisni vrstva neexistuje? (i v prototypu by idealne mela) Refaktoruj ji z controlleru do servisni vrstvy.
Jedna z nejhorších vět, které si můžeš říct, je: „pak se to předělá, až bude čas“ – ten čas totiž nebude nikdy – to je smutná realita. Pokud bys náhodou měl možnost do toho ten čas investovat, tak tě to vyjde dost draho, protože předělávat kód po měsících nebo letech (nebo dokonce psaný někým, kdo už v týmu není) je daleko těžší než předělat kód, který jsi psal včera (nebo ho rovnou napsat pořádně). Když už na něčem šetřit, tak na tom, že něco neuděláš, nenapíšeš, ale ne na tom, že to tam sice je, ale je to odfláknuté – pak se na jedno špatné rozhodnutí nabalují další a další a vylepšit ten kámen, který je kdesi vespod už moc nejde.Mluvime tady o novem projektu - nebudes refaktorovat po letech, ale po hodinach, dnech, max po tydnech. Vyhodu mas v tom, ze v tom bode mas daleko lepsi prehled - vis, ktere abstrakce jsou potreba, vidis patterny v kodu. Nejsi slepy, jako kdyz se snazis predem vestit architekturu ze vzduchu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.