Czerwone sznurki czyli linki wybrane z blogów

via reddit:

http://progfu.com/post/2417365958/walk-the-path-to-ruby-enlightenment

oraz

http://rubykoans.com/

Niecodzienny sposób uczenia się Ruby :wink:

świeżutki cheat sheet od envylabs, dla tych którym zdarza się niektórych rzeczy zapominać :slight_smile:

http://blog.envylabs.com/2010/12/rails-3-cheat-sheets/

[quote]świeżutki cheat sheet od envylabs, dla tych którym zdarza się niektórych rzeczy zapominać

http://blog.envylabs.com/2010/12/rails-3-cheat-sheets/[/quote]
czadowe, dzięki! jutro w paperowej wersji zawiśnie na tablicy :wink:

Dosyć często używam komendy pyton -m SimpleHTTPServer, dzisiaj pomyślałem sobie “Czy mógłbym mieć to samo, ale w Ruby?” i trafiłem na post pod tytułem ruby’s “python -m SimpleHTTPServer” - polecam, to jest naprawdę kawał dobrego skryptu.

Ja używam często:

sudo gem install heel heel
Jednak tworzenie pliku server.ru może być upierdliwe.

Update:

albo tak ;-):

ruby -rubygems -rwebrick -e 'include WEBrick;s=HTTPServer.new(:Port=>4000);s.mount("/",HTTPServlet::FileHandler,"./",:FancyIndexing=>true);trap("INT"){s.stop};s.start'

[quote=radarek]ruby -rubygems -rwebrick -e 'include WEBrick;s=HTTPServer.new(:Port=>4000);s.mount("/",HTTPServlet::FileHandler,"./",:FancyIndexing=>true);trap("INT"){s.stop};s.start'
[/quote]
Prawie jak w pythonie :wink:

[quote=Paweł Kondzior][quote=radarek]ruby -rubygems -rwebrick -e 'include WEBrick;s=HTTPServer.new(:Port=>4000);s.mount("/",HTTPServlet::FileHandler,"./",:FancyIndexing=>true);trap("INT"){s.stop};s.start'
[/quote]
Prawie jak w pythonie ;)[/quote]
No ok, ale co stoi na przeszkodzie by zrobić sobie do tego jakiś alias czy jakiś skrypt? Głównie chodziło mi o to, że racka trzeba zainstalować i stworzyć mu specjalny plik, a tutaj mamy (webrick) z stdlib. Oczywiście fajniej by było zrobić: ruby -rhttpserver :slight_smile: (może ktoś zgłosi ticketa na ruby-core?:D)

[quote=drogus]jQuery(function($) { $("a[data-update], form[data-update]").live("ajax:success", function(event, data,status,xhr) { $("#"+$(this).attr("data-update")).html(data); }); });
[/quote]
Uznałem, że jest to na tyle oczywiste, że nie opisywałem, ale może faktycznie lepiej podać pełne rozwiązanie.

What your mama never told you about Ruby 1.9 String [autoreklama]

Dałbyś linka do notki, a nie całego bloga :slight_smile:

Ups! Poprawione.

Też mi odkrycie, pisałem o tym blisko 2 lata temu :wink: http://radarek.jogger.pl/2009/02/12/nowosci-i-zmiany-w-ruby-1-9-obsluga-kodowan-znakow/

Zatem mój blog nic nie wnosi poza tym, że wiadomo, że przez te 2 lata i mimo wydania wersji stabilnej, nic się w tej materii nie zmieniło.

Zatem mój blog nic nie wnosi poza tym, że wiadomo, że przez te 2 lata i mimo wydania wersji stabilnej, nic się w tej materii nie zmieniło.[/quote]
Nie zmieniło się gdyż zapewne nie jest to takie straszne jak się wydaje na początku. Zwykle jak potrzebujesz dostać się do konkretnych znaków to i tak iterujesz po kolei (więc each_char wystarcza). Z kolei jeśli bardzo chcesz mieć szybko random access to zawsze możesz przekonwertować do kodowania o stałej szerokości, np. utf32. We wpisie popełniłeś błąd pisząc, że “Podsumowując, dla Stringów Unicode (czyli np. UTF-8), czas dostępu do i-tego znaku łańcucha s rośnie wraz z i (pozycją) oraz s.size (długością łańcucha)…”. Dzieje się tak tylko gdy jest to kodowanie o zmiennej szerokości znaków (np. utf8) oraz tekst zawiera znaki spoza ascii, ale nie dotyczy to każdego kodowania unicode (np. utf32). Przeczytaj mój wpis, jest przykład konwersji do utf32 co daje dostęp O(1) do poszczególnych znaków.

No i jest jeszcze kwestia, że dostęp nawet do pierwszego znaku łańcucha rośnie wraz z jego długością. To już trudniej wytłumaczyć i przejść nad tym do porządku dziennego :wink:

Jakiś benchmark? Ja takiego zachowania nie widzę.

Zaraz, co?

Możesz to jakoś wyjaśnić i pokazać benchmark że faktycznie tak jest?

Benchmark prezentujący zależność czasu dostępu od długości łańcucha:

[code=ruby]# -- encoding : utf-8 --

require ‘benchmark’

s1 = “ąćęłńóśżź!0123456789”

puts Benchmark.measure {
1000.times { k = s1[1] }
}

s2 = “ąćęłńóśżź!0123456789” * 100_000

puts Benchmark.measure {
1000.times { k = s2[1] }
}[/code]

0.000000 0.000000 0.000000 ( 0.000366) 2.010000 0.000000 2.010000 ( 2.019083)
W obu przypadkach bierzemy pierwszy znak. W przypadku długiego łańcucha dostęp trwa znacznie dłużej. Zależność występuje dla każdego indeksu > 0. Oczywiście mówimy cały czas o MRI Ruby 1.9.2.

Faktycznie, potwierdzam. Wygląda na jakiś bug. Może ktoś zgłosi? http://redmine.ruby-lang.org/

Coś mi się tu nie zgadza. Według mnie pierwszy znak łańcucha ma index 0 i zdaje się, że problem czasu dostepu go nie dotyczy.