Programming Google App Engine

As one of today’s cloud computing services, Google App Engine does more than provide access to a large system of servers. It also offers you a simple model for building applications that scale automatically to accommodate millions of users. With Programming Google App Engine, you’ll get expert practical guidance that will help you make the best use of this powerful platform. Google engineer Dan Sanderson shows you how to design your applications for scalability, including ways to perform common development tasks using App Engine’s APIs and scalable services.

You’ll learn about App Engine’s application server architecture, runtime environments, and scalable datastore for distributing data, as well as techniques for optimizing your application. App Engine offers nearly unlimited computing power, and this book provides clear and concise instructions for getting the most from it right from the source.

  • Discover the differences between traditional web development and development with App Engine
  • Learn the details of App Engine’s Python and Java runtime environments
  • Understand how App Engine handles web requests and executes application code
  • Learn how to use App Engine’s scalable datastore, including queries and indexes, transactions, and data modeling
  • Use task queues to parallelize and distribute work across the infrastructure
  • Deploy and manage applications with ease

Screencast: Authorisierung mit CanCan

Authorisierung in Webapplikation lassen sich auf einfache Art und Weise mit CanCan realisieren. Ryan Bates zeigt in diesem Screencast wie dieses Plugin eingesetzt werden kann.

 

Download (30.2 MB, 15:57)
Alternativer Download für iPod & Apple TV (20.3 MB, 15:57)

 

Resourcen:

Quellcode:

[bash]
sudo rake gems:install
[/bash]

[ruby]
# config/environment.rb
config.gem "cancan"

# models/ability.rb
class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # guest user

if user.role? :admin
can :manage, :all
else
can :read, :all
can :create, Comment
can :update, Comment do |comment|
comment.try(:user) == user || user.role?(:moderator)
end
if user.role?(:author)
can :create, Article
can :update, Article do |article|
article.try(:user) == user
end
end
end
end
end

# application_controller.rb
rescue_from CanCan::AccessDenied do |exception|
flash[:error] = "Access denied."
redirect_to root_url
end

# articles_controller.rb
load_and_authorize_resource

# comments_controller.rb possibility
load_and_authorize_resource :nested => :article
[/ruby]

[html]
<!– articles/show.html.erb –>
<p>
<% if can? :update, @article %>
<%= link_to "Edit", edit_article_path(@article) %> |
<% end %>
<% if can? :destroy, @article %>
<%= link_to "Destroy", @article, :method => :delete, :confirm => "Are you sure?" %> |
<% end %>
<%= link_to "Back to Articles", articles_path %>
</p>

<p>
<% if can? :update, comment %>
<%= link_to "Edit", edit_comment_path(comment) %>
<% end %>
<% if can? :destroy, comment %>
| <%= link_to "Destroy", comment, :method => :delete, :confirm => "Are you sure?" %>
<% end %>
</p>

<!– articles/index.html.erb –>
<% if can? :create, Article %>
<p><%= link_to "New Article", new_article_path %></p>
<% end %>
[/html]

jQuery Cookbook

jQuery simplifies building rich, interactive web frontends. Getting started with this JavaScript library is easy, but it can take years to fully realize its breadth and depth; this cookbook shortens the learning curve considerably. With these recipes, you’ll learn patterns and practices from 19 leading developers who use jQuery for everything from integrating simple components into websites and applications to developing complex, high-performance user interfaces.

Ideal for newcomers and JavaScript veterans alike, jQuery Cookbook starts with the basics and then moves to practical use cases with tested solutions to common web development hurdles. You also get recipes on advanced topics, such as methods for applying jQuery to large projects.

  • Solve problems involving events, effects, dimensions, forms, themes, and user interface elements
  • Learn how to enhance your forms, and how to position and reposition elements on a page
  • Make the most of jQuery’s event management system, including custom events and custom event data
  • Create UI elements-such as tabs, accordions, and modals-from scratch
  • Optimize your code to eliminate bottlenecks and ensure peak performance
  • Learn how to test your jQuery applications

The book’s contributors include:

  • Cody Lindley
  • James Padolsey
  • Ralph Whitbeck
  • Jonathan Sharp
  • Michael Geary and Scott González
  • Rebecca Murphey
  • Remy Sharp
  • Ariel Flesler
  • Brian Cherne
  • Jörn Zaefferer
  • Mike Hostetler
  • Nathan Smith
  • Richard D. Worth
  • Maggie Wachs, Scott Jehl, Todd Parker, and Patty Toland
  • Rob Burns

Security on Rails

The advantage of using Rails is its agility; it makes developing your web applications easy and fast. The disadvantage is that it can leave holes in your security if you are not aware of common vulnerabilities. It’s a nerve-wracking and unfortunate fact that there are plenty of malicious people lurking on the Web. As a Rails developer, it is essential that you understand how to assess risk and protect your data and your users.

Security on Rails uses established security principles to teach you how to write more secure software, defend your applications from common threats, and encrypt your data. We’ll give you an example of a hacking exploit, and explore how to fix the weaknesses in an application.

You’ll learn the steps you need to take to control access to information and authenticate users, including cryptography concepts and authorization. In addition, you’ll see how to integrate your applications with external management systems; in short, the crucial details you must consider to protect yourself and your data.

The most important element of security is to plan for it before it becomes an issue. Security on Rails helps beginner and intermediate developers to take control of their applications and guard against attacks.

MongoDB: Eine Einführung und Nutzung mit Ruby/Rails

MongoDB ist eine dokumenten-orientierte Datenbank, die als OpenSource-software zur Verfügung steht. Wir haben euch drei Screencasts rausgesucht, in denen ihr diese Datenbank näher kennenlernen und sehen wie ihr es mit Ruby und Rails benutzen könnt.

Die Screencasts stammen von Yoon You und sind auf techmecode.com auch als Downloadversion erhältlich.

Die Download-Versionen sind unter folgenden Links zu finden:


Introduction to MongoDB – Part I

Download(36MB, 13:09)
Alternativer Download für iPod & iPhone (17MB, 13:09)



Introduction to MongoDB – Part II

Download(52.5MB, 20:20)
Alternativer Download für iPod & iPhone (22.3MB, 20:20)



Introduction to MongoDB – Part III, MongoMapper & Rails

Download(21.8MB, 09:29)
Alternativer Download für iPod & iPhone (9.5MB, 09:29)

Neues Ruby 1.9 Release

Der Ruby1.9 Maintainer Yuki Sonoda (Yugui) hat heute eine neue Ruby-Version veröffentlicht (Ruby 1.9.1-p376). Es behebt mitunter eine Sicherheitslücke für folgende String-Methoden: String#ljust, String#center and String#rjust.

Weiterhin wurden, laut Changelog, ca. 100 Fehler aus der vorherigen Version behoben.
Details über die Fehler und deren Behebung können im Changelog nachgelesen werden: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_1/ChangeLog

Script-Tip: Kopierten Text in Vim einfügen

Vim ist ein mächtiger Editor der von vielen in der Software-Entwicklung eingesetzt wird. Es gibt viele Plugins und vim-Scripte die einen Entwickler bei der Arbeit unterstützen. Jedoch ist Vim bei der automatischen Einrückung manchmal zu „hilfreich“ und formatiert eingefügten Text nicht immer so, wie man es erwartet.

Ein kleines Beispiel wie die Einrückung aussehen kann, wenn man folgenden Text per Copy&Paste einfügt:
Zu kopierender Text:
[ruby]
def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end
[/ruby]

Mögliches Ergebnis nach dem Einfügen:
[ruby]
def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end
[/ruby]
Jedoch lässt sich dieses Verhalten anpassen, damit man zum gewünschten Ergbnis kommt.
Im Kommandomodus einfach folgende Konfig setzten:
[text]
:set paste
[/text]

Danach den gewünschten Text einfügen und ggf. die Einstellung wieder zurücksetzen:
[text]
:set nopaste
[/text]

Screencast: Mechanize

Mechanize ist eine Library mit der Webseiten automatisch abgesurft werden können. Es unterstützt Weiterleitungen, Cookies und mehr. Ryan zeigt diese Woche wie Mechanize benutzt werden kann.

Download (22.8 MB, 10:16)
Alternativer Download für iPod & Apple TV (14.8 MB, 10:16)

Resourcen:

Quellcode:
[bash]
sudo gem install mechanize
[/bash]

[ruby]
# script/console
puts Readline::HISTORY.entries.split("exit").last[0..-2].join("n")

# lib/tasks/product_prices.rake
desc "Import wish list"
task :import_list => :environment do
require ‚mechanize‘
agent = WWW::Mechanize.new

agent.get("http://railscasts.tadalist.com/session/new")
form = agent.page.forms.first
form.password = "secret"
form.submit

agent.page.link_with(:text => "Wish List").click
agent.page.search(".edit_item").each do |item|
Product.create!(:name => item.text.strip)
end
end
[/ruby]

Script-Tip: Arrays

In unserem heutigen Script-Tip wollen wir euch zeigen wie man Arrays nach zufälliger Reichenfolge mischt, das Element mit dem größten/kleinsten Wert incl Index raussucht und den Durchschnittswert aller Elemente herausfindet.

Als erstes ein Beispiel wie man die Elemente nach zufälliger Reichenfolge mischen kann:

[ruby]
[1,2,3,4,5,6,7,8,9].shuffle
# => [3, 2, 5, 7, 4, 6, 1, 9, 8]

# Bitte beachtet, dass dies erst ab Ruby Version 1.8.7 unterstützt wird.
# Falls ihr noch mit einer älteren Version arbeitet/arbeiten müsst,
# könnt ihr auch auf andere Weise eure Arrays "mischen"

[1,2,3,4,5,6,7,8,9].sort_by{ rand }
# => [4, 7, 9, 6, 1, 5, 3, 8, 2]
[/ruby]

Nun ein Beispiel wie ihr den größten/kleinsten Wert in einem Array inclusive dem Index herausfinden könnt:

[ruby]
# Ruby bringt bereits alles mit um die gesuchten Werte
# zu ermitteln: min und max

# Den größten Wert incl. Index finden…
[7,5,10,9,6,8].each_with_index.max
# => [10, 2]

# Den kleinsten Wert incl. Index finden…
[7,5,10,9,6,8].each_with_index.min
# => [5, 1]
[/ruby]

Als letzter Arry-Script-Tip noch ein paar Beispiele um den Durchschnittswert eines gesamten Arrays herauszufinden:

[ruby]
arr = [9,8,5,2,8,7]
arr.inject(:+).to_f / arr.size # => 6.5

# oder
arr.instance_eval{inject(&:+).to_f / length}

# oder
arr.inject{ |r, x| r + x }.to_f / arr.size

# oder
arr.inject(0.0){ |r, x| r + x } / arr.size

# oder
class Array
def gesamt
inject(0.0) { |erg, el| erg + el }
end

def durchschnitt
gesamt / size
end
end

arr.durchschnitt
[/ruby]

Screencast: Einen Twitter Clone erstellen

Twitter ist so gut wie jedem ein Begriff und viele verwenden es bereits täglich. Eric Berry hat auf teachmecode.com eine Serie von Screencasts veröffentlicht, in dem er zeigt wie man einen Twitter Clone erstellen kann.

Die Serie besteht aus sechs Teilen und ist frei auf dem Video-Portal vimeo (www.vimeo.com) erhältlich.

Damit ihr euch die Videos nicht „mühsam“ zusammensuchen müsst, haben wir euch hier alle sechs Teile zusammengepackt.

Viel Spaß bei den Videos.