05/5/13

WordPress

Wie ich zu WordPress kam
Ich war auf der Suche nach einer Technologie, mit der ich meine Homepage gestalten kann. Und zwar als OpenSource CMS mit der Möglichkeit Blogposts integrieren zu können. Außerdem sollten auch bestimmte Freunde die Seite mitgestalten können. Mit dem selben System wollte ich aber auch kleine nichtöffentliche Projektwikis anlegen können, auf die natürlich nur die jeweiligen Projektteilnehmer zugreifen können sollen. Für die Projektseiten soll es dann auch noch einen Issuetracker geben.

Fündig geworden bin ich bei WordPress. Welche Schritte dafür nötig sind, zeigt dieser Post.
Viel Erfolg 🙂

Basisinstallation

Das geht in wenigen Minuten 🙂

http://www.linuxcandy.com/2012/02/how-to-install-wordpress-in-ubuntudebain-system-or-server.html

Multisite

Damit kann man dann als Admin mit einem Klick neue Blogs/Sites hinzufügen, die komplett unterschiedliche Nutzergruoppen haben können.

http://www.redirect301.de/wordpress-multisite-mit-subdomains-installieren.html#blog-netzwerk-aktivieren

Multisite Privacy

Damit man bei den Multisites jeweils individuell einstellen kann, ob die Seite öffentlich sichtbar ist oder nur für die Nutzer der jeweiligen Site oder für alle Nutzer aus allen Blogs der Multisite, braucht es dieses Plugin.

http://wordpress.org/extend/plugins/more-privacy-options/installation/

Roles & Cpabilities

http://codex.wordpress.org/Roles_and_Capabilities

Issue tracker

Ganz einfacher Weg eine Issueliste anzulegen mit den üblichen Eintragungen (Task,  Verantwortlicher, Dauer, Zustand, …). Geht im Backend und kann als Widget in der Seitenleiste eingevlendet werden.

http://wordpress.org/extend/plugins/really-simple-issue-tracker/

CMS

WordPress lässt sich wunderbar als CMS verwenden. Einfach Pages anlegen. In den Settings bei Reading -> Front page displays -> A static page aussuchen. Geht nicht mit allen Templates (geht aber z.B. mit dem aktuellen Standarttheme “Twenty Twelve” ).

http://wordpress.lernenhoch2.de/handbuch/wordpress-als-cms/

http://www.websitestartup.de/wordpress-als-cms

Themes

http://www.tripwiremagazine.com/2013/01/wordpress-cms-themes.html

http://themeforest.net/item/avada-responsive-multipurpose-theme/full_screen_preview/2833226?ref=lvraa&ref=lvraa&clickthrough_id=129481994&redirect_back=true

Hilfe beim ersten großen Fehler

Description

All the default categories/tags links are not working, showing error..

“This is somewhat embarrassing, isn’t it?”

Steps to reproduce:

  1. Install WP 3.3.1 on domain, e.g.  http://blog.example.com
  2. Enable multi-site features, using subfolder instead of subdomain
  3. Create a site, e.g.  http://blog.example.com/test1
  4. Create a post, e.g.  http://blog.example.com/test1/2012/03/04/test1/
  5. Enter the default category link, e.g.  http://blog.example.com/test1/category/uncategorized/

Now you will see the message: “This is somewhat embarrassing, isn’t it?”

Fix:

  1. Enter this link:  http://blog.example.com/test1/wp-admin/options-permalink.php
  2. Change nothing, press “Save Changes”
  3. Now you can view the link correctly:  http://blog.example.com/test1/category/uncategorized/

The above issue also apply to tags

Hat bei mir wunderbar funktioniert 🙂

05/5/13

VIM

VIM SCHNELLÜBERSICHT

Grundlegende Bewegungen
h l k j Zeichen links, rechts; Zeile hoch, runter
b w Wort links, rechts
ge e Wortende links, rechts
{  } Anfang vorhergehender, nächster Absatz
( ) Anfang vorhergehender, nächster Satz
0 gm Zeilenanfang, Zeilenmitte
^  $ erstes, letztes Zeichen der Zeile
nngg Zeile n, Ersatzwert: letzte, erste Zeile
n% Prozentsatz n der Datei
n| Spalte n der akt. Zeile
% zugehörige Klammer, Kommentarende,#define
nnL Zeile n nach Dateianfang, vor Dateiende
M mittlere Zeile im Fenster
Einfügen & Ersetzen Einfügemodus
i a vor, nach dem Cursor einfügen
I A am Anfang, Ende der Zeile einfügen
gI in der 1. Spalte einfügen
o O neue Zeile unter, über der akt. Zeile öffnen
rc Zeichen unter dem Cursor durch c ersetzen
grc wie r, ohne Auswirkung auf das Layout
R Zeichen ab der Cursorposition ersetzen
gR wie R, ohne Auswirkung auf das Layout
cm ersetze Text des Bewegungsbefehls m
cc or S ersetze aktuelle Zeile
C ersetze bis zum Zeilenende
s ersetze ein Zeichen, gehe in den Einfügemodus
~ ändere Groß-/Kleinschreibung
g~m ändere Groß-/Kleinschr. des Bew.bef. m
gum gUm Klein-, Großschreibung des Bew.bef. m
<m >m Text der Bewegung m links, rechts schieben
n<< n>> n Zeilen links, rechts schieben
Löschen
x X lösche Zeichen unter, vor dem Cursor
dm lösche Text der Bewegung m
dd D lösche akt. Zeile, bis zum Zeilenende
J gJ 2 Zeilen zusammenfassen, ohne Leerzeichen
:rd lösche r Zeilen
:rdx lösche r Zeilen in Register x
Einfügemodus
^Vc ^Vn Zeichen c wörtl. einfügen, Dez.wert n
^A zuvor eingefügten Text einfügen
^@ wie ^A und Einfüge-  Befehlsmodus
^Rx ^R^Rx füge Inhalt des Registers x ein, wörtl.
^N ^P Textergänzung (Treffer nach, vor dem Cursor)
^W Wort vor dem Cursur löschen
^U alle eingefügten Zeichen der akt. Zeile löschen
^D ^T einen Tab.abstand links, rechts schieben
^Kc1c2 or c1c2 Digraph \c1,c2\ eingeben
^Oc Befehl c ausführen
^X^E ^X^Y aufwärts, abwärts blättern
<esc> or ^[ in den Befehlsmodus schalten
Kopieren
"x nächstes Löschen, Kopieren, Einfügen in Reg. x
:reg Inhalt aller Register zeigen
:reg x Inhalt von Register x zeigen
ym kopiere Text des Bewegungsbefehls m
yy or Y kopiere akt. Zeile in das Kopierregister
p P füge Kopierregister hinter, vor dem Cursor ein
]p [p wie pP mit Einrückung
gp gP wie pP, Cursor bleibt hinter dem Text
Weitere Einfügeoperationen
g?m rot13-Verschlüsselung für die Bewegung m
n^A n^X +n-n zur Zahl unter dem Cursor
gqm format. Bewegungsbereich m auf feste Breite
:rce w zentriere Zeilen im Bereich r auf Breite w
:rle i Zeilenbereich r linksbündig mit Einrückungi
:rri w Zeilenbereich r rechtsbündig auf Breite w
!mc filtere Bewegungsbereich m durch ext. Befehl c
n!!c filtere n Zeilen durch ext. Befehl c
:r!c filtere Zeilenbereich r durch ext. Befehl c
Markierungsmodus
v V ^V Zeichen-, Zeilen-, Blockmarkierung ein/aus
o Cursor an den Anfang der Markierung
gv letzten markierten Bereich nochmals markieren
aw as ap Wort, Satz, Absatz markieren
ab aB ( )-Block , { }-Block markieren
Rückgängig machen, Wiederholen & Register
u letzten Befehl rückgängig machen
U zuletzt geänderte Zeile wiederherstellen
letzte Änderungen wiederholen
^R rückgängig gemachten Befehl erneut anwenden
n letzte Änderungen n-mal durchführen
qc qC nächste Eingaben in Reg. c speichern, anfügen
q Aufzeichnung beenden
@c Inhalt von Register c ausführen
@@ letzten @-Befehl wiederholen
:@c Register c als Ex-Befehl ausführen
:rg/p/c Ex-Befehl c für Bereich r dort ausführen
wo das Muster p zutrifft
Komplexe Bewegungen
- + Zeile hoch, runter auf erstes Nichtleerzeichen
B W Wort links, rechts (Trennung: Leerzeichen)
gE E Wortende links, rechts (Trennung: Leerzeichen)
n_ n-1 Zeilen runter zum 1. Nichtleerzeichen
g0 Anfang der Bildschirmzeile
g^  g$ erstes, letztes Zeichen der Bildschirmzeile
gk gj Bildschirmzeile auf, ab
fc Fc nächstes, vorhergehendes Zeichen c suchen
tc Tc vor nächstes c, hinter vorhergehendes c
; , letztes fFtT wiederholen, in Gegenrichtung
[[ ]] zum Abschnittsbeginn rückwärts, vorwärts
[] ][ zum Abschnittsende rückwärts, vorwärts
[( ]) offene (, ) rückwärts, vorwärts
[{  [} offene {} rückwärts, vorwärts
[m ]m Anfang der vorhergeh., nächsten Java-Methode
[# ]# offenes #if#else#endif rückwärts, vorwärts
[* ]* Anfang, Ende /* */ rückwärts, vorwärts
Suchen & Ersetzen
/s  ?s suche s vorwärts, rückwärts
/s/o  ?s?o suche s vorw., rückw., Versatz o
or / letzte Suche vorwärts wiederholen
or ? letzte Suche rückwärts wiederholen
# * suche Wort unter Cursor rückwärts, vorwärts
g# g* dasselbe, auch teilweise Übereinstimmung
gd gD lok., glob. Def. des Symbols unter Cursor
:rs/f/t/x im Bereich r wird f durch t ersetzt
x: g-alle Vorkommen, c-mit Bestätigung
:rx Ersetzung mit neuem r & x wiederholen
Metazeichen in Suchmustern
.   ^  $ beliebiges Zeichen, Zeilenanfang, Zeilenende
\< \> Wortanfang, Wortende
[c1-c2] einzelnes Zeichen im Bereich c1..c2
[^c1-c2] einzelnes Zeichen nicht im Bereich c1..c2
\i \k \I \K Name, Schlüsselwort; ohne Ziffern
\f \p \F \P Dateiname, druck. Zeichen; ohne Ziffern
\s \S Leerzeichen, Nichtleerzeichen
\e \t \r \b <esc><tab><><>
\= * \+ Wiederholungen: 0..10..1..
\| trennt Alternativen (  Oder)
\( \) faßt Muster zu einer Gruppe zusammen
\& \n der ganze Treffer, die n-te () Gruppe
\u \l Groß-, Kleinbuchstabe
Versätze in Suchbefehlen
n or +n n Zeilen abwärts in Spalte 1
-n n Zeilen aufwärts in Spalte 1
e+n e-n n Zeilen rechts, links vom Ende des Treffers
s+n s-n n Zln. rechts, links vom Anfang des Treffers
;sc anschließend Suchbefehl sc ausführen
Marken und Bewegungen
mc Marke [a..Z] an die akt. Position setzen
`c `C zur Marke c in akt. Datei, C in belieb. Datei
`0..9 zur Pos. beim letzten Verlassen des Editors
`` `" zur Pos. vor dem Sprung, vor letztem Verl.
`[ `] zum Anfang, Ende des zuletzt geändert. Textes
:marks Liste der Markierungen ausgeben
:jumps Liste der Sprungpositionen ausgeben
n^O zur n-ten älteren Pos. in der Sprungliste
n^I zur n-ten jüngeren Pos. in der Sprungliste
Tastenbelegung & Abkürzungen
:map c e ersetze  e im Normal- & Mark.mod.
:map!  c e ersetze  e im Einfüge- & Bef.mod.
:unmap c  :unmap! c Ersetzung für c aufheben
:mk f akt. Einstellungen in Datei f schreiben
:ab c e definiere c als Abkürzung für e
:ab c Abkürzung zeigen, die mit c beginnen
:una c Abkürzung c löschen
Tags
:ta t springe zum tag t
:nta springe zum n-neueren tag des Stapels
^] ^T zum tag unter dem Cursor, zurück vom tag
:ts t Liste der tags zeigen, einen auswählen
:tj t springe zum tag t
:tags Liste der tags ausgeben
:npo :n^T zum n-älteren tag des Stapels
:tl springe zum letzten passenden tag
^W}  :pt t zeige tag unter Cursor, tag t (preview)
^W] teile Fenster und zeige tag unter dem Cursor
^Wz or :pc schließe preview-Fenster
Blättern & mehrere Fenster
^E ^Y Zeile auf, ab
^D ^U halbe Seite auf, ab
^F ^B Seite auf, ab
zt or z akt. Zeile an den Fensteranfang
zz or z.  akt. Zeile in die Fenstermitte
zb or z- akt. Zeile an das Fensterende
zh zl ein Zeichen nach rechts, links
zH zL halben Bildschirm nach rechts, links
^Ws or :split Fenster waagrecht teilen
^Wn or :new neues, leeres Fenster erzeugen
^Wo or :on akt. Fenster wird einziges Fenster
^Wj ^Wk in das Fenster unten, oben
^Ww ^W^W in das Fenster unten, oben (reihum)
Ex-Befehle ()
:e f editiere Datei f, außer nach Änderungen
:e!  f editiere Datei f in jedem Fall
:wn :wN Datei schreiben & nächste, vorhergeh. edit.
:n :N nächste, vorhergeh. Datei editieren
:rw Bereich r in akt. Datei schreiben
:rf Bereich r in Datei f schreiben
:rw>>f Bereich r an Datei f anhängen
:q :q! Editor verlassen, Änderungen verwerfen
:wq or 😡 or ZZ akt. Datei schreiben & Ed. verlassen
<up> <down> in der Befehlsliste blättern
:r f Inhalt von Datei f vor Cursor einfügen
:r!  c Ausgabe des Befehles c nach Cursor einfügen
:all ein Fenster pro Datei in der Arg.liste öffnen
:args die Argumentliste anzeigen
Ex-Bereiche
, ;  trennt 2 Zeilennummern, gehe zur ersten
der Zeilen
n absolute Zeilennummer n
.   $ akt. Zeile, letzte Zeile der Datei
% * ganze Datei, markierter Bereich
't Position der Marke t
/p/ ?p? nächste, vorherg. Zeile für die p zutrifft
+n -n +n-n zur akt. Zeilennummer
Faltung
zfm erzeuge Faltung bis Bewegung m
:rfo erzeuge Faltung für den Bereich r
zd zE lösche Faltung unter Cursor, alle im Fenster
zo zc zO zC öffne, schließe Faltung unter Cursor;
rekursiv
[z ]z zum Anfang, Ende der offenen Faltung
zj zk aufwärts, abwärts zum Anfang, Ende
der nächsten Faltung
Verschiedenes
:sh  :!c starte Shell, Shell-Befehl c ausführen
K man für Wort unter dem Cursor aufrufen
:make make starten, Fehler lesen, zum 1. springen
:cn  :cp zum nächste, vorherg. Fehler springen
:cl  :cf Fehlerliste ausgeben,   aus Datei lesen
^L Bildschirm neu schreiben
^G Dateinamen und Position zeigen
g^G zeige Cursorpos.: Spalte, Zeile, Wort, Byte
ga ASCII-Wert des Zeichens unter dem Cursor
gf Datei öffnen, deren Name unter dem Cursor steht
:redir>f Ausgabe in Datei f umleiten
:mkview [f] Darstellungsopt. speichern [in Datei f]
:loadview [f] Darstellungsopt. laden [aus Datei f]
^@ ^K ^_  \  Fn ^Fn nichtdef. Tasten, Neudef. möglich

Copyright (C) 2005 by Laurent GRÉGOIRE (laurent.gregoire@icam.fr)
Translated from English by Fritz Mehner
Converted from vimqrc-ge.tex using a Python script.

05/5/13

RegExp

regexp-evaluator

Spickzettel

http://www.addedbytes.com/download/regular-expressions-cheat-sheet-v1/png/

PHP-RegExp

Quelle

Metazeichen, Quantifikatoren, Zeichenklassensymbole und Regex Optionen

1. Metazeichen

Metazeichen Bedeutung
\ “Maskiert” ein nichtalphanumerisches Zeichen und nimmt ihm dadurch die Sonderbedeutung
^ String/Textanfang
$ String/Textende
. Beliebiges Zeichen außer dem Zeilentrenner
| Alternative
() Gruppierung
[] Zeichenbereich, Zeichenklasse

2. Quantifikatoren

Quantifikator Bedeutung
* Keinmal bis beliebig oft
+ Mindestens einmal, oder beliebig oft
? Optional 0 oder 1 mal
{x} Genau x mal
{x,} Mindestens x mal
{x,y} Zwischen x und y mal

3. Zeichenklassensymbole

Zeichen Enspricht Bedeutung
\d [0-9] Ziffern
\D [^0-9] Verneinung von \d
\w [0-9a-zA-Z_] Buchstaben, Ziffern, Unterstrich
\W [^0-9a-zA-Z_] Verneinung von \w
\s [\t\n\f\r] Tabulator, Leerzeichen…
\S [^\t\n\f\r] Verneinung von \s
05/5/13

Ruby on Rails

Inhalt

  1. Tutorials und Referenzen
  2. Tools and Environment
    1. But What Does It All Mean
    2. Testtools
    3. GIT – Version controll
  3. Entwicklungszyklus
  4. Themen und Komponenten
    1. Rake
    2. Plugin annotate models
    3. Controller – Action – Parameter
    4. ORM – Objekt relational mapping
    5. Ruby
    6. Validation von Modelparametern
    7. Associating models
    8. Rails Helper
    9. Fileupload
    10. Ajax
  5. Facebooker
  6. Spickzettel

 

 

1. Tutorials und Referenzen

Ruby on Rails Tutorial
– Chapter 1 From zero to deploy
– Chapter 3 Rails-flavored Ruby
 

Ruby on Rails Guide

Rail API

Ruby Einführung und Dokumentation

Ruby-page

Ruby-Core

 

galileo openbook: ruby_on_rails08

Starting Ruby on Rails: What I Wish I Knew

Rails-sourcen: http://rubyforge.org/frs/?group_id=307
zum Inhalt

2. Tools and Environment

Here’s the tools you’ll need. Don’t read endless reviews trying to decide on the best one; start somewhere and get going.

2.1 But What Does It All Mean?

Ruby is a programming language, similar to Python and Perl. It is dynamically typed (no need for “int i”), interpreted, and can be modified at runtime (such as adding new methods to classes).
Ruby API

Rails is a gem, or a Ruby library.
Rails API

IRB is the interactive Ruby console (type “irb” to use). Rails has a special IRB console to access your web app as it is running (excellent for live debugging): apps/blog>ruby script/console

Rake is Ruby’s version of Make. Define and run maintenance tasks like setting up databases, reloading data, backing up, or even deploying an app to your website.

Erb is embedded Ruby, which is like PHP. It lets you mix Ruby with HTML (for example):


Hello there, <%= get_user_name() %>

YAML (or YML) means “YAML Ain’t a Markup Language” — it’s a simple way to specify data:

{name: John Smith, age: 33}

It’s like JSON

Eclipse

 

O’Reilly: Ruby on Rails Meets Eclipse (2007)

2.2 Testtools

irb – interactive ruby bash

rubyfähigen Terminal öffnen (z.B. per Locomotive)

apps/blog>irb

Befehle zeilenweise eingeben:

irb(main):012:0> tmp = [[1,2],[3,4]]
=> [[1, 2], [3, 4]]
irb(main):007:0> for i in tmp
irb(main):008:1> i[0] = 11
irb(main):009:1> end
=> [[11, 2], [11, 4]]

Ruby Console

irb für das aktuelle Projekt: Rails invokes Ruby’s irb utility in the context of your Rails application

rubyfähigen Terminal in Projekt öffnen (z.B. per Locomotive)

apps/blog>ruby script/console

 

Loading development environment (Rails 2.1.1)
>>

Jetzt Rubybefehle zeilenweise

2.3 GIT – Version controll

siehe GIT

zum Inhalt

3. Entwicklungszyklus

  • apps>rails blog -d mysql
    • erzeugt neue Anwendung “blog”
  • apps/blog>rake db:create
    • erzeugt die passende Datenbank “blog_development”
  • apps/blog>script/generate controller home index
    • erzeugt den controller home mit der action index
    • Anwendung kann jetzt getestet werden – Standartstartseite
  • apps/blog>rm public/index.html
    • in config/routes folgendes vor map.connect ergänzen
      map.root :controller => “home”
    • Anwendung kann jetzt getestet werden – Startseite = home/index
  • apps/blog>script/generate scaffold Post name:string title:string content:text
    • erzeugt MVC-Standartfiles für Manipulation von Model Post
  • apps/blog>rake db:migrate
    • erzeugt alle Tabellen aus den Models, bzw. aus den migrationfiles
  • Link ergänzen: apps/blog/app/views/home/index.html.erb editieren
    • <%= link_to "My Blog", posts_path %>
    • Anwendung kann jetzt getestet werden – Startseite = home/index – dem Link folgen
  • apps/blog>rake doc:app
    • Erzeugt Documentation unter doc/app/
  • Controller und Models einzeln hinzufügen
    • apps/blog>ruby script/generate [controller|model|migration] yourname
  • Migration editieren: 
    blog/db/migrate/20090321142337_create_channels.rb
  • apps/blog>rake db:migrate


zum Inhalt

4. Themen und Komponenten

4.1 rake

DB Migration

>rake db:migrate

>rake db:migrate VERSION=10

> ruby script/generate scaffold

Freezing Rails

Speichert alle verwendeten gems in vendor/rails und nutzt diese statt des Lokalen Rails

>rake rails:freeze:gems
>rake rails:unfreeze

Weitere Infos


zum Inhalt

4.2 Plugin annotate_models

1.download+install (for each project):
planner>ruby script/plugin install http://repo.pragprog.com/svn/Public/plugins/annotate_models

2.run:
planner>rake annotate_models


zum Inhalt

4.3 Controller – Action – Parameter

http://my.url/store/add_to_cart/123
In this simple case, it takes the first part of the path, store, as the
name of the controller and the second part, add_to_cart, as the name of an
action. The last part of the path, 123, is by convention extracted into an internal
parameter called id.


zum Inhalt

4.4 ORM-object relational mapping

So an ORM layer maps tables to classes, rows to objects, and columns to
attributes of those objects. Class methods are used to perform table-level operations,
and instance methods perform operations on the individual rows.


zum Inhalt

4.5 Ruby

Types of variables
name local variable ‘name’
@name instance variable ‘name’
:name Symbol ‘name’

Instance variables are nil if not defined, while local var not defined leads to an error.
Ruby symbol
link_to “Goodbye!” , :action => “goodbye”
The :action part is a Ruby symbol. You can think of the colon as meaning
the thing named…, so :action means the thing named action.7 The => “goodbye”
associates the string goodbye with the name action. In effect, this gives us
keyword parameters for methods.

Arrays

a = [42, 8, 17]

a << “foo” << “bar” # Chaining array pushes
=> [42, 8, 17, 7, “foo”, “bar”]

>> (0..9).to_a # Use parentheses to call to_a on the range

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>> a.sort_by { rand }

array = array.split(/,\s*/)

array2 = []

array.in_groups_of(6) {|item| array2 << item }

puts array2[2][0]

Hashes

>> user = {}                          # {} is an empty hash
=> {}
>> user["first_name"] = "Michael"     # Key "first_name", value "Michael"
=> "Michael"
>> user["last_name"] = "Hartl"        # Key "last_name", value "Hartl"
=> "Hartl"
>> user["first_name"]                 # Element access is like arrays
=> "Michael"
>> user                               # A literal representation of the hash
=> {"last_name"=>"Hartl", "first_name"=>"Michael"}
>> user = { "first_name" => "Michael", "last_name" => "Hartl" }

better use symbols

>> user = { :name => "Michael Hartl", :email => "
 michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"
 michael@example.com"}
>> user[:name]              # Access the value corresponding to :name.
=> "Michael Hartl"
>> user[:password]          # Access the value of an undefined key.
=> nil

Multidim hashes

>> params = {}        # We'll start with the strategically named params hash.
=> {}
>> params[:user] = { :name => "Michael Hartl", :email => "
 mhartl@example.com" }
=> {:name=>"Michael Hartl", :email=>"
 mhartl@example.com"}
>> params
=> {:user=>{:name=>"Michael Hartl", :email=>"
 mhartl@example.com"}}
>>  params[:user][:email]
=> "
 mhartl@example.com"

 

Generelle Regeln

– Ruby functions have an implicit return, meaning they return the last statement evaluated

– Ruby also has an explicit return option; using first return if if-statement is true:

>> def string_message(string)
>>   return "It's an empty string!" if string.empty?
>>   return "The string is nonempty."
>> end

Auch explizit und implizit möglich:

>> def string_message(string)
>>   return "It's an empty string!" if string.empty?
>>   "The string is nonempty."
>> end

Parameter for functions

# Parentheses on function calls are optional.
stylesheet_link_tag('blueprint/screen', :media => 'screen')
stylesheet_link_tag 'blueprint/screen', :media => 'screen'
# Curly braces on final hash arguments are optional.
stylesheet_link_tag 'blueprint/screen', { :media => 'screen' }
stylesheet_link_tag 'blueprint/screen', :media => 'screen'

Klassen, Funktionen und Methoden

Methods: Functions provided by an instance variable

>> class Word
>>   def palindrome?(string)
>>     string == string.reverse
>>   end
>> end

>> w = Word.new              # Make a new Word object
>> w.palindrome?("level")
=> true

Using Inheritance

Here Word < String is the Ruby syntax for inheritance, which ensures that, in addition to the new palindrome? method, words also have all the same methods as strings

>> class Word < String             # Word inherits from String
>>   # Return true if the string is its own reverse.
>>   def palindrome?
>>     self == self.reverse             # self is the string itself
>>   end
>> end

>> s = Word.new("level")    # Make a new Word, initialized with "level".
=> "level"                  
>> s.palindrome?            # Words have the palindrome? method.
=> true                     
>> s.length                 # Words also inherit all the normal string methods.
=> 5

Klassen überschreiben

>> class String
>>   # Return true if the string is its own reverse.
>>   def palindrome?
>>     self == self.reverse
>>   end
>> end
=> nil
>> "deified".palindrome?
=> true

 

Modules

– module ApplicationHelper: code in Ruby modules can be mixed in to Ruby classes. When writing ordinary Ruby, you often write modules and include them explicitly yourself, but in this case Rails handles the inclusion automatically for us.

 


zum Inhalt

4.6 Validation von Modelparametern

class Post < ActiveRecord::Base
validates_presence_of :name, :title
validates_length_of :title, :minimum => 5
end

zum Inhalt

4..7 Associating Models

1:n

class Product < ActiveRecord::Base
has_many :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :product
end
1:1

class Order < ActiveRecord::Base
has_one :invoice
end

n:m

class Article < ActiveRecord::Base
has_and_belongs_to_many :users
# …
end

class User < ActiveRecord::Base
has_and_belongs_to_many :articles
# …
end


zum Inhalt

4.8 Rails-Helper

(see all at Rails Framework Doc)
helper is a function designed for use in views.

<% for item in @items %>
<% for column in Item.content_columns %>
<%=h item.send(column.name) %>
<% end %>
<%= link_to ‘Show’, :action => ‘show’, :id => item %>
<%= link_to ‘Edit’, :action => ‘edit’, :id => item %>
<%= link_to ‘Destroy’, { :action => ‘destroy’, :id => item }, :confirm => ‘Are you sure?’, :method => :post %>
<% end %>

<%= link_to image_tag(‘delete.png’), { :action => ‘destroy’, :id => @entry, :start => @root, :layout => @layout }, :confirm => ‘Are you sure?’, :method => :post %>

 

<%= link_to image_tag(‘Einstellungen.gif’, :width => 50, :border => 0), :controller => ‘settings’, :action => ‘list’ %>

<%= stylesheet_link_tag ‘scaffold’ %>


zum Inhalt

4.9 Fileupload

HowtoUploadFiles


zum Inhalt

 

4.10 AJAX

depot_l/app/views/layouts/store.rhtml

<%= stylesheet_link_tag “depot” , :media => “all” %>
<%= javascript_include_tag :defaults %>

depot_l/app/views/store/add_to_cart.rjs
page.replace_html(“cart” , :partial => “cart” , :object => @cart)

depot_l/app/controllers/store_controller.rb
def add_to_cart
begin
product = Product.find(params[:id])
rescue
ActiveRecord::RecordNotFound
logger.error(“Attempt to access invalid product #{params[:id]}” )
redirect_to_index(“Invalid product” )
else
@cart = find_cart
@cart.add_product(product)
end
end

depot_l/app/views/store/index.rhtml
<% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
<%= submit_tag “Add to Cart” %>
<% end %>


zum Inhalt

5. Facebooker

Facebooker Pretutorial

Facebooker offizielles Tutorial

Facebooker-API


zum Inhalt

6. Spickzettel

http://www.addedbytes.com/download/ruby-on-rails-cheat-sheet-v1/png/

 

05/5/13

Perl

================================
bday-perltest
================================

#!/usr/bin/perl
#
# Program to show the next birthdays from a listfile

#parameter
$nextbirthdays = 25;

#Datum bestimmen
($sek, $min, $std, $tag, $mon, $jahr) = localtime(time);
$jahr = $jahr + 1900;
$mon++;
print “$tag $mon $jahr \n”;

$file = ‘birthday.ini’; # Filename zuweisen
open(INFO, $file); # File öffnen

@lines = <INFO>; # alle Zeilen einlesen
$length = @lines; # bestimme Array-Länge

# for ($i = 0; $i < $length; ++$i)

$i = 0;
$count = 0;

while ($count < $nextbirthdays)
{

@record = split(/ /, $lines[$i]); # get day+month
$dayMonth = @record[0]; # get day+month

$birthday = substr($dayMonth, 0, 2); # get birthday
$birthmonth = substr($dayMonth, 3, 2); # get birthmonth

if(
($birthmonth > $mon)
or ( ($birthmonth == $mon) and ($birthday >= $tag) )
or ($count > 0)
)
{
print $lines[$i]; # Zeilen ausgeben
$count++;
# print “count $count\n”;
# print “$i\n”;

}
# print “$i\n”;

if($i >= $length){
$i = 0;
}
else{
$i++;
}
}

close(INFO); # File schliessen

================================
birthday.ini
================================
03.01. 1952 Ma Muster
10.01. 1975 Else
15.01. 1925 Billy Horst
16.01. 0000 Max Molch
24.01. 1978 Klaus Strolch
31.01. 1973 Klaas Clever

05/5/13

MYSQL

Spickzettel

http://kern.comelio.com/downloads/comelio_kurzref_sql_mittel.jpg

Codefragmente

MySQL Shell

:/usr/local/mysql/bin root# ./mysql -u root -p

mysql>_

Standart-Queries

select
SELECT eid, name FROM event WHERE eid = $entry

insert
INSERT INTO event(name,eid) VALUES(‘Pizzaparty’,12332323442)

update
UPDATE event SET name=’Pizzasuperparty’,location=’Am Dorfteich’ WHERE id=12332323442

delete
DELETE FROM event WHERE id=12332323442

 

Quelle: Neal Parikh
Selecting a database:
mysql> USE database;

Listing databases:
mysql> SHOW DATABASES;

Listing tables in a db:
mysql> SHOW TABLES;

Describing the format of a table:
mysql> DESCRIBE table;

Creating a database:
mysql> CREATE DATABASE db_name;
Deleting a database:
mysql> DROP DATABASE db_name;

Creating a table:
mysql> CREATE TABLE table_name (field1_name TYPE(SIZE), field2_name TYPE(SIZE));
Ex: mysql> CREATE TABLE pet (name VARCHAR(20), sex CHAR(1), birth DATE);

Load tab-delimited data into a table:
mysql> LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table_name;
(Use \n for NULL)

Inserting one row at a time:
mysql> INSERT INTO table_name VALUES ('MyName', 'MyOwner', '2002-08-31');
(Use NULL for NULL)

Retrieving information (general):
mysql> SELECT from_columns FROM table WHERE conditions;
All values: SELECT * FROM table;
Some values: SELECT * FROM table WHERE rec_name = "value";
Multiple critera: SELECT * FROM TABLE WHERE rec1 = "value1" AND rec2 = "value2";

Reloading a new data set into existing table:
mysql> SET AUTOCOMMIT=1; # used for quick recreation of table
mysql> DELETE FROM pet;
mysql> LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table;

Fixing all records with a certain value:
mysql> UPDATE table SET column_name = "new_value" WHERE record_name = "value";

Selecting specific columns:
mysql> SELECT column_name FROM table;

Retrieving unique output records:
mysql> SELECT DISTINCT column_name FROM table;

Sorting:
mysql> SELECT col1, col2 FROM table ORDER BY col2;
Backwards: SELECT col1, col2 FROM table ORDER BY col2 DESC;

Date calculations:
mysql> SELECT CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(date_col)) AS time_diff [FROM table];
MONTH(some_date) extracts the month value and DAYOFMONTH() extracts day.

Pattern Matching:
mysql> SELECT * FROM table WHERE rec LIKE "blah%";
(% is wildcard - arbitrary # of chars)
Find 5-char values: SELECT * FROM table WHERE rec like "_____";
(_ is any single character)

Extended Regular Expression Matching:
mysql> SELECT * FROM table WHERE rec RLIKE "^b$";
(. for char, [...] for char class, * for 0 or more instances
^ for beginning, {n} for repeat n times, and $ for end)
(RLIKE or REGEXP)
To force case-sensitivity, use "REGEXP BINARY"

Counting Rows:
mysql> SELECT COUNT(*) FROM table;

Grouping with Counting:
mysql> SELECT owner, COUNT(*) FROM table GROUP BY owner;
(GROUP BY groups together all records for each 'owner')

Selecting from multiple tables:
(Example)
mysql> SELECT pet.name, comment FROM pet, event WHERE pet.name = event.name;
(You can join a table to itself to compare by using 'AS')

Currently selected database:
mysql> SELECT DATABASE();

Maximum value:
mysql> SELECT MAX(col_name) AS label FROM table;

Auto-incrementing rows:
mysql> CREATE TABLE table (number INT NOT NULL AUTO_INCREMENT, name CHAR(10) NOT NULL);
mysql> INSERT INTO table (name) VALUES ("tom"),("dick"),("harry");
mysql> insert into city(name, country, latitude, longitude, radius) values("Dresden","Germany", "51.0416908", "13.7314196", 9059); 

Adding a column to an already-created table:
mysql> ALTER TABLE tbl ADD COLUMN [column_create syntax] AFTER col_name;
mysql> ALTER TABLE location add column eventcounter int(11) NULL after name;
Removing a column: mysql> ALTER TABLE tbl DROP COLUMN col; (Full ALTER TABLE syntax available at mysql.com.) Batch mode (feeding in a script): # mysql -u user -p < batch_file (Use -t for nice table layout and -vvv for command echoing.) Alternatively: mysql> source batch_file; Backing up a database with mysqldump: # mysqldump --opt -u username -p database > database_backup.sql (Use 'mysqldump --opt --all-databases > all_backup.sql' to backup everything.) (More info at MySQL's docs.)
Backup+Restore mit Mysqldump:
backup: # mysqldump -u root -p[root_password] [database_name] [table_name] > dumpfilename.sql

restore:# mysql -u root -p[root_password] [database_name] < dumpfilename.sql
->tablename is not nessessary even if only a table should be restored/added

doppelte Datensätze finden: SELECT COUNT(*) AS COUNT, spalte1, id FROM tabellenname GROUP BY spalte1 HAVING COUNT(*)>1;

Spalte nachträglich unique machen: es dürfen keine Dubletten existieren!
mysql> ALTER TABLE Employee ADD UNIQUE (ID, EmpID);

Neuen User erstellen
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';

Character set einstellen:

show variables like ‘char%’;
set character_set_server=utf8;
set character_set_results=utf8;
set character_set_client=utf8;
set character_set_connection=utf8;

Datum: unixtimestap umwandeln:

SELECT *, FROM_UNIXTIME(time) as realtime
FROM `jos_session`
ORDER BY `time` DESC
LIMIT 30
Ausführliche Beschreibung der Möglichkeiten.
05/5/13

MAC

Mehr aus Leopards Quicklook herausholen

Screenshots erstellen

CMD (Apfel)+Shift+3 Speichert den gesamten Bildschirm in einer Datei.
CMD (Apfel)+ctrl+Shift+3 Speichert den gesamten Bildschirm in der Zwischenablage.
CMD (Apfel)+Shift+4 Speichert den gewählten Bereich in einer Datei.
CMD (Apfel)+ctrl+Shift+4 Speichert den gewählen Bereich in der Zwischenablage.
CMD (Apfel)+Shift+4, danach Leertaste Speichert ein gewähltes Element und speichert dieses als Datei.
CMD (Apfel)+ctrl+Shift+4, danach Leertaste Speichert ein gewähltes Element und speichert dieses in der Zwischenablage.

Wireshark installieren