CSS Naked Day i Rails :)

9 kwietnia 2008 nadejdzie kolejny “CSS Naked Day”:http://naked.dustindiaz.com/ (juz trzeci)
“Tore Darel”:http://tore.darell.no/ napisał railsowy “helper”:http://tore.darell.no/posts/ready_to_take_my_clothes_off
Kod wrzucamy do application_helper.rb


def naked_day?(day=9, month=4)
start = Time.utc(Time.now.year, month, day) - 12.hours
stop = Time.utc(Time.now.year, month, day) + 36.hours
now = Time.now.utc

now > start && now < stop
end

A w layoucie:


	<% unless naked_day? -%>
	<%= stylesheet_link_tag 'application' %>
	<% end -%>

Pełna automatyzacja.

Nie wiem jeszcze dlaczego, ale wg: "potnij.com":http://www.potnij.com/

bq. Dnia *05 kwietnia* obchodzimy w *Polsce* CSS Goły Dzień. Tego dnia rozbieramy strony z ich graficznych ubrań. Na świecie w tym roku dzień ten obchodzony jest 9 kwietnia.

Tags: , ,

Lokalne repozytorium gemów

Cel: chcemy mieć swoje repozytorium gemów,
nie zależne od systemowego. Sprobojemy zainstalować gema “term-ansicolor”:http://raa.ruby-lang.org/project/ansicolor/ w naszym nowym, magicznym repozytorium.

$ gem install term-ansicolor -i ~/tmp/gems
Successfully installed term-ansicolor-1.0.3
1 gem installed
Installing ri documentation for term-ansicolor-1.0.3...
Installing RDoc documentation for term-ansicolor-1.0.3...

W systemowym repo nie ma śladu po nowym gemie.

$ gem list term-ansicolor

Mała modyfikacja plików konfiguracyjnych:

$ cat ~/.gemrc
gemdir: /Users/michalkurek/tmp/gems
gemhome: /Users/michalkurek/tmp/gems

Co mu ty mamy:

oki@nil:~$gem list   

*** LOCAL GEMS ***

term-ansicolor (1.0.3)

Test w irbie:

$irb :)
>> require 'term/ansicolor'
LoadError: no such file to load -- term/ansicolor
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
        from (irb):1
>>

Aby uzywać gemów z naszego wystrzałowego repozytorium w *irbie* musimy ustawić dwie zmienne środowiskowe.

$ export GEM_PATH=/Users/oki/tmp/gems
$ export GEM_HOME=/Users/oki/tmp/gems
$irb
irb(main):001:0> require 'term/ansicolor'
=> true
irb(main):002:0>

A co z railsami?

Dziala, ale bez deklaracji zmiennych środowiskowych się nie obejdzie.

Jeżeli tworzymy nasze repozytorium od zera, warto pamietać o zainstalowaniu railsów :) ,
w przciwnym wypadku dostaniemy błąd podobnny do:

/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:379:in `report_activate_error': Could not find RubyGem rails

Dla wygody można dopisać do swojego ~/.bashrc linijki:

export GEM_HOME=/Users/michalkurek/tmp/gems
export GEM_PATH=/Users/michalkurek/tmp/gems

*Może ktoś zna sposób, aby to zrobić łatwiej? Bez deklarowania zmiennych środowiskowych?*

Przydatne linki:

* “rubyforge”:http://rubyforge.org/ [en]
* http://rubyforge.org/softwaremap/trove_list.php [en]
* http://www.ruby-lang.org/pl/libraries/ [en]
* “10 essential ruby gems”:http://insider.helicoid.net/articles/show/2/10_essential_ruby_gems [en]

Tags: ,

Różne wersje gemów i railsów

Odpowiedzi na dwa proste pytania:
* Jak użyć w kodzie danej wersji gema?
* Jak wygenerować szkielet aplikacji railsowej używając danej wersji railsów.? * *Problem0: Jak użyć w kodzie danej wersji gema?*

oki@nil:~$gem li | grep supp
activesupport (2.0.2, 1.4.4)

Jak widać na załaczonym obrazku posiadamy activesupport w dwóch wersjach: 2.0.2 i 1.4.4
Załóżmy, że chcemy użyc starszej wersji.

$ irb
>> gem 'activesupport', '= 1.4.4'
=> true
>> require 'active_support'
=> true

* *Problem1: Jak wygenerować szkielet aplikacji railsowej używajac danej wersji frameworka*

W systeme mamy railsy w wersji 1.2.5 i 2.0.2:

$ gem dep | grep rails
Gem rails-1.2.5
Gem rails-2.0.2

Tworzymy szkielet aplikacji ze wskazaniem na odpowiednią wersję:

oki@nil:~/tmp/test$rails _1.2.5_ app_old
oki@nil:~/tmp/test$rails _2.0.2_ app_new

A następnie sprawdzamy wersje railsów:

oki@nil:~/tmp/test$./app_old/script/console
Loading development environment.
>> Rails::VERSION::STRING
=> "1.2.5"
>> quit
oki@nil:~/tmp/test$./app_new/script/console
Loading development environment (Rails 2.0.2)
>> Rails::VERSION::STRING
=> "2.0.2"

Tags: , ,

RSS cache za pomocą FeedTools

FeedTools – pobieranie, parsowanie i cache dla Twoich feedów!

Obsługa rssów w Twojej aplikacji railsowej jeszcze nigdy nie była tak prosta!
“FeedTools”:http://sporkmonger.com/projects/feedtools/ jest biblioteką do obsługi formatów rss, atom.

Kilka linijek kodu i mamy napisaną obługę rssów z cachowaniem w naszej railsowej aplikacji.

Instalacja:

	gem install feedtools

Po zainstalowaniu gema mamy dostępny plik migracji:

oki@nil:~$cat /usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/db/migration.rb
class AddFeedToolsTables < ActiveRecord::Migration
  def self.up
    puts "Adding cached feeds table..."
    create_table :cached_feeds do |t|
      t.column :href, :string
      t.column :title, :string
      t.column :link, :string
      t.column :feed_data, :text
      t.column :feed_data_type, :string
      t.column :http_headers, :text
      t.column :last_retrieved, :datetime
      t.column :time_to_live, :integer
      t.column :serialized, :text
    end
  end

  def self.down
    puts "Dropping cached feeds table..."
    drop_table :cached_feeds
  end
end

Wcielamy w życie migracje:

oki@nil:~/rails/rails_app$./script/generate migrate add_feed_tools_tables
      exists  db/migrate
      create  db/migrate/002_add_feed_tools_tables.rb
oki@nil:~/rails/rails_app$cat /usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/db/migration.rb  > db/migrate/002_add_feed_tools_tables.rb
oki@nil:~/rails/rails_ap_$rake db:migrate
== 2 AddFeedToolsTables: migrating ============================================
Adding cached feeds table...
-- create_table(:cached_feeds)
   -> 0.0361s
== 2 AddFeedToolsTables: migrated (0.0363s) ===================================

Railsowa konsola:

oki@nil:~/tmp/rails_app$./script/console
Loading development environment (Rails 2.0.2) :)
>> require 'feed_tools'
=> ["FEED_TOOLS_NAMESPACES", "FEED_TOOLS_ENV"]
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #
>> wykop.title
=> "Wykop.pl - Strona Główna"
>> wykop.link
=> "http://www.wykop.pl/"
>> wykop.description
=> "Wykop - serwis tworzony przez użytkownikow"
>> wykop.items.length
=> 25
>> item = wykop.items.first
=> #
>> item.title
=> "TaniejTankuj.pl - Ogólnopolska akcja protestacyjna!"
>> item.link
=> "http://www.wykop.pl/link/44825/taniejtankuj-pl-ogolnopolska-akcja-protestacyjna"

Dokumentacja do klasy "FeedTools::FeedItem":http://feedtools.rubyforge.org/classes/FeedTools/FeedItem.html

No dobrze, ale co z tym cachowaniem?

Włączamy? Włączamy!

>> FeedTools.configurations[:feed_cache] = "FeedTools::DatabaseFeedCache"
=> "FeedTools::DatabaseFeedCache"
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #
>> wykop.live?	# prawda jezeli feed nie byl pobrany z cache
=> true
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')	# pobieramy jeszcze raz
=> #
>> wykop.live?	# tym razem z cache (http://feedtools.rubyforge.org/classes/FeedTools/Feed.html#M000315)
=> false

Kiedy ostatnio pobraliśmy feeda z sieci?

>> wykop.last_retrieved
=> Sat Feb 09 00:34:50 UTC 2008
>> Time.now.utc
=> Sat Feb 09 00:40:21 UTC 2008
>> wykop.time_to_live	# tutaj mamy czas zycia feeda w sekundach
=> 3600

Kilka przydatnych metod:

>> wykop.expire!
=> true
>> wykop.expired?
=> true
>> wykop.last_retrieved
=> Wed Dec 31 23:00:00 UTC 1969

Po ręcznej deaktualizacji feeda możemy ponownie pobrac go z sieci:

>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
>> wykop.live?
=> true		# swieżutki

Konfiguracje odbywa sie poprzez modyfikacje hasha *FeedTools.configurations*

>> pp FeedTools.configurations

W dokumentacji nie ma za wiele o opcjach konfiguracyjnych.

Dlatego jeżeli coś nie jest jasne zerkamy do kodu :)

*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/lib/feed_tools/lib*

Oraz testy z ktorych można się wiele dowiedzieć.

*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/test/unit*

Na koniec kilka linków:
* "FeedTools - strona projektu":http://sporkmonger.com/projects/feedtools/
* "FeedTools dokumentacja":http://feedtools.rubyforge.org/classes/FeedTools.html
* "Tutorial":http://sporkmonger.com/2005/08/11/tutorial

Jak generować rssy w Ruby on Rails:
* "Creating an RSS feed in Ruby on Rails":http://paulsturgess.co.uk/articles/show/13-creating-an-rss-feed-in-ruby-on-rails
* Screencast "Generating RSS Feeds":http://railscasts.com/episodes/87 (6:06) - generowanie rssów w rails-2.0, wykorzystanie routes.

Tags: ,

Screencasty – źródło wiedzy o Ruby i Railsach

Kilka linków do stron serwujących screencasty o ruby i railsach… * “railscasts”:http://railscasts.com/ – akutalnie *90* screencastów,
*co tydzien* pojawiają się nowe, tematyka: active-record, active-support,
administracja, ajax, cachowanie, debugowanie, pluginy, optymalizacja,
bezpieczeństwo, testowanie. Czas nagrania: 2-18 min.

* “Ruby Banter”:http://media.fngtps.com/rubybanter/ – jak narazie tylko 7 sztuk.
Mówią głównie o ruby, raczej dla ludzi mających pojęcie o języku.
Średni czas nagrania 5 min.
Ostatni odcinek ukazał się 03.12.2007 i od tej pory chłopaki się zawiesili :)
Czekamy na więcej! :)

* “sd.rb podcast”:http://feeds.feedburner.com/sdrbpodcast – troche o ror, *40* odcinków,
ale aktualnie maja chyba jakieś problemy :)

* “Ruby Plus”:http://www.rubyplus.org/ – 34 screencasty ruby-railsowe, co kilka dni pojawiają się nowe.

* “peepcode”:http://peepcode.com/ – płatne, kilkanaście bardzo dobrze nagranych, wartościowych screencastów,
tematyka głównie Rails (testowanie, benchmarking, javascipt, rjs, capistrano, git, rspec),
średni czas trwania: 1h.

Na screencastach prezentowane są różne techniki, przepisy, sposoby pisania kodu,
czasami warto poświecić kilka minut na obejrzenie.
W przyszłości oszczędzimy sobie czasu na googlowanie :)

Tags: , ,

RubyGems

RubyGems to zarządca pakietów dla Ruby. Poniżej polecenia, które mogą się przydać

* *gem help commands* – lista wszystkich poleceń

* *gem help polecenie* – pomoc dla danego polecenia

* *gem search -rd naz* – wyszukiwanie gemów wg. nazwy

* *gem environment* – informacje o środowisku gemów, wersja rubygems, info katalogu repozytorium gemów i wieeele innych przydatnych rzeczy

  RubyGems Environment:
  - RUBYGEMS VERSION: 1.0.1 (1.0.1)
  - RUBY VERSION: 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.2]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-8
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
  

* *gem install nazwa_gema* – u większości użytkowników najczęściej używane polecenie, może się przydać :)

* *gem server* – dokumentacja do gemów zainstalowanych w systemie dostępna na “http://localhost:8808/”:http://localhost:8808/

!/images/gem-server.jpg!

* *gem dependency* – pokazuje drzewo zależności zainstalowanych gemów

  $gem dep
   Gem RedCloth-3.0.4

   Gem ZenTest-3.6.1
     hoe (>= 1.2.2)

   Gem actionmailer-1.3.5
     actionpack (= 1.13.5)

   Gem actionmailer-2.0.2
     actionpack (= 2.0.2)

   Gem actionpack-1.13.5
     activesupport (= 1.4.4)
   ...
  

* *gem content nazwa_gema* – lista plików wchodzących w skład gema

* *gem outdated* – lista gemów do aktualizacji

* *gem specification nazwa_gema* – specyfikacja gema w “YAMLu”:http://pl.wikipedia.org/wiki/YAML

Używając skóconych wersji poleceń można przyspieszyć swoją pracę, np:

gem environment = gem e = *gem env*

gem install = *gem i*

gem dependency = *gem d*

itd.

Tags: ,

RailsConf 2007 video

Kilka dni temu pojawily się nagrania wideo z RailsConf 2007 Link to nagrań: “RailsConf 2007″:http://railsconf.blip.tv/#575987

Tags: ,

Ruby Shell :)

Ruby Shell z dopełnianiem poleceń i podpowiedziami… …na przykładzie “Readline”:http://www.eng.dmu.ac.uk/~hgs/ruby/ruby-1.6.7-rdocs/classes/Readline.html,
“Shellwords”:http://ruby-doc.org/core/classes/Shellwords.html i
“Abbrev”:http://ruby-doc.org/core/classes/Abbrev.html.

Użyj tabulatora! :)

$ ruby rbsh.rb
rbsh>
hello  quit
rbsh> h
Hello
rbsh> quit

Tags: ,

KRUG Spotkanie Noworoczne!

22 stycznia g. 19.00

Stara Piekarnia, ul. Dwernickiego 5.

Pierwsze spotkanie KRUG w Nowym Roku!
Forward ogłoszenia organizatorów:

bq. W planie 2 prezentacje:
# Maciej Książek i Szymon Kurcab opowiedzą o migracji popularnego serwisu kino.krakow.pl z PHP do RoR
# Marcin Raczkowski opowie o programowaniu rozproszonym i współbieżnym w ruby, zapowiada się sesja hands-on — prosimy zabrać ze sobą laptopy! Jeśli będą chętni, możemy kodować do późna w nocy :)

“Mapka”:http://www.zumi.pl/namapie.html?qt=&loc=krak%F3w%2CDwernickiego+5&Submit=Szukaj&cId=&sId=&x=28&y=8

Tags: , ,

Kraków Perl Mongers drugie spotkanie

9 Stycznia w “Godzinach”:http://www.godziny.com.pl/ odbylo sie drugie spotkanie

krakowskiej grupy użytkowników perla.

Bylo nas więcej niż ostatnio… Plan spotkania:

* prezentacja 1 – Say “yes” – perl 5.10, ->{“Krzysztof Juszkiewicz”:http://www.kt.agh.edu.pl/~juszkiew/}
* prezentacja 2 – Asynchroniczne programowanie sieciowe w Pythonie czyli Twisted, ->{*Michał Jarco*}
* prezentacja 3 – Perl a bezpieczeństwo – streszczenie “perlsec”:http://perldoc.perl.org/perlsec.html po polsku,
->{“Krzysztof Juszkiewicz”:http://www.kt.agh.edu.pl/~juszkiew/}
* social time

Z niecierpliwością i zaciekawieniem czekamy na następne spotkania :)

Tags: , ,