sqlite i ruby

Ku pamięci. Jest duża różnica między instalowaniem sqlite gem moją (czyt. niedziałającą) metodą:

sudo apt-get install libsqlite0 libsqlite0-dev sqlite
gem install sqlite

a metodą działającą

sudo apt-get install libsqlite0 libsqlite0-dev sqlite swig gcc
gem install sqlite

która to najwyraźniej jest oczywista, skoro komunikaty o błędach osiągają aż tak wysoki poziom lakoniczności.

 

Chunky Bacon!

City Fox and Onion with Infinite Layers
Glasgow

Cartoon Foxes in Bratislava
Bratislava

bacon dispenser
toaleta publiczna

W świetle powyższych grafik należy zadać sobie jedno pytanie - czy to Ruby trafił do mas, czy programiści Ruby'ego na ulicę?

 

rubiny przed wieprze

Jeśli ktoś chce używać na Ubuntu nowych Railsów 1.1, to musi się liczyć z koniecznością instalacji Ruby'ego w wersji 1.8.4 zamiast 1.8.3 dostępnej w repozytoriach. Dlaczego jej w repozytoriach nie ma, mimo iż jest dostępna od ponad 3 miesięcy to nie wiem. Pewnie z tego samego powodu, z którego znajduje się tam stara wersja Blendera. Prawdziwą zagadka jest dla mnie natomiast pytanie co tam robi pakiet 'ruby1.9', bo o zainteresowanie gałęzią 'bleeding edge' developerów Ubuntu nie posądzam.

W tej sytuacji można albo zupgrejdować system do dapper, zmieniając odpowiednie wpisy w repozytoriach i wykonując magiczne apt-get dist upgrade i apt-get upgrade (nie polecane), albo zainteresować się pakietami .deb dla Ubuntu Ruby'ego 1.8.4 autorstwa pewnego dobrego człowieka (polecane).

Po ściagnięciu i zainstalowaniu owych pakietów czas na rubygems. Ściągamy rubygems 0.8.11 i rozpocznamy zabawę z libzlib, którego prawdopodobnie rubygems nie wykrywa. Dla pewności, po rozpakowaniu przechodzimy do katalogu z rubygems i wykonujemy ruby setup.rb czekając na moment, w którym dowiemy się o braku zlib. Aby umożliwić sobie dalszą pracę, po stwierdzeniu błędu, kopiujemy zlib.so z /usr/lib/ruby/1.8/i486-linux/zlib.so do /usr/local/lib/ruby/site_ruby/1.8/i686-linux. To powinno załatwić sprawę i umożliwić nam ponowne uruchomienie instalacji rubygems, tym razem nie zakończone błędami. Jeśli już za pierwszym razem nie otrzymaliśmy żadnego błędu, to zyskany czas wykorzystujemy na wypełniania kuponów totolotka.

Pozostaje już tylko końcowe uruchomienie 'gem install rails' i możemy się cieszyć nowymi, lśniącymi torami. Do następnego apgrejdu.

Jeszcze trochę i sobie zainstaluję jakąś Fedorę, tylko dlatego, że pakiety ma nówki sztuki.

 

za co lubię Ruby'ego

Interaktywny interpreter OCamla:

  sharnik@wojt$ ocaml
          Objective Caml version 3.08.3
  
  # quit
    ;
    ;;
  Unbound value quit
  # exit;;
  - : int -> 'a = 
  # exit 1 ;;
  sharnik@wojt$

Interaktywny interpreter Ruby'ego (irb):

  sharnik@wojt$ irb
  irb(main):001:0> quit
  sharnik@wojt$ irb
  irb(main):001:0> exit
  sharnik@wojt$

Preferuję języki funkcjonalne nad funkcyjnymi.

 

GitS OST + Ruby = projekt z lingwistyki komputerowej

Dzisiaj się obudziłem, ze na środę należy zrobić jakiś mini-projekt z Lingwistyki Komputerowej. Były na to chyba 4 tygodnie, ale co się będę spieszył, czas nie zając.. Szybciutko wybrałem zadanie - Napisz program, który wczytuje tekst i konstruuje sieć skończoną „przechowującą” wyrazy zawarte w tekście. - i zasiadłem do pracy.

Stwierdziłem, że to dobra okazja do zaznajomienia się z Rubym i tak rzeczywiście było. Pisanie sieci skończonej w C zajęłoby mi spokojnie kilka godzin (wliczając debugging i wyszukiwanie gdzie wychodze poza zakres tablicy, a gdzie nie dochodze do końca), natomiast mój nowy ulubieniec dając mi do dyspozycji zagnieżdżane rekurencyjnie tablice haszowe pozwolił mi na wykonanie zadania w godzinkę. Wliczając w to zapoznanie się z językiem, jego składnią, itd... Coś czuję, że szykuje się dłuższa współpraca ;)

A linijek kodu ile zaoszczędziłem.. Wersja robocza:


#przerobka danych wejsciowych
main = {}
string = gets.chomp
tab_string = string.split

tab_string.each do |str|
  tab_str = str.split(//) # dziele string na tablice znakow
  tab_str[tab_str.length] = '0'

  #dodawanie do main:
  i = 0;
  hasz_tmp = main

  while (tab_str[i])
    if hasz_tmp[tab_str[i]]		# takie przejscie istnieje, wiec nie nadpisujemy
      hasz_tmp = hasz_tmp[tab_str[i]]
    else 				# przejscie jeszcze nie istnieje - dodajemy
      hasz_tmp[tab_str[i]] = {}
      hasz_tmp = hasz_tmp[tab_str[i]]
    end
    i+=1
  end
end

puts main

Czy wasz język to potrafi? ;)