Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
Nightingale je open-source karaoke aplikace, která z jakékoliv písničky lokálního alba (včetně videí) dokáže oddělit vokály, získat text a vše přehrát se synchronizací na úrovni jednotlivých slov a hodnocením intonace. Pro separaci vokálů využívá UVR Karaoke model s Demucs od Mety, texty písní stahuje z lrclib.net (LRCLIB), případně extrahuje pomocí whisperX, který rovněž využívá k načasování slov. V případě audiosouborů aplikace na
… více »Po půl roce vývoje od vydání verze 49 bylo vydáno GNOME 50 s kódovým názvem Tokyo (Mastodon). Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.
Když se tady tak rojí zápisky o Pythonu a C++, musím přispěchat se svou troškou do mlýna - totiž s postem, který je o obojím.
Občas zde prudím se svojí Žirafou, což je indexátor souborového systému, prostě parodie na locate. Používám ji převážně jako "media library" k XMMS.
Taková grafická aplikace, to je soft-realtime záležitost. Na čase odpovědi totiž záleží, pokud se to zasekne, uživatel (tedy já) sice počká, ale je naštvaný. Žirafa navíc zobrazuje výsledky vyhledávání hned během psaní dotazu - takže na výkonu záleží, protože mezi dvěma stisky kláves je tak desetina sekundy.
Žirafa je celá v Pythonu (+GTK). Ze snahy napsat rychlou aplikaci v "pomalém" Pythonu jsem získal některá ponaučení, o která se teď hodlám podělit.
Что такое Python? Python je především, moji milí čtenáři, skriptovací jazyk. Co to vlastně znamená? Přiznám se, že osobně tento termín nemám rád, raději bych řekl, že je to dynamicky typovaný objektově orientovaný jazyk velmi vysoké úrovně.
Skriptovací jazyk je typicky prostředek pro rozšíření funkčnosti nějaké aplikace. Počítá se s tím, že s ním pracuje přímo koncový uživatel oné aplikace, nikoli pouze původní vývojář. Uživatel si naprogramuje novou funkci tak, že manipuluje s objekty té aplikace. Samotná aplikace je obvykle napsána v nějakém jiném jazyce (třeba C++) a některé objekty prostě zpřístupní ke skriptování (tím definuje API).
Jenže Python není nějaký Visual Basic zašitý do Excelu, je to univerzální samostatný jazyk. Chyba lávky. Když programujete v Pythonu tak v podstatě neděláte nic jiného, než že přistupujete k objektům, které jsou implementované v C. Vy prostě skriptujete prostředí, které se sestává ze seznamů, slovníků, stringů, integerů - a žádný z těchto objektů není napsaný v Pythonu.
Srovnejte nyní, moji milí hackeři, s Javou, od které si odmyslíte just-in-time kompilaci (java -Xint). Program v takovéto Javě se skládá z bajtkódu, jehož instrukce se interpretují. Python má taky svůj bajtkód, který interpretuje. Zásadní rozdíl je v tom, že celá standardní knihovna Javy je napsaná v Javě samotné.
Co z toho plyne pro chudáka programátora, který se snaží napsat rychlou aplikaci? Když si napíše nějaký svůj kontejner (třeba variaci na ArrayList), tak má šanci být rychlejší než knihovní implementace (protože si to napsal optimalizovaně pro své konkrétní potřeby). Když se ale o stejnou věc pokusí Pythonista, s velkou pravděpodobností pohoří, protože interpretovanou implementací nemůže konkurovat nativnímu kódu vylezlému z GCC.
Ústřední zásada pro tvorbu rychlých aplikací v Pythonu zní: drž se standardní knihovny. Standardní knihovna bývají dobře optimalizované (platí pro všechny jazyky), v Pythonu je to zvýrazněné tím, že její výkonově kritická část je v C.
V Žirafě jsem potřeboval následující věc: mám dva seznamy integerů (idčka dokumentů) a potřebuji vytvořit jejich množinové sjednocení. Nejrychlejší způsob, jak tohle udělat v Pythonu je takovýto:
def union(a,b):
return list(set(a).union(set(b)))
a to přesto, že oba vstupní seznamy jsou seřazené a stačil by tedy jednoprůchodový algoritmus. Když si takovýto (myslím že optimální) algoritmus napíšete v Pythonu, bude to mnohem pomalejší, než řešení, které oba listy nejprve zkonvertuje na množiny a pak z toho zase vytvoří seznam. (Zmíněný jednoprůchodový algoritmus taky dojede na to, že seznam, do kterého akumulujeme výsledek, se během výpočtu bude muset mnohokrát realokovat.)
V situaci, kdy optimální algoritmus je pomalý, je potřeba vyrobit kýženou implementaci v C nebo něčem podobném. Jak se to dělá v Céčku se můžete dočíst například zde. Není to moc hezké, je potřeba spousta balastoidního kódu starajícího se o vnitřnosti Pythonu. Posléze jsem objevil boost_python, což hromada C++ šablonové magie, která udělá většinu práce za vás.
Kus zdrojáku vydá za tisíc slov; zde je implementace třídy World:
#include <boost/python.hpp>
using namespace boost::python;
struct World
{
std::string msg;
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
int my_sum(list lst) //sums all integers in the list
{
int result = 0;
for(int i = 0; i < len(lst); i++)
{
int val = extract<int>(lst[i]);
result += val;
}
return result;
};
};
BOOST_PYTHON_MODULE(world)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
.def("my_sum", &World::my_sum)
;
};
Přeloží se to nějak takhle:
g++ world.cpp -I/usr/include/python2.5 -shared -o world.so -lboost_python
a používá následovně:
>>> import world
>>> w = world.World()
>>> w.set("hi!")
>>> w.greet()
'hi!'
>>> w.my_sum([1,2,100])
103
>>>
Python je skvělý jazyk a líbí se mi čím dál víc. Je ale dobré vědět, jaké jsou jeho vlastnsti a možnosti. Když už jste donuceni udělat rozšíření v kompilovaném jezyce, použijte šikovnou knihovnu.
Tiskni
Sdílej:
Posléze jsem objevil boost_python, což hromada C++ šablonové magie, která udělá většinu práce za vás.Pamatuju si, že jsem si před 5 lety hrál s boost_python pod MSVC a můj relativně jednoduchý program o dvou .cpp souborech to kompilovalo 10 minut
paskma@paskma:boost$ time g++ world.cpp -I/usr/include/python2.5 -shared -o world.so -lboost_python real 0m3.387s user 0m2.656s sys 0m0.140sGenuine Intel(R) CPU T2300 @ 1.66GHz
>>> import util >>> util.union(range(1, 10, 2), range(2, 10, 2)) [1, 2, 3, 4, 5, 6, 7, 8, 9]