Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Byla vydána verze 5.30 dnes již open source operačního systému RISC OS (Wikipedie).
V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …
Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.
Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.
Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.
Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.
Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.
Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.
Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.
break defer goto range var case else if return chan fallthrough import select const for interface struct continue func map switch default go package typeZde již samotný program:
TIOCGWINSZ = 0x5413 def get_size buf = [0, 0, 0, 0].pack("S4") if STDOUT.ioctl(TIOCGWINSZ, buf) >= 0 row, col, x, y = buf.unpack("S4") else row = 20 col = 70 end [row, col] end words = [] maxlen = 1 row, col = get_size ARGF.each do |line| if line !~ /^\s+$/ line.strip! if (s = line.size) > maxlen maxlen = s end words << line end end words.sort! maxlen += 1 #mezera col = col / maxlen row = (words.size + col) / col fmt = "%%-%ds" % maxlen (col*row).times do |i| target = (i % col) * row + (i / col) #svisle razeni str = sprintf(fmt, (target < words.size) ? words[target] : "") print str puts if (i + 1) % col == 0 endNásleduje několik poznámek.
a = [1,2,3,4,5,6,7,8,9,10] b = a.pack('i10') # b je proud deseti 4 bajtových cisel c = b.unpack('i*') c == b # vraci trueRůzné způsoby vytvoření pole
a = [3, 2, 1] b = [] # nové, prázdné pole empty = Array.new # nové, prázdné pole nils = Array.new(3) # nils je [nil, nil, nil] zeros = Array.new(4, 0) # zeros je [0, 0, 0, 0] count = Array.new(3) {|i| i+1 } # count je [1, 2, 3] [[1,2],[3,4],[5]] # pole poli [1, 2, 3].length # 3 [].size # 0, synonymum pro lengthZměna prvků v poli
a = [1, 2, 3] a[0] = 0 # [0, 2, 3] a[-1] = 4 # [0, 2, 4] a[3] = 6 # [0, 2, 4, 6] a[5] = 8 # [0, 2, 4, 6, nil, 8] a << 10 # [0, 2, 4, 6, nil, 8, 10] a << 12 << 14 # [0, 2, 4, 6, nil, 8, 10, 12, 14] a = [1, 2, 3] # [1, 2, 3] a + a # [1, 2, 3, 1, 2, 3] a.concat([4, 5]) # [1, 2, 3, 4, 5] a se meni, zadny vykricnik a = ['a', 'b', 'c'] a.insert(1, 1, 2) # a je ['a',1,2,'b','c']Odstranění prvku
a = [1,2,3,4,5,6] a.delete_at(4) # vraci 5, a je a = [1,2,3,4,6] a.delete_at(-1) # vraci 6, a je [1,2,3,4]Odstranění podle hodnoty
a.delete(4) # 4, a je [1,2,3] a[1] = 1 a.delete(1) # 1, a je [3] a = [1,2,3] a.delete_if {|x| x%2==1 } # odstrani liche prvky, a je [2] a.reject! {|x| x%2==0 } # jako delete_if, a je []Bloky
5.times {|i| print i } # tiskne "01234" 0.upto(5) {|i| print i } # tiskne "012345" a = [3, 2, 1] a.each {|elm| print elm } # tiskne "321" b = a.map {|x| x*x } # b je [9, 4, 1] c = a.select {|x| x%2==0 } # c je [2], jen sude sum = a.inject {|s,x| s+x } # sum je 6, soucet prvku a.each_with_index{|e,i| print e,i} # tiskne 302112 (5..7).each_with_index {|x,i| print x,i } # tiskne "506172"Iterace řetězce
s = "¥1000" s.each_char {|x| print "#{x} " } # tiskne "¥ 1 0 0 0" "hello".each_byte.to_a # vraci [104, 101, 108, 108, 111] s = "A\nB" s.each_line {|l| print l.chomp} # tiskne "AB"Blok v bloku
1.upto(10) do |i| 1.upto(10) do |i| print "#{i} " end print " ==> Row #{i}\n" end 1 2 3 4 5 6 7 8 9 10 ==> Row 1 1 2 3 4 5 6 7 8 9 10 ==> Row 2 1 2 3 4 5 6 7 8 9 10 ==> Row 3 1 2 3 4 5 6 7 8 9 10 ==> Row 4 1 2 3 4 5 6 7 8 9 10 ==> Row 5 1 2 3 4 5 6 7 8 9 10 ==> Row 6 1 2 3 4 5 6 7 8 9 10 ==> Row 7 1 2 3 4 5 6 7 8 9 10 ==> Row 8 1 2 3 4 5 6 7 8 9 10 ==> Row 9 1 2 3 4 5 6 7 8 9 10 ==> Row 10Ve starší verzi Ruby 1.8 by byl vnější index překryt a číslo řádku by zůstávalo na deseti. Kvůli lepší kompatibilitě existuje v Ruby 1.9 přepínač -w, který varuje, pokud má parametr bloku stejný název jako již existující proměnná.
#!/usr/bin/ruby -wSoubory
File.open(filename) do |f| # otevre soubor f.each {|line| print line } # tiskne vsechny radky end # zavre soubor File.open(filename) do |f| f.each_with_index do |line,number| print "#{number}: #{line}" end endV Ruby samozřejmě existují i běžné cykly jako while, until nebo for/in.
while line = gets.chomp do # do lze vynechat, pokud nasleduje \n case line when /^\s*#/ # komentar next when /^quit$/i break else puts line.reverse end endŘetězce jsou v Ruby změnitelné (mutable).
"Ruby" + " rocks!" # "Ruby rocks!" "Ruby! " * 3 # "Ruby! Ruby! Ruby! " "%d %s" % [3, "rubies"] # "3 Rubies" greeting = "Hello" greeting << " " << "World" puts greeting # tiskne "Hello World" s = "hello" s.length # vraci 5, pocet znaku v 1.9, bajtu v 1.8 s.size # synonymum pro length s.concat(" world") # synonymum pro << # meni se s a vraci nove s s.empty? # vraci false s = "hello\n" s.chomp! # vraci "hello", odstranen \n, meni se s s.chomp # vraci "hello", nic se neodstranuje s.chomp! # vraci nil, nic se neodstranuje s.chomp!("o") # vraci "hell", meni se s s = "hello\n" s.chop! # vraci "hello", odstranen \n, meni se s s.chop # vraci "hell", s se nemeni s = "\t hello \n" s.strip # vraci "hello" s.lstrip # vraci "hello \n" s.rstrip # vraci "\t hello"Metody strip, lstrip a rstrip mají i verze s vykřičníky, takže mění objekty volající tyto metody.
Tiskni Sdílej:
File.open(filename).each do |line| print line endZápis blocku jde zkrátit pomocí '&':
[1,2,3].inject(&:+) # 6S použitím pár dalších knihovních metod:
TIOCGWINSZ = 0x5413 def terminal_size buf = [0, 0, 0, 0].pack('S4') if STDOUT.ioctl(TIOCGWINSZ, buf) >= 0 buf.unpack('S4')[0..2] else [20, 70] end end words = ARGF.readlines.map(&:strip).sort width = words.map(&:length).max + 1 col = terminal_size[1] / width row = words.size / col + 1 padding = row - words.size % row words.fill('', words.size, padding) puts words.each_slice(row).to_a.transpose .map { |ws| ws.map { |w| w.ljust(width) }.join } .join("\n")