Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
Snad mě nebudete kamenovat za off-topic zápisek, který nesouvisí ani s politikou, ani s řízením automobilu, ani s amatérskou psychoterapií. Před časem jsem se tu v blogu nebo v poradně ptal, jestli někdo nemá k dispozici šablonu pro tvorbu PDF faktur a moc jsem nedopadl...
A tak jsem používal, co se dalo. Nejdřív jsem vytvářel faktury v OpenOffice Calc, což vypadalo celkem dobře, tedy až na naprostou absenci oddělení dat a vzhledu. Kvůli tomu jsem se zdržoval nesmysly jako je kopírování řádků, vyrovnávání výšek řádků, a napravování různých atributů písma, převáděním do PDF, prostě celkovým nepohodlím.
O nepořádku v adresářích, kde se nacházely jak zdrojové soubory, tak výsledná PDF, ani nemluvě.
Po roce a půl živnosti jsem, pochopitelně v lednu, několik dní patlal LaTeXovskou šablonu pro tvorbu PDF faktur. TeX/LaTeX se ukázal jako nepříliš vhodný, leč dosud nejvhodnější nástroj. Patlání s XSL:FO jsem vyhodnotil jako neúčelné a jinou smysluplnou alternativu jsem neobjevil. LaTeX tedy zůstal.
Aktuální šablona vypadá takto:
\documentclass[10pt]{article} \usepackage[utf8]{inputenc} \usepackage[czech]{babel} \usepackage{a4wide} \usepackage{tabularx} \renewcommand{\familydefault}{\sfdefault} \setlength{\extrarowheight}{3pt} \begin{document} \footnotesize \begin{center} \begin{tabularx}{\textwidth}{|XXXX|} \cline{3-4} \multicolumn{2}{X}{} & \multicolumn{2}{|X|}{} \\ \multicolumn{2}{X}{} & \multicolumn{2}{|l|}{\large Faktura: \hfill {{invoice.number}}} \\ \multicolumn{2}{X}{} & \multicolumn{2}{|X|}{} \\ \hline & & & \\ \bf Dodavatel: & & \bf Odběratel & \\[1em] \multicolumn{2}{|l}{\large\bf {{issuer.name}}} & \multicolumn{2}{l|}{\large\bf {{customer.name}}} \\ {{py: a1 = issuer.address[:] a2 = customer.address[:] a1 += (len(a2)-len(a1))*[""] a2 += (len(a1)-len(a2))*[""] }} {{for f1, f2 in zip(a1, a2)}} \multicolumn{2}{|l}{\large {{f1}}} & \multicolumn{2}{l|}{\large {{f2}}} \\ {{endfor}} & & & \\ \multicolumn{2}{|l}{IČ: {{issuer.number}}} & \multicolumn{2}{l|}{IČ: {{customer.number}}} \\ & & & \\ {{py: a1 = issuer.comments[:] a2 = customer.comments[:] a1 += (len(a2)-len(a1))*[""] a2 += (len(a1)-len(a2))*[""] }} {{for f1, f2 in zip(a1, a2)}} \multicolumn{2}{|l}{ {{f1}}} & \multicolumn{2}{l|}{ {{f2}}} \\ {{endfor}} & & & \\ \hline & & & \\ \bf Platební podmínky: & & & \\[1em] \large Forma úhrady: & \large {{"hotově" if invoice.payment=="cash" else "převodem"}} & \large Datum vystavení: & \multicolumn{1}{r|}{\large {{invoice.date.strftime("%d.%m.%Y")}}} \\ \large Číslo účtu: & \large {{issuer.bank_account}} & \multicolumn{2}{l|}{\large\bf Datum splatnosti: \hfill {{invoice.due.strftime("%d.%m.%Y")}}} \\ \large Variabilní symbol: & \large {{invoice.number}} & & \\ {{if invoice.notes}} & & & \\ \hline & & & \\ \bf Poznámky: & & & \\[1em] {{for note in invoice.notes}} \multicolumn{4}{|l|}{\large {{note}}} \\ {{endfor}} {{endif}} & & & \\ \hline & & & \\ \bf Fakturujeme vám: & & & \\[1em] {{for item in invoice.items}} \multicolumn{4}{|l|}{\normalsize {{item[0]}} \hfill {{item[1]}} Kč} \\ {{endfor}} & & & \\ \hline & & & \\ \large\bf Celkem k úhradě: & & & \multicolumn{1}{r|}{\large\bf {{invoice.sum}} Kč} \\ & & & \\ \hline \end{tabularx} \end{center} \end{document}Tahle část bude asi nejprasáčtější. TeX obecně nepoužívám z nadšení, ale protože jsem nic lepšího neobjevil.
Specifikace datových formátů byla od začátku jednoduchá. Co vložený záznam, to soubor. Soubory seskupené do adresářů podle typu. Formát textový. Vše se odvíjelo od toho, že jsem data připravoval ve vimu víceméně nezávisle na případné budoucí implementaci. První implementace obsahovala pouze skript na vyrobení PDF ze souboru faktury a souborů s invormacemi o mně a o zákazníkovi. Notace připomíná tu, co se používá například u HTTP nebo mailových hlaviček, ale to je spíše implementační detail.
Příklad dnes vydané faktury s číslem 2012003 (interně faktura č. 3) pro firmu xyz o dvou položkách s třicetidenní splatností:
Item: 10000: Práce všeho druhu I Item: 15000: Práce všeho druhu II Due: +30
Část informací se skrývá v názvu souboru: 20120113-003-xyz
, detaily o firmě XYZ jsou v samostatném souboru podobnémo formátu. Jednoduché, že?
Jako první „nevinné“ vychytávky byly příkazy pro rychlé vytvoření nové faktury a otevření ve vimu, reeditace poslední faktury, přegenerování PDF a nakonec i zobrazení PDF. Celé to bylo ve formě shellovských skriptů v adresáři jinak určeném pro data. Pilířem zpracování byly krátké skriptí v awk a sedu volané ze zmíněných shellovských skriptů. Podobně by posloužily i základní konstrukce Perlu.
V podstatě jsem byl až na pár detailů spokojený. Vadilo mi snad akorát, že se jedná o skripty naplácané mezi data, a že bych se styděl jejich obsah zveřejnit. A taky, že každé rozšíření stávajícího toolsetu mě stálo docela dost práce. Chtělo to jeden konzolový prográmek s podpříkazy který by vše obstarával, ale k tomu jsem se odhodlal až po dalších dvou letech vylepšování stávajícího systému. Samozřejmě bylo možné zůstat u shellovských skriptů, jen v nich udělat trochu pořádek, ale cílovým jazykem se nakonec stal Python 3.2.
Tak abychom začli. Zadáním (mým osobním) bylo vytvořit Pythoní CLI prográmek s velice jednoduchými podpříkazy. Požadavkem číslo jedna byla 100% zpětná kompatibilita s použitým datovým formátem, se kterým jsem spokojený, tedy přímočará náhrada stávajících skriptů. Dále takové přirozené věci jako přísnější kontroly, o co si uživatel řekne, pohodlnější workflow, a tak podobně.
Výsledek je jakž takž uhlazený, ale doporučoval bych ho spíše lidem, kteří se nebojí sáhnout do (cizího) Pythoního kódu.
Keců bylo dost...
git clone git://git.pavlix.net/invoice
Něco málo k použití se najde v README, zbytek ve zdrojácích. Celý program je postavený tak, aby splnil svůj účel zapadl do stávajícího workflow. Nápady? Připomínky? Patche? Pull requesty?
Tiskni
Sdílej:
$logo ----------------------------------------------- Faktúra: $invoice | Dátum: $date ----------------------------------------------- Dodávateľ: $supplier | Odberateľ: $purchaser ----------------------------------------------- Forma úhrady: $payment ----------------------------------------------- atď.Program všetko vytlačil ako si to spravil v texťáku, len nahradil názvy premenných ich obsahom. V Latexe sa nevyznám a Python kód môžem odskúšať až tak doma, ale pochopil som, že to aj samo čísluje faktúry, to by sa dalo potom použiť aj pre knihu vydaných faktúr. Nad niečim podobným som uvažoval, ale robil by som to cez prehliadač, aby sa dala napríklad vytlačiť faktúra aj u zákazníka priamo. To len na inšpiráciu :) Inak kto by potreboval účtovníctvo na pár faktúr Flexibee má zdarma verziu, z hlavy si už nepamätám na koľko účtovných operácií.
V Latexe sa nevyznám a Python kód môžem odskúšať až tak doma, ale pochopil som, že to aj samo čísluje faktúry, to by sa dalo potom použiť aj pre knihu vydaných faktúr.V těch shellovských skriptech jsem měl skript na vyrobení texťáku s přehledem za daný rok, podle čehož vím mimojiné kdo zaplatil a taky se dá z toho opisovat do daňového přiznání a přehledů pro pojišťovny. Do toho Pythonu to budu muset ještě něco dodělat.
Nad niečim podobným som uvažoval, ale robil by som to cez prehliadač, aby sa dala napríklad vytlačiť faktúra aj u zákazníka priamo. To len na inšpiráciu :)Mno je to postavené jako knihovna a je to non-copyleft opensource, takže by nad tím mělo jít postavit i webové UI.
Inak kto by potreboval účtovníctvo na pár faktúr Flexibee má zdarma verziu, z hlavy si už nepamätám na koľko účtovných operácií.Jojo, vím o tom, ale tenhle CLI přístup mi vyhovuje víc.
Kdysi jsem uvažoval o tom, že bych pro FlexiBee napsal aspoň základního cmdline klienta (přes REST API), ale v pracovní době mi to asi Ferš nedovolí a ve volným čase mám lepší věci na práciInak kto by potreboval účtovníctvo na pár faktúr Flexibee má zdarma verziu, z hlavy si už nepamätám na koľko účtovných operácií.Jojo, vím o tom, ale tenhle CLI přístup mi vyhovuje víc.
můžeš ukázat jak vypadá výstup jak z toho původního latexu a i z pythonu?Výstup se neměnil... LaTeXovská šablona se měnila jenom z technické stránky, výstup používám stejný.
Plánuješ to nějak postupně rozšiřovat? nebo vyhovuje, že je jen takové "malé udělátko"?Tak jak to je, mi to vyhovuje až na několik TODO položek, ale TODO zatím obsahuje jenom textový přehled a přidání příkazu na označení data zaplacení (obojí věci, které předchozí systém napsaný v shellu měl). Nebráním se rozšiřování, pokud na to někdo má čas, patche, které jsou na první pohled užitečné a nerozbíjí stávající funkcionalitu rád začlením do svého stromu a budu udržovat, ale neměly by to být věci pro mě vyloženě zbytečné. Třeba v případě patchů přidávajících podporu DPH bych asi dal přednost tomu, kdyby autor patche převzal správu nad hlavním stromem, nebo alespoň úzce spolupracoval kvůli testování. V tuhle chvíli všechno, co software obsahuje, jsem už někdy použil a pravděpodobně znovu použiju.
Respektive zajímal by mě názor celé komunity okolo ABC a čtenářů, jaký mají názor na tyhle malé aplikace, které si člověk píše pro svojí potřebu.Pokud by existovala srovnatelná open source aplikace, určitě bych dal přednost použití té a zasílání bugreportů a patchů jim. Pokud by existovala srovnatelná closed source aplikace za rozumnou cenu, ideálně s RPM balíčkem a repozitářem s updaty, která by plně vyhovovala, nejspíš bych jí dal z ekonomických důvodů taky přednost.
Případně názor zda je lepší jít do plnohodnotného software / dělat si software na zakázku a postupně zlepšovat?Pokud by „plnohodnotný“ software nabízel to, co potřebuju, využil bych ho :). Obecně.
zakázáno posílat papírové faktury kvůli ochraně životního prostředíZ tohoto důvodu bych zakázat tvorbu nových zákonů a směrnic. (ještě teď mám doma štos ÚZ, které jsou ale neaktuální a na nic)
... Dodnes vytvářím faktury v php a připojuji je pak v e-mailu ve formátu HTML ..Tak s HTML fakturama mám dost špatnou zkušenost, hlavně s jejich tiskem. Často vypadají jinak i rozhozeně podle toho v jakém prohlížeči se otevřou, jak jsou nastaveny výchozí fonty, jaké je aktuální DPI obrazovky apod.
nemám chuť poslat do prdele. Stává se to výjimečněTeď jsem si naběhl s nejednoznačností :). Samozřejmě se výjimečně stává ten špatný případ.
Tvoje šablona mi skutečně připadá jako následovnice faktur z Calcu (nejen vzhledem, ale i tou jednou velkou tabulkou ;c)).Podle čeho myslíš, že jsem ji modeloval? :) Mně zabralo nejmíň dva dny vrtání se v tom LaTeXu, natož abych ještě vymýšlel nějaký neotřelý tvar faktury :).
A také neřeší přechody na další stránku (ale pokud nemáš takové objemy položek k fakturaci, tak je to celkem pochopitelné;Mívám jednu položku. Maximálně dvě :). Kecám, nedávno jsem vydal fakturu o třech položkách. Taky mi tam chybí cena za kus, počet kusů, atd, protože v 99% položek je počet kusů 1 a když výjimečně ne, tak to píšu přímo do textu.
já se to raději snažím vyřešit předem, abych předešel potenciálním problémům, když už budu fakturovat automatizovaně).Jo, to se mě momentálně netýká, navíc jsem vždycky doufal, že se toho LaTeXu časem zbavím a budu to generovat něčím příjemnějším.
správná čeština je samozřejmostNo, to u LaTeXu je správná čeština jen na pohled. Při označování v PDF prohlížeči se prozradí, že je to nějak strašně spatláno či co.
Pokud chci pokročilejší PDF funkce nebo formátování, upravím HTML tak, aby obsahovalo speciální tagy (třeba pagebreak) a případně předám další parametry (autor PDF atd...).To zní pěkně, akorát by se mi to líbilo ve formě knihovny nebo příkazu, bez HTTP mezivrstvy. Každopádně nějaký html2pdf skriptík budu potřebovat taky, zase kvůli webu, ale zatím mi to nefungovalo (špatné kódování znaků).
\usepackage[T1]{fontenc}
\usepackage{lmodern}
Minimálně v Evince se potom dá text normálně vykopírovat, jinde jsem to nezkoušel.
LaTeX to umí vysázet dobře, když se mu o to řekne.správná čeština je samozřejmostNo, to u LaTeXu je správná čeština jen na pohled. Při označování v PDF prohlížeči se prozradí, že je to nějak strašně spatláno či co.
Každopádně nějaký html2pdf skriptík budu potřebovat taky, zase kvůli webu, ale zatím mi to nefungovalo (špatné kódování znaků).To je přesně to, co jsem měl na mysli s tím, že čeština je v pořádku. Zatím všechny html2pdf konvertory mi zmršily češtinu nebo to byl neskutečný boj a výsledek nebyl úplně ideální.
Při označování v PDF prohlížeči se prozradí, že je to nějak strašně spatláno či co.Copy paste z ukázkového PDF: Měsíční přehled transitních přenosů pro zákazníka
To zní pěkně, akorát by se mi to líbilo ve formě knihovny nebo příkazu, bez HTTP mezivrstvy.Tak je to PHP knihovna, není problém si jí přímo použít nebo volat přes CLI. Ale mně se ta možnost přes HTTP poměrně líbí, takže to mám takto. Přikládám ukázku, trochu jsem to vykuchal a druhou tabulku uměle nafoukl, ať je vidět, jak to automaticky zopakuje záhlaví tabulky. A není tam záhlaví a zápatí stránky, ale to se jednoduše dělá jako další dva kusy HTML. A dobře funguje i to "Stran 3", kdy to spočítá strany ve výsledném PDF a i v zápatí je pak možné mít strana 1/3.
Zkoušel jsi napsat makro v Calcu? Lze to programovat v StarBasicu, JavaScriptu, Pythonu, Javě nebo C++. Mít šablonu a data sosat z jiného souboru, nebo lépe přímo z SQL databáze a generovat vyplněná PDFka. OOo by se měla zvládnout nakonektit na SQL databázi (StarBasic), případně v Javě použiješ JDBC.Neměl jsem k tomu důvod, jak už jsem psal v blogpostu, Calc nevyhovoval.
..pak by to mělo jít makrem vyřešit. Speciálně "absenci oddělení dat a vzhledu" snadno.Jako za tenhle tip samozřejmě děkuju, i když ho v tomhle případě nevyužiju a ty makra nebudu psát asi nikdy. Ale možná to použiju, až budu zase s někým dělat analýzu a makra nechám na někom, kdo to už umí.
U ostatního, bez znalosti bližších detailů, pracnost lze těžko určit.Jednou z mých podmínek bylo, aby to bylo alespoň stejně pohodlné jako můj systém (a, ale to jsem předtím nepsal. Samozřejmě subjektivně. V tuhle chvíli mi faktura zabere několik málo vteřin, když nepočítám vymyšlení popisu toho, co se tak děje. To znamená, že v těch lepších případech mám hotovo dřív, než se „Office“ aplikace vůbec spustí. Až napíšeš makro, které dokáže všechny moje důvody proti Office eliminovat, koupím ho od tebe :).
Jednou z mých podmínek bylo, aby to bylo alespoň stejně pohodlné jako můj systém (a, ale to jsem předtím nepsal. Samozřejmě subjektivně.Zmizel mi kus textu a ztratilo to původní význam, tedy opravuju: Jednou z mých podmínek bylo, aby to bylo alespoň stejně pohodlné jako můj systém (a, ale to jsem předtím nepsal, stejně pohodlné jako to, v co se může můj systém během roku vyvinout. Samozřejmě subjektivně.