Screencast: Syntax Highlighting

Syntax Highlighting wird die visuelle Aufbereitung von Source-Code genant. Die meisten Texteditoren unterstützen Syntax Highlighting, aber auch Web wird gerne darauf zurückgegriffen um Quellcode lesbarer zu machen. Ryan zeigt diese Woche wie man in Ruby/Rails-Applikationen um Syntax Highlighting bereichern kann.

 

Download:

Download (30.9 MB, 9:09)
Alternativer Download für iPod & Apple TV (24.4 MB, 9:09)

 

Resourcen:

 

Quellcode:

[html]
<%= textilize(coderay(@article.content)) %>
[/html]

[ruby]
# config/environment.rb
config.gem "coderay"
config.gem "RedCloth"

# application_helper.rb
def coderay(text)
text.gsub(/<code( lang="(.+?)")?>(.+?)</code>/m) do
content_tag("notextile", CodeRay.scan($3, $2).div(:css => :class))
end
end

# syntax_benchmark.rb
require "rubygems"
require "benchmark"
require "coderay"
require "uv"

path = __FILE__
content = File.read(__FILE__)

# run it once to initialize
CodeRay.scan("print ‚hello’", "ruby").div(:css => :class)
Uv.parse("print ‚test’", "xhtml", "ruby", true, "amy")

Benchmark.bm(11) do |b|
b.report("coderay") do
50.times { CodeRay.scan(content, "ruby").div(:css => :class) }
end

b.report("ultraviolet") do
50.times { Uv.parse(content, "xhtml", "ruby", true, "amy") }
end

b.report("pygments") do
50.times { `pygmentize -f html "#{path}"` }
end
end
[/ruby]

[css]
.CodeRay {
background-color: #232323;
border: 1px solid black;
font-family: ‚Courier New‘, ‚Terminal‘, monospace;
color: #E6E0DB;
padding: 3px 5px;
overflow: auto;
font-size: 12px;
margin: 12px 0;
}
.CodeRay pre {
margin: 0px;
padding: 0px;
}

.CodeRay .an { color:#E7BE69 } /* html attribute */
.CodeRay .c { color:#BC9358; font-style: italic; } /* comment */
.CodeRay .ch { color:#509E4F } /* escaped character */
.CodeRay .cl { color:#FFF } /* class */
.CodeRay .co { color:#FFF } /* constant */
.CodeRay .fl { color:#A4C260 } /* float */
.CodeRay .fu { color:#FFC56D } /* function */
.CodeRay .gv { color:#D0CFFE } /* global variable */
.CodeRay .i { color:#A4C260 } /* integer */
.CodeRay .il { background:#151515 } /* inline code */
.CodeRay .iv { color:#D0CFFE } /* instance variable */
.CodeRay .pp { color:#E7BE69 } /* doctype */
.CodeRay .r { color:#CB7832 } /* keyword */
.CodeRay .rx { color:#A4C260 } /* regex */
.CodeRay .s { color:#A4C260 } /* string */
.CodeRay .sy { color:#6C9CBD } /* symbol */
.CodeRay .ta { color:#E7BE69 } /* html tag */
.CodeRay .pc { color:#6C9CBD } /* boolean */
[/css]

Screencast: ActionMailer in Rails 3

Auch ActionMailer wurde in Rails 3 neu geschrieben und bietet nun eine einfache Möglicheit es zu benutzen. In der neuen Version baut ActionMail auf dem gem Mail auf. Ryan zeigt diese Woche wie es benutzt werden kann.

 

Download:

Download (27.5 MB, 12:20)
Alternative Download für iPod & Apple TV (16.3 MB, 12:20)

 

Resourcen:

 

Quellcode:

[bash]
rails mailit
cd mailit
rails g scaffold user name:string email:string
rake db:migrate
rails g mailer user_mailer
bundle install
[/bash]

[ruby]
# config/initializers/setup_mail.rb
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "railscasts.com",
:user_name => "railscasts",
:password => "secret",
:authentication => "plain",
:enable_starttls_auto => true
}

ActionMailer::Base.default_url_options[:host] = "localhost:3000"
Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

# app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default :from => "ryan@railscasts.com"

def registration_confirmation(user)
@user = user
attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png")
mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
end
end

# users_controller.rb
UserMailer.registration_confirmation(@user).deliver

# Gemfile
gem "mail", "2.1.3"

# lib/development_mail_interceptor.rb
class DevelopmentMailInterceptor
def self.delivering_email(message)
message.subject = "#{message.to} #{message.subject}"
message.to = "ryan@railscasts.com"
end
end
[/ruby]

[html]
<!– views/user_mailer/registration_confirmation.text.erb –>
<%= @user.name %>,

Thank you for registering!

Edit profile: <%= edit_user_url(@user) %>

<!– views/user_mailer/registration_confirmation.html.erb –>
<p><%= @user.name %>,</p>

<p>Thank you for registering!</p>

<p><%= link_to "Edit profile", edit_user_url(@user) %></p>
[/html]

Screencast: Unobtrusive Javascript in Rails 3

Wie in den Vorgängerversionen unterstützt auch Rails 3 bei der Integration von JavaScript. Ryan zeigt diese Woche welche Möglichkeiten Rails 3 bietet.

 

Download:

Download (27.4 MB, 13:18)
Alternativer Download für iPod & Apple TV (17.7 MB, 13:18)

 

Resourcen:

 

Quellcode:

[html]
<!– ujs_example.html –>
<!DOCTYPE html>
<html>
<head>
<title>UJS Example</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
$(function() {
$("#alert").click(function() {
alert(this.getAttribute("data-message"));
return false;
})
})
</script>
</head>
<body>
<h1><a href="#" id="alert" data-message="Hello UJS!">Click Here</a></h1>
</body>
</html>

<!– layouts/application.html.erb –>
<%= javascript_include_tag :defaults %>
<!– or –>
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "jquery.rails.js" %>
<%= csrf_meta_tag %>

<!– products/index.html.erb –>
<% form_tag products_path, :method => :get, :remote => true do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>

<div id="products">
<%= render @products %>
</div>
[/html]

[html]
// products/index.js.erb
$("products").update("<%= escape_javascript(render(@products)) %>");
// or
$("#products").html("<%= escape_javascript(render(@products)) %>");
[/html]

Script-Tip: Stadt, Land und Wetter aus der IP beziehen (IP2Location)

Anhand einer IP-Adresse lassen sich die verschiedensten Informationen beziehen. Neben dem Land, der Stadt und der Region, kann mittels der IP-Adresse auch die Postleitzahl, Zeitzone, ISP, Domain-Namen, Koordinaten und sogar das Wetter ermittelt werden.

 

Diese Daten können über die Bibliotheken von IP2Location ermittelt werden. Entwickler können die zur Verfügung gestellten APIs benutzen um die im binären Format vorliegenden Datenbanken abzufragen.

 
Folgendes wird dazu benötigt:
  • IP2Location C API Bibliothek (Download: http://www.ip2location.com/c.htm)
  • Ruby
  • GNU make oder ein vergleichbares make (Windows können ggf. auf Cygwin aufbauen)
 
Installation:

[bash]
ruby extconf.rb –with-libIP2Location-lib=<path to C API lib> –with-includeIP2Location-include=<path to C API lib>
# Beispiel: ruby extconf.rb –with-libIP2Location-lib=..C-IP2Location-3.0.0libIP2Location –with-includeIP2Location-include=..C-IP2Location-3.0.0libIP2Location

make
[/bash]

 
Sourcecode Beispiel

[ruby]
require ‚IP2Location‘

IP2LocObj = IP2Location.new()
IP2LocObj.open("data/IP-COUNTRY-SAMPLE.BIN")
rec = IP2LocObj.get_all("12.34.56.78")
puts rec.country_short
puts rec.country_long
puts rec.city
puts rec.region
puts rec.isp
puts rec.latitude
puts rec.longitude
puts rec.domain
puts rec.zipcode
puts rec.timezone
puts rec.netspeed
puts rec.iddcode
puts rec.areacode
puts rec.weatherstationcode
puts rec.weatherstationname
[/ruby]

Script-Tip: URL auf Existenz prüfen

In unserem heutigen Script-Tip wollen wir euch zeigen wie die Existenz einer URL geprüft werden kann. Dazu wird der Response-Code der angefragten Seite validiert und ein entsprechender boolischer Wert zurückgegeben.

Eine Beispielimplementierung könnte folgendermaßen aussehen:
[ruby]
require ‚open-uri‘
require ’net/http‘

def existiert_url?(url)
url = URI.parse(url)
begin
Net::HTTP.start(url.host, url.port) do |http|
# An dieser Stelle kann bei Bedarf auch auf
# andere Response-Codes geprüft werden
return http.head(url.request_uri).code == "200"
end
rescue SocketError => se
# Fehlerbehandlung, wenn die Domain nicht existiert
# Je nach Applikation kann hier die entsprechende Aktion durchgeführt werden
rescue
# Alle anderen Fehlerfälle werden/können hier behandelt werden
end
end
[/ruby]

 

Danach kann die Existenz einer URL geprüft werden:

[ruby]
existiert_url? "http://www.rubyonrails.de/"
# => true: Die Startseite existiert
existiert_url? "http://www.rubyonrails.de/tag/rails-3/"
# => true: Es gibt eine Unterseite mit Artikeln/Tags zu Rails 3
existiert_url? "http://www.rubyonrails.de/GIBT-ES-NICHT"
# => false: Diese Unterseite existiert nicht
[/ruby]

Freikarte für die RailsWayCon 2010

Wir freuen uns, dass wir dieses Jahr wieder einen Leser mit einer Eintrittskarte für die RailsWayCon erfreuen dürfen.
Die Freikarte beinhaltet den kompletten Besuch der RailsWayCon 2010 von Montag bis Mittwoch!

 

Wie könnt ihr Teilnehmen:
Schickt uns einfach eine Mail an railswaycon2010<AT>rubyonrails.de

 

Einsendeschluss ist der 30. April 2010.

 

Unter allen Einsendungen werden wir den Gewinner ziehen und uns mit ihr/ihm in Verbindung setzen.

 

Das rubyonrails.de-Team wünscht euch Viel Glück!
Der Rechtsweg ist ausgeschlossen

 

Wir möchten uns an dieser Stelle auch recht Herzlich bei dem Sponsor, Software & Support Media, für diesen Preis bedanken:

Software & Support Media Group
Das Serviceangebot der S&S Media Group gehört zu den umfangreichsten der IT- und Webwelt. Hier tritt man in Kontakt mit IT-Professionals, Web- und Grafikdesignern aus allen Branchen – vom Developer und Designer über den Architekten, Projektleiter und Marketingprofi bis zum CIO. Vielfältige Plattformen stehen dafür zur Verfügung: Konferenzen, Print, Online, Bücher und Trainings.


Zu den bekanntesten Konferenzen von Software & Support Media gehören die JAX, die BASTA! oder die webinale. Das global aufgestellte Medienhaus unterhält Büros in Frankfurt, Potsdam sowie in London, San Francisco, Bangalore und Singapur. www.software-support.biz

Screencast: Schutz vor XSS in Rails 3

XSS (Cross-Site Scripting), eine Bezeichnung für das Ausnutzen von Sicherheitslücken innerhalb von Webanwendungen, sollte in allen WEB-Applikationen unterbunden werden. Ryan zeigt in dieser Woche welche Änderungen in Rails 3 den Entwickler dabei unterstützt, um von Anfang an mögliche Sicherheitslücken zu vermeiden.

 

Download:

Download (15.7 MB, 8:56)
alternative download for iPod & Apple TV (11.1 MB, 8:56)

 

Resourcen:

 

Quellcode:

[html]
<!– views/comments/_comment.html.erb –>
<div class="comment">
<%= strong link_to(comment.name, comment.url) %>
<p><%= comment.content %></p>
</div>
[/html]

[ruby]
# rails
"foo".html_safe?
safe = "safe".html_safe
safe.html_safe?

# application_helper.rb
def strong(content)
"<strong>#{h(content)}</strong>".html_safe
end
[/ruby]

Phusion Passenger 2.2.11 erschienen

Das Team vom Phusion hat das Ruby und Rails Modul für Apache und Nginx in einer neuen Version freigegeben. Diese Version beseitigt einen Fehler der nur in der Apache-Version unter hoher Last auftreten kann.

Bei dem Fehler konnte der Apache, wenn er unter hoher Last stand, unter Umständen einfrieren. Daher richtet dich dieses Update eher an Apache Benutzer. Nginx Benutzer sind nicht von dem Fehler betroffen und müssen diese Version nicht zwingend einspielen.

 

Das Update kann über die bekannten Komandos druchgeführt werden:

[bash]
gem install passenger

# Apache Benutzer rufen danach folgendes auf
passenger-install-apache2-module

# Nginx Benutzer rufen stattdessen folgendes auf
passenger-install-nginx-module
[/bash]

Script-Tip: Summe eines Arrays ermitteln

Die Summe eines Arrays lässt sich in auf verschiedenste Art und Weise ermitteln. In unserem heutigen Script-Tip wollen wir euch zeigen, welche Möglichkeiten es gibt.

[ruby]
# Das zu summierende Array
mein_array = [1, 8, 5, 3, 10]

# Die offensichtlichste Methode
sum = 0
mein_array.each { |a| sum+=a }

# Eine etwas kürzere Variante
mein_array.inject{|sum,x| sum + x }

# Wie man mit Ruby 1.9 zum Ziel kommt
mein_array.inject(:+)

# Mit der Hilfe von ActiveSupport
require ‚activesupport‘
mein_array.sum

# Oder man erweitert direkt die Array-Klasse um die benötigte Funktion
class Array
def summe
self.inject{|sum,x| sum + x }
end
end

mein_array.summe
[1,2,3,4].summe

[/ruby]

Vortrag zu Rails 3 von Yehuda Katz

Yehuda hat auf der QCon-Konferenz einen Vortrag zu Rails 3 gehalten. In diesem Vortrag spricht er über die Geschwindigkeitsoptimierungen, der neuen Architektur, den Einfluss von Merb und mehr. Dabei gibt er auch einen Einblick in Bundler.

 

Die Präsentation wurde aufgezeichnet und kann auf InfoQ angeschaut werden.