Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.
Americký výrobce čipů Nvidia získal od vlády prezidenta Donalda Trumpa souhlas s prodejem svých pokročilých počítačových čipů používaných k vývoji umělé inteligence (AI) H20 do Číny. Prodej těchto čipů speciálně upravených pro čínský trh by tak mohl být brzy obnoven, uvedla firma na svém blogu. Americká vláda zakázala prodej v dubnu, v době eskalace obchodního sporu mezi oběma zeměmi. Tehdy to zdůvodnila obavami, že by čipy mohla využívat čínská armáda.
3D software Blender byl vydán ve verzi 4.5 s prodlouženou podporou. Podrobnosti v poznámkách k vydání. Videopředstavení na YouTube.
Open source webový aplikační framework Django slaví 20. narozeniny.
V Brestu dnes začala konference vývojářů a uživatelů linuxové distribuce Debian DebConf25. Na programu je řada zajímavých přednášek. Sledovat je lze online.
Před 30 lety, tj. 14. července 1995, se začala používat přípona .mp3 pro soubory s hudbou komprimovanou pomocí MPEG-2 Audio Layer 3.
Výroba 8bitových domácích počítačů Commodore 64 byla ukončena v dubnu 1994. Po více než 30 letech byl představen nový oficiální Commodore 64 Ultimate (YouTube). S deskou postavenou na FPGA. Ve 3 edicích v ceně od 299 dolarů a plánovaným dodáním v říjnu a listopadu letošního roku.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.
Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.
McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.
#!/usr/bin/python import gtk, sys, os, glob, re f = ['*'] cd = os.path.realpath(os.curdir) + '/' def delprefix(x): if x.startswith(cd): return x[len(cd):] return x def select_files(*args): global f, files selector = gtk.FileSelection('Select files') selector.set_select_multiple(True) selector.run() f = [delprefix(x) for x in selector.get_selections()] print f selector.destroy() files.set_text(' '.join(f)) def slabel(text, table, row, widget): label = gtk.Label() label.set_text_with_mnemonic(text) label.set_alignment(0, 0.5) label.set_mnemonic_widget(widget) table.attach(label, 0, 1, row, row+1) dialog = gtk.Dialog('Search & Replace', None, 0, (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) dialog.set_border_width(8) table = gtk.Table(6, 3, False) table.set_row_spacings(4) table.set_col_spacings(4) dialog.vbox.pack_start(table) dialog.vbox.set_spacing(4) search = gtk.Entry() slabel('_Search for', table, 0, search) table.attach(search, 1, 2, 0, 1) replace = gtk.Entry() slabel('_Replace with', table, 1, replace) table.attach(replace, 1, 2, 1, 2) files = gtk.Entry() slabel('In _files', table, 2, files) files.set_text(' '.join(f)) table.attach(files, 1, 2, 2, 3) browse = gtk.Button('_Browse...') table.attach(browse, 2, 3, 2, 3) browse.connect('clicked', select_files) recursive = gtk.CheckButton('Recurse into sub_directories') table.attach(recursive, 0, 2, 3, 4) globally = gtk.CheckButton('Replace _all occurences') table.attach(globally, 0, 2, 4, 5) ignorecase = gtk.CheckButton('_Ignore case') table.attach(ignorecase, 0, 2, 5, 6) table.show_all() response = dialog.run() f = files.get_text().split(' ') f = reduce(lambda x, y: x+y, [glob.glob(x) for x in f]) search = search.get_text().replace('/', '\\/') replace = replace.get_text().replace('/', '\\/') if (response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT or not f or not search): sys.exit(0) recursive = recursive.get_active() ignorecase = ('', 'i')[ignorecase.get_active()] globally = ('', 'g')[globally.get_active()] dialog.destroy() ff = [] for x in f: if os.path.isdir(x): if recursive: p = os.popen('find ' + re.sub(r'([$`"\\])', r'\\\1', x) + ' -type f', 'r') ff.extend([z.strip() for z in p.readlines()]) p.close() else: ff.append(x) ff = dict([(x, 1) for x in ff]).keys() exp = 's/%s/%s/%s%s' % (search, replace, globally, ignorecase) if ff: os.execv('/bin/sed', ['sed', '-i', '-e', exp, '--'] + ff)
Tiskni
Sdílej: