ruby-mine

exploring the mine

Die drei Großen (2): Sequel

von skade am 11.02.2011 (18 Uhr)

Sequel ist wohl die DB-Zugriffsschicht, mit der sich die wenigsten Rubyisten auskennen. Dabei ist sie meiner Meinung nach die beste reine Skripting-Bibliothek von allen dreien. Das äussert sich schon darin, dass Sequel mit keinerlei Core-Extensions wie ActiveSupport oder Extlib daher kommt. Einige werden zwar optional mitgeliefert, aber nicht standardmässig geladen.

Wie bereits erwähnt, beschäftigt sich Sequel nur mit SQL und das mit nur minimalen Abstraktionen - Sequel ist also kein ORM. Dafür kommt Sequel mit der größten Anzahl an Datenbank-Adaptern, momentan über 20. Implementierungen für verschiedene Connection-Pooling-Strategien und Sharding finden sich auch.

Plugins gibt es für viele interessante SQL-Funktionen, zum Beispiel für Windows (also, nicht das OS) oder Recursive Table Expressions.

Darüber hinaus kommt Sequel mit einem Kommandozeilentool, dass sich als Ersatz für den datenbankspezifischen Client verwenden lässt, allerdings im Grunde nur IRB mit vorgeladener Datenbank ist.


Vollständigen Artikel lesen...
 
Kommentare (0)

Die drei Großen (1): AR, DM, Sequel

von skade am 08.01.2011 (15 Uhr)

Auf einem der letzten germany.rb-Treffen kam zwischendurch eine Frage auf, die wohl doch viele beschäftigt: was unterscheidet eigentlich die drei großen Persistenzbibliotheken ActiveRecord, DataMapper und Sequel? Ein Thema, dass schon so manchen hat fragen lassen, aber selten ordentlich beantwortet wurde. Daher will ich in einer kleinen Serie von Posts alle drei im Detail vorstellen. Dieser Post wird als Auftakt dienen und eine grobe Unterscheidung versuchen.


Vollständigen Artikel lesen...
 
Kommentare (3)

MiniTest Benchmark

von bovi am 12.11.2010 (03 Uhr)

Ganz frisch und noch nicht mal im Trunk zu finden, ist das neuste Kind der MiniTest Familie: minitest/benchmark. Diese Bibliothek stellt die Möglichkeit zur Verfügung, die Performance eines Codestückes zu testen. Dabei werden jedoch nicht die absoluten Zahlen als Maßstab genommen, sondern die Wachstumsrate eines Algorithmus. Das Ganze könnte z.B. so aussehen:

1
2
3
4
5
6
7
8
9
10
11
require 'minitest/benchmark'

class TestAlgo < MiniTest::Unit::TestCase
  def bench_my_algorithm
    assert_performance_linear 0.9999 do |n|
      n.times do
        @obj.my_algorithm
      end
    end
  end
end

Dieser Test ist erfolgreich, solange @obj.my_algorithm linear wächst. Die folgenden Assertions stehen zur Auswahl:

Bei all diesen Assertions kann ein Schwellwert für die Abweichung angegeben werden. Individualisten können weiterhin assert_performance verwenden, dort kann die Wachstumsrate selbst definiert werden.

Das alles bald auch in der Standardbibliothek eures Vertrauens…

 
Kommentare (0)

Gemcutter: Neue Wohnung für Gems

von bovi am 28.10.2009 (14 Uhr)

Packt eure TAR Archive! Haut alles rein was Ihr finden könnt. Fleiß, Schweiß und all eure Gems. Die Reise nach Jerusalem geht weiter und das nächste Ziel lautet Gemcutter.


Vollständigen Artikel lesen...
 
Kommentare (2)

Release-Schedule von 1.9.2 abgesagt

von skade am 23.09.2009 (23 Uhr)

Yugui hat in einer Mail an die Core-Mailingliste mitgeteilt, dass die Release-Schedule von Ruby 1.9.2 abgesagt wird. Diese war bereits recht weit fortgeschritten: die dritte Preview für 1.9.2 war für den 25. September angekündigt, einhergehend mit einem Feature Freeze. Als Begründung führt sie den Entschluss des MRI-Entwicklerteams an, dass der 1.9.2-Interpreter vor dem Release die RubySpec erfüllen muss. Diese Entscheidung würde aber einiges an Arbeit nach sich ziehen und ist somit nicht innerhalb des Rahmens zu erfüllen.

Die Bedeutung dieses Ereignisses ist nicht zu unterschätzen: lange Zeit war die RubySpec eine Bemühung, das Verhalten des MRI so zu beschreiben, dass andere Implementierungen ihre Konformität zu ihm testen können. Nach dieser Entscheidung ist die RubySpec nun eine Testsuite, die Ruby interpreterunabhängig beschreibt. Zu diesem Zweck bringt sie sogar eine simple Implementierung einer Specsuite mit, die es leicht machen soll, einen unvollständigen Miniinterpreter zu erstellen, der dann zumindest die Testsuite ausführen kann - auch, wenn er bei weitem Ruby nicht komplett implementiert.

 
Kommentare (1)

Rails 2.3.4 erschienen

von bovi am 04.09.2009 (16 Uhr)

Heute Morgen ist die Version 2.3.4 von Rails erschienen. Das Interessante an diesem Release ist die Geschichte hinter dem XSS Vulnerability Patch. Brian Mastenbrook hatte vor einiger Zeit einen Fehler in Twitter und Basecamp entdeckt. Durch diesen konnte er JavaScript in beiden Seiten einschleusen und dadurch Cross Site Scripting durchführen. Bei der Meldung dieses Fehlers stieß Brian jedoch auf erhebliche Probleme bei der Kommunikation mit 37Signals, die Ihn zu der Empfehlung führten, dass man in Zukunft lieber keine Daten mehr bei 37Signals speichern sollte.

 
Kommentare (0)

Phusion Passenger 2.2.5 erschienen

von bovi am 01.09.2009 (22 Uhr)

Phusion Passenger ist in der Version 2.2.5 erschienen und behebt mit dieser einige seit längerer Zeit bestehende Probleme.

Es gibt weiterhin berichte, dass Passenger bei der neusten (und auch bei älteren) Versionen Probleme mit Mac OS X 10.6 verursacht. Bisher ist den Entwickler aber noch nicht klar, was diese Fehler verursacht und wie sie diese beheben können. Wenn ich raten müsste, würde ich sagen, dass es etwas mit dem 64bit Support zu tun hat. Wie werden sehen.

 
Kommentare (0)

Ruby in Snow Leopard

von skade am 28.08.2009 (18 Uhr)

Wusstet ihr eigentlich, dass Schneeleoparden nicht brüllen, sondern schnurren wie eine Hauskatze? Was man bei einem Zoobesuch nicht so alles lernt!

Aber egal. Snow Leopard ist draussen und stellt natürlich die wichtige Frage: welches Ruby ist eigentlich dabei? Mich freuts ja[1], einige wirds ärgern:

[ skade HIPE-Machine ~ ] ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]

Mit nem Klick gibts auch noch die Liste der vorinstallierten Gems.

[1] Ja, ich bin der Meinung, dass die meisten Vorbehalte gegenüber 1.8.7 unbegründet sind.


Vollständigen Artikel lesen...
 
Kommentare (0)

Ruby bei der Terrorkom

von bovi am 04.08.2009 (17 Uhr)

Der von der Telekom gesponserte developer garden hat eine Bibliothek für Ruby veröffentlicht. Damit soll es u.a. möglich sein, SMS zu versenden:

1
2
3
4
5
6
7
8
9
10
11
12
# SMS-Client instanziieren
sms_client = SmsService::SmsService.new("YourUserName@t-online.de",
  "YourPassword")

# SMS versenden
send_sms_response = sms_client.send_sms(
  "+49-162-1234567,+49-163-1234567", 
  "Testnachricht", "SMSDemo", ServiceEnvironment.PRODUCTION)

# Rueckgabeparameter abfragen
error_code = send_sms_response.error_code
error_message = send_sms_response.error_message

Sprachverbindungen aufzubauen:

1
2
3
4
5
6
7
8
9
10
11
12
# VoiceCall instanziieren
voice_call_service = VoiceCallService:: VoiceCallService.new(
  "YourUserName@t-online.de", "YourPassword")

# Neuen Anruf aufbauen
voice_call = voice_call_service.new_call(
  "089 1234567890", "089 9876543210", 20, 120, 1)

# Rueckgabeparameter abfragen
status = voice_call.error_code
error_message = voice_call.error_message
session_id = voice_call.session_id

oder auch Serviceabfragen (wie z.B. für das Quota) zu initialisieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Quota-Client instanziieren
quota_client = QuotaService::QuotaService.new(
  "YourUserName@t-online.de", "YourPassword")

#Quota abfragen
quota_information = quota_client.get_quota_information("SmsProduction")

# Rueckgabeparameter abfragen
error_code = quota_information.error_code
error_message = quota_information.error_message
max_quota = quota_information.max_quota
max_user_quota = quota_information.max_user_quota
quota_level = quota_information.quota_level

Hat hier jemand einen T-Online Account und kann das mal ausprobieren? Bin doch ein wenig daran interessiert, wie gut das funktioniert. Gerade für das SMS Gateway hätte ich einige Anwendungsfälle.

 
Kommentare (1)

CodeRay 0.8.1

von murphy am 01.01.2009 (05 Uhr)

Frohes neues Jahr :)

Die erste neue Version von CodeRay seit zwei Jahren ist endlich fertig.

CodeRay ist eine Ruby-Bibliothek zum Syntax-Highlighting. Sie ist komplett in Ruby geschrieben und sehr schnell.

Neuigkeiten:

gem install coderay

Siehe auch:
 
Kommentare (0)

Bench - Ein Frühsommer-Hack

von janfri am 11.06.2008 (11 Uhr)

Wann hast Du das letzte mal die Bibliothek benchmark aus der Ruby Standardbibliothek benutzt? Kannst Du Dich noch erinnern, wie die Methoden heißen, die man braucht, um einen Benchmarkbericht zu erzeugen?

Ich muss jedes mal neu in der API-Dokumentation nachschauen, weil die Bibliothek für mich nicht gerade intuitiv ist, so dass ich die Benutzung immer wieder vergesse. Aber dem kann man ja Abhilfe schaffen…


Vollständigen Artikel lesen...
 
Kommentare (4)

Ruby/Eventmachine

von cypher am 01.04.2008 (20 Uhr)

Wie ihr vielleicht gemerkt habt gab es letze Woche wieder keinen Artikel. Ich möchte mich dafür entschuldigen und werde bis auf weiteres nur alle zwei Wochen einen neuen Artikel schreiben, da sich das zeitlich bei mir sonst kaum ausgeht.

Was?

Ruby/Eventmachine implementiert ereignisgesteuerte Ein- und Ausgabe für Netzwerkprogrammierung in Ruby. Eventmachine zielt dabei vor allem auf hohe Skalierbarkeit, Stabilität und Performanz, aber auch darauf eine API bereitzustellen die möglichst einfach zu verwenden ist. Eventmachine selber steht in 3 Varianten zur Verfügung: Purem Ruby, das ohne weitere Abhängigkeiten läuft, Ruby mit einer C++-Extension und einer Version für JRuby, die in Java geschrieben ist.


Vollständigen Artikel lesen...
 
Kommentare (1)

Hpricot

von cypher am 18.03.2008 (15 Uhr)

Nachdem mir letze Woche die FH dazwischengekommen ist, gabs eine Woche Verspätung. Sorry.

Was?

Hpricot ist ein sehr flexibler und schneller HTML-Parser, geschrieben von _why. Mittels XPath-Abfragen kommt man schnell an die gewünschten Teile einer HTML-Seite.


Vollständigen Artikel lesen...
 
Kommentare (2)

require 'rubygems' == useless

von bovi am 05.12.2007 (13 Uhr)

Das folgende habe ich gerade im Ruby Trunk entdeckt:


Vollständigen Artikel lesen...
 
Kommentare (5)

Ruby 1.9 kann JSON

von murphy am 05.06.2007 (16 Uhr)

JSON ist eine Alternative zu YAML, findet zunehmend Verbreitung und wird unter anderem von Rails benutzt, um Daten über die AJAX-Schnittstelle zu senden. Das Ruby-Core-Team hat sich jetzt entschieden, Ruby serienmäßig damit auszurüsten:

Mon Jun  4 21:15:45 2007  NARUSE, Yui  <naruse@ruby-lang.org>

    * lib/json.rb, lib/json, ext/json, test/json:
      import JSON library.
require 'json'

# To create a JSON text from a ruby data structure, you
# can call JSON.generate (or JSON.unparse) like that:
json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
# => [1,2,{"a":3.141},false,true,null,"4..10"]

# It's also possible to call the #to_json method directly.
json = [1, 2, {"a"=>3.141}, false, true, nil, 4..10].to_json
# => [1,2,{"a":3.141},false,true,null,"4..10"]
Passend zu p, y und pp gibt es damit auch j und jj:
$ irb19 -rjson
irb(main):001:0> jj Array('1.8'..'2.4')
[
  "1.8",
  "1.9",
  "2.0",
  "2.1",
  "2.2",
  "2.3",
  "2.4"
]
=> nil

Die Bibliothek wurde in C von Florian Frank geschrieben und gestern in den trunk importiert (das heißt, in Ruby 1.9.) Zu Weihnachten gibt es also schnellen JSON-Import und -Export in Ruby.

 
Kommentare (2)