Code Snippets Plattform

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Code Snippets Plattform

    Wie bereits in einem anderen Thread erwähnt, muß ich für eine Lehrveranstaltung in meinem Studium eine Seminararbeit über Code Snippets Plattformen im Internet erstellen und einen Prototyp einer solchen abgeben.
    Ich habe daher inzwischen auch begonnen mich mit Ruby on Rails zu versuchen, was aber bislang nicht sonderlich erfolgreich war. Daher folge ich nun dem Rat von mad und erstelle einen Thread hier und hoffe damit etwas weiter zu kommen.

    Für den Prototypen reichen mir eigentlich erstmal die Basisfunktionalitäten, also Eingabe und Speicherung (als Datenbank hab ich an SQLite gedacht) von Code Snippets (Felder für Sprache, Tags, kurze Beschreibung und natürlich den Code reichen da wohl) sowie eine Suchfunktion. Ein nettes Feature wäre Syntax Highlighting, aber nur dann wenn es einfach umzusetzen ist, da mir leider die Zeit bereits sehr knapp wird und ich bislang ja mit Eclipse und Radrails noch überhaupt nichts zum laufen bekomme. Das ist bei eclipse für mich aber nichts neues, damit bin ich schon bei Java nie zurecht gekommen. Falls also jemand eine einfacher zu bedienende Entwicklungsumbebung (oder reicht für Ruby On Rails vielleicht sogar ein Texteditor?) weiß, nehme ich auch diese Vorschläge dankend an.

    Meine erste Frage ist also nun, wie fange ich das mit dem Prototypen am besten an. Viel weiter als in der Console ein neues Ruby Projekt anzulegen bin ich bislang nicht gekommen, jedenfalls nicht so, das das was ich gemacht habe dann auch funktioniert hätte.

    Vielen Dank für Eure Hilfe

    LG
    Erich

    Edit: Was ich noch hinzufügen sollte, ist, dass ich bislang leider nur über wenig Programmiererfahrung verfüge, viel mehr als Grundkenntnisse in C und eingeschränkt auch Java kann ich nicht bieten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Erich88 ()

  • Ich persönlich empfehle dir Netbeans als IDE. Das ist aber Geschmackssache. Ich selbst bin mit Eclipse auch nie wirklich klar gekommen. Viel zu viele Plugins, die wiederum von Plugins abhängen usw.
    Wenn du das Netbeans-Ruby-Paket runterlädst, hast du gute Chancen schnell in Fahrt zu kommen. Die Rails-Kommandos kannst du in Netbeans oder in der Kommandozeile ausführen, wenn du unter Linux oder Mac arbeitest, würd ich es in der Kommandozeile machen. In Windows macht sich die cmd oder PowerShell bisschen schlecht, daher ist Netbeans dein Anlaufpunkt.

    Ja, wie beginnt man nun mit einem Prototypen? An sich brauchst du erstmal für jedes Feature eine MVC-Repräsentation.
    Dein Hauptfeature ist ja das Speichern von CodeSnippets. Also brauchst du erstmal ein Model, was deine Snippets repräsentiert. Idealerweise nennst du es CodeSnippet.

    Quellcode

    1. script/generate model CodeSnippet

    legt dir ein neues Model an. Wenn du gleich den Controller und die Views anlegen willst, schau dir mal script/generate scaffold an. Starten tut man aber mit dem Model.
    Bei Rails ist die Herangehensweise z.B. so:
    1. Model anlegen
    2. Model in den Migrations beschreiben
    3. Migration auf der DB ausführen (DB muss vorher angelegt werden, am besten mit rake db:create)
    4. Model in script/console testen (einfach mal ein neues Objekt anlegen und mit objekt.save speichern)
    5. Controller-Actions programmieren
    6. index-action: Anzeige, wenn der Controller aufgerufen wird. Hier kannst du einfach eine Übersichtsseite basteln. Ich würde erstmal nur einen Link auf die New-Action bauen
    7. new-action: Hier legst du dir ein neues Objekt als Instanzvariable (mit führendem @) an, das ist dann in der View verfügbar
    8. template für die new-action: /views/deinController/new.html.erb (oder new.erb) anlegen und ein html-formular reinbauen (auf die Rails-Helper kann man später eingehen)
    9. create-action: an diese Action wird das Formular geschickt. über die Variable params kannst du auf die Werte zugreifen und das Objekt in der Datenbank speichern.
    10. andere Methoden: edit, delete, destroy usw.
    11. Überlegungen für das nächste Feature angehen

    Als Literatur empfehle ich dir openbook.galileocomputing.de/ruby_on_rails/
    Dort ist ein Beispiel enthalten, was die oben genannten Schritte mit Code hinterlegt. Das brauchst du erst einmal nur anzupassen.

    Auf welchem OS, mit welchem Rails und mit welchem Ruby arbeitest du?

    Ok, beginnen wir mit Schritt 2 (Schritt 1 ist ja nur das Anlegen der Dateien)
    Welche Eigenschaften soll dein Objekt CodeSnippet haben? Ich denke da z.B. an title(string), content(string), author(string), language(string), public(boolean) etc.
    Diese beschreibst du dann in der Migration.

    Wenn du da Probleme hast, gib Bescheid, ich helfe dir gern.
  • Vielen Dank für deine Hilfe, die ersten 3 Punkte sind mir bislang gelungen, mit 4. hänge ich gerade ein wenig, muß mir erstmal ansehen wie das mit dem Objekte anlegen und speichern funktionoert.

    Das OS auf dem Laptop ist Windows Vista (Windows 7 hab ich zwar schon, aber im Moment einfach nicht die Zeit den Laptop neu aufzusetzen), Rails ist Version 2.3.5 und Ruby ist Version 1.8.6.
    Das hab ich vor ca. ein oder zwei Monaten installiert, sollte also einigermaßen aktuell sein denke ich.

    LG
  • Vielen Dank, ich poste mal meine Migration:

    Quellcode

    1. class CreateCodeSnippets < ActiveRecord::Migration
    2. def self.up
    3. create_table :code_snippets do |t|
    4. t.column :title, :string, :null => false
    5. t.column :tags, :string
    6. t.column :author, :string
    7. t.column :language, :string, :null => false
    8. t.column :content, :string, :null => false
    9. t.column :public, :boolean, :null => false
    10. t.timestamps
    11. end
    12. end
    13. def self.down
    14. drop_table :code_snippets
    15. end
    16. end
    Alles anzeigen
  • Ok, nehmen wir an, du willst ein Objekt in der IRB (script/console) anlegen und speichern

    Quellcode

    1. # ausführlich
    2. cs = CodeSnippet.new
    3. cs.title = "Toller Ruby-Code"
    4. cs.tags = "ruby, rails, irgendwas"
    5. cs.author = "Me, alway me"
    6. cs.language = "ruby"
    7. cs.content = " puts 'toller Ruby Code' "
    8. cs.public = true
    9. # noch einmal das Objekt anschauen
    10. puts cs
    11. res = cs.save
    12. # ternärer Operator -> Short IF
    13. # Lange Version: if(res)...
    14. res ? "Erfolgreich gespeichert" : "Fehler beim Speichern"
    Alles anzeigen


    Beim Speichern aus einem Formular ist es etwas einfacher. Da kannst du einfach die ankommenden Parameter nutzen um das Objekt anzulegen:

    Quellcode

    1. cs = CodeSnippet.new(params['code_snippet'])
    2. #@msg kann dann in der View verwendet werden
    3. @msg = cs.save ? "Erfolreich" : "Nicht erfolgreich"


    Wenn du noch weitere Probleme hast, gib Bescheid. Das bekommen wir schon hin.
    Wie weit bist du denn jetzt?
  • Leider funktioniert das mit der Konsole bei mir nicht.
    cs läßt sich zwar anlegen, bei der Zuweisung des Titels bekomme ich aber die Fehlemeldung, daß die Methode 'title=' undefiniert ist. Irgendwas hab ich also offenbar vergessen oder falsch gemacht. :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Erich88 ()

  • Hast du denn die Datenbank angelegt und die Migration auch ausgeführt? Wenn nicht, kannst du das mit rake db:create bzw. rake db:migrate machen.

    Falls du das hast, erstell doch mal ein Objekt und lass dir mit obj.inspect die Eigenschaften ausgeben. Du kannst überigens mit obj.methods auf die Methoden zugreifen. Vielleicht hast du nur einen Schreibfehler drin.
    Wenn dir die Methoden etwas unübersichtlich sind, kannst du sie filtern: "obj.methods.sort - 1.methods" gibt dir alle "eigenen" Methoden des Objekts zurück, also nur die, die du definiert hast.

    Ansonsten poste doch mal die Ausgabe aus der Konsole, dann wird das ganze etwas klarer.
  • Die Datenbank hatte ich vorher angelegt und mit migrate die Migration umgesetzt und das auch nachher nochmal probiert, aber da keine Änderungen in der migration waren wurde natürlich nix gemacht. Ich habe dann mit rake db:mirate VERSION=0 die db wieder zurückgesetzt, nochmals die migration ausgeführt ohne was zu ändern und plötzlich hat es funktioniert. Ich konnte das Objekt anlegen und speichern.
    Jetzt komme ich also zu Punkt 5, den Controller Actions, wobei mir da im Moment nicht ganz klar ist, was damit gemeint ist.

    Erneut vielen Dank, langsam fange ich sogar an zu verstehen, was da in dem Projekt vor sich geht und wie RoR funktioniert.
  • Oh gut!
    Naja mit Punkt 5 ist folgendes gemeint:
    Du hast jetzt dein Model erfolgreich getestet und willst nun natürlich eine Webanwendung daraus machen. Also musst du die getestete Funktionalität auch in MVC beschreiben, die Models hast du schon, nun kommen also noch die Views und die Controller. Vor allem brauchst du die (Controller-)Methoden (auch Actions genannt) index, show, new, create, edit, update, delete, destroy. Ein durchgehendes Beispiel findest du in dem oben genannten Buch in Kapitel 5.

    Jede Action führt zu einer View. So wird z.B. bei der index-Action automatisch nach einer View namens index.html.erb oder index.erb gesucht. In der View beschreibst du die Oberfläche, in der dazugehörigen Controller-Action die Funktionalität.
    Die Views haben dann ungefähr folgenden Inhalt
    index -> Auflisten deiner Models, also z.B. eine Liste mit 10 Code Snippets
    show -> Anzeige eines bestimmten Code Snippets (z.B. mit der ID 1)
    new -> Anzeige eines Formulars zum Erstellen eines neuen Code Snippets (wohl deine Hauptfunktionalität)
    create -> Anzeige, ob deine neu erstellte View erfolgreich gespeichert wurde oder nicht
    edit -> Editieren eines bestimmten Code Snippets
    update -> Anzeige, ob das Editieren eines Code Snippets erfolgreich war oder nicht
    delete -> Anzeige einer Nachfrage, ob das ausgewählte Code Snippet wirklich gelöscht werden soll
    destroy -> Anzeige, ob das Löschen des Code Snippets in der DB erfolgreich war oder nicht

    die Actions haben dann z.B. folgende Funktionalitäten:
    index -> Holt eine Liste von x Einträgen von CodeSnippets aus der DB und speichert die Liste in einer Variable, die von der View genutzt werden kann (mit führendem @)
    show -> Holt ein spezielles Code Snippet, die ID des Snippets wird in der URL übergeben und steht im Parameter-Hash params zur Verfügung, Übergabe des Snippets an die View (@variable)
    new -> Anlegen eines Leeren Code Snippets (CodeSnippet.new), Übergabe an die View
    create -> Parameter-Hash auswerten und Objekt in DB speichern, Erfolgsnachricht an View übergeben
    edit -> Holen eines speziellen Code Snippets, auch hier steht die ID z.B. in der URL und somit im paramer-Hash, Übergabe des speziellen Snippets an die View
    update -> Parameter-Hash auswerten und schon existierendes Snippet in der DB updaten, Erfolgsnachricht an View übergeben
    delete -> Zu löschendes Code Snippet aus der DB holen, an View übergeben
    destroy -> Parameter-Hash auswerten und übergebenes Code Snippet aus der DB löschen, Ergebnisnachricht an View übergeben.

    Das ist jetzt vielleicht ein bisschen viel auf einmal, aber in dem Galileo-Buch findest du ein gutes Beispiel, wo du dir die von mir beschriebenen Sachen mal anhand von Beispielen anschauen kannst.
  • Das Beispiel war wirklich sehr hilfreich.
    Mittlerweile kann ich Code Snippets über ein Formular abspeichern, eine Liste aller Einträge in der Datenbank anzeigen und diese Einträge im Detail anzeigen, editieren oder löschen.
    Als nächstes müßte wohl die Suchfunktion dazukommen, dann wäre glaube ich mal das wichtigste Erledigt. Syntax Highlighting wäre ein netter Bonus, scheint mir aber recht kompliziert zu sein.
  • Na das klingt doch schon mal sehr erfolgreich. Ja, als nächstes kommen dann die Feinheiten. Willst du denn noch eine Nutzerverwaltung einbauen oder sieht dein Prototyp das erst einmal nicht vor?

    Gibt es denn keine Library, die man fürs Highlighting nutzen kann? Das kann ich mir kaum vorstellen. Gleich mal schauen =)
    EDIT: Na wusst ichs doch! Vielleicht schaust du dir mal diese Bibliothek an: coderay.rubychan.de/
    Wenn du nicht weißt, wie man mit gems umgeht, dann melde dich. Das ist eigentlich recht einfach.
  • Erich88 schrieb:

    ... und ich bislang ja mit Eclipse und Radrails noch überhaupt nichts zum laufen bekomme. Das ist bei eclipse für mich aber nichts neues, damit bin ich schon bei Java nie zurecht gekommen. Falls also jemand eine einfacher zu bedienende Entwicklungsumbebung (oder reicht für Ruby On Rails vielleicht sogar ein Texteditor?) weiß, nehme ich auch diese Vorschläge dankend an.


    Hallo Erich88 also als IDE kann ich Geany nur empfehlen klein, schnell, schlank ohne Schnickschnack

    geany.org/
  • Vielen Dank für die vielen Antworten

    @mad
    Vielen Dank für den Tipp, das sieht wirklich gut aus und wäre natürlich praktisch. Ich muß mal schauen ob ich das irgendwie einbauen kann. Mit Gems kenne ich mich leider noch nicht so aus, wird aber hoffentlich nicht so schwierig sein.

    An eine Userverwaltung hatte ich gar nicht mehr gedacht, es wäre aber sicherlich sinnvoll eine einzubauen. Ich denke, dass dafür nicht viel mehr als eine zweite Tabelle in der die Userdaten gespeichert sind benötigt wird. Ansonsten muss natürlich die index-Seite geändert werden, aber da muss ich die vorhandene eh nur umbenennen, genauso wie alles was damit zusammenhängt. Als nächstes werd ich aber wohl die Suchfunktion in Angriff nehmen so ich rausfinde wie das funktioniert.


    @ducky_boy
    Mit Linux kenne ich mich leider überhaupt nicht aus, ich habe bislang immer nur Windows verwendet. Von Linux weiß ich nicht viel mehr als das es existiert, für Mac OS gilt eigentlich ähnliches.

    Vielen Dank für die Links, highlight werde ich mir auch ansehen und die Ruby Toolbox ist sicherlich sehr praktisch. Das erleichtert das Suchen in Zukunft sicherlich.

    @Cooc
    Danke für den Tipp, ist wahrscheinlich einen Blick wert falls ich mich in Zukunft weiter mit RoR beschäftige. Irgendwie gefällt mir das Framework bislang recht gut.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Erich88 ()

  • Joa,

    du kannst relativ einfach eine Userverwaltung einbauen. Allerdings müsstest du dich dann noch um Sachen wie Authentifizierung etc. kümmern.
    Ich würde mich an deiner Stelle aber auch auf die Suchfunktion konzentrieren, da kannst du noch Boden gut machen. Ich meine, dass eine Userverwaltung relativ trivial ist. Eine Suchfunktion kann aber interessante Funktionalität haben...

    Die Arbeit mit gems ist eigentlich sehr einfach. Du installierst das gem (gem install 'gemname' oder direkt im Netbeans), bindest du es ein und benutzt es. Fertig =)
  • Diesmal bin ich leider nicht so gut vorangekommen wie zuvor, das Beispiel war eben doch eine sehr große Hilfe. Daher hab ich jetzt ein paar Fragen, vielleicht könnt ihr mir da ja auch wieder weiterhelfen. Ich sag schon mal im Voraus Danke!

    Für die Userverwaltung bin ich in dem Galileobuch auf restful authentication gestoßen, habe das aber nicht so installieren können wie es dort beschrieben ist weil er mir immer sagt, dass es nicht gefunden werden kann.
    Ist restful authentication zu empfehlen oder gibt es noch andere (bessere bzw. einfachere) Plugins?

    Das mit dem Gem für das Syntax Highlighting werde ich dann morgen probieren, ich hoffe es klappt und ich kann es dann auch irgendwie einbinden, dass es auch funktioniert.

    Für die Suchfunktion hab ich heute eine weile gegoogled und ein paar Dinger gefunden, die mir aber viel zu komplex erscheinen für das was ich will. Ich brauche ja keine Suche in ganzen Dokumenten oder ähnliches, sondern nur in der Tabelle die Tags und Sprache durchsuchen und dann die anzeigen wo das vorkommt.
    Für die Sprache hätte ich eigentlich gerne eine Dropdown Box zur Auswahl gehabt, das scheint aber in RoR nicht so einfach zu gehen wie in Java Swing (das ich in Java mal was einfach finden würde hätte ich allerdings auch nie gedacht), jedenfalls konnte ich dazu nix finden. Gibt es da eine einfache Möglichkeit? Ansonsten lasse ich das Textfeld, daß ich eh schon habe.
  • Also ein Select-Feld für die Sprachen ist extrem einfach. Je nachdem, wie und wo du deine Sprachen gespeichert hast, kannst du ein Select-Feld erzeugen. Schau dir dazu einfach mal den Select-Tag und den Options-For-Select Helper an. Damit kannst du gut Select-Felder zusammenstellen.

    Was genau funktioniert denn mit Restful Auth nicht? eröffne bitte dafür einen extra Thread. Danke =)

    Ja, dann fang doch erstmal mit einer einfachen Suche an. Du kannst sie ja Schritt für Schritt erweitern (z.B. Suchen in Spalten, später dann Suchen in Tags oder so).
  • Bei der Suchfunktion habe ich jetzt die Möglichkeit nach einem Suchbegriff zu suchen. Das Problem ist aber, dass ich 2 Suchbegriffe benötige die in jeweils einer anderen Spalte vorkommen sollen und nur wenn beide vorhanden sind, soll der EIntrag in der Liste aufscheinen.
    Also nur wenn mein Suchbegriff in der Spalte Tags vorkommt und die gewählte Sprache übereinstimmt. Wie kann ich meine Suchfunktion verändern, daß auch das berücksichtigt wird?

    Meine aktuelle Funktion sieht folgendermaßen aus:

    im model code_snippets.rb

    Quellcode

    1. def self.search(query)
    2. search_condition = "%" + query + "%"
    3. find(:all, :conditions => ['tags LIKE ? ', search_condition])
    4. end


    im code_snippets_controller.rb:

    Quellcode

    1. def search
    2. @code_snippets = CodeSnippet.search params[:query]
    3. end


    für den View hab ich einen Partial erstellt der folgendermaßen aussieht:

    Quellcode

    1. <% form_tag :controller => 'code_snippets', :action => 'search', method => 'get' do %>
    2. <%= text_field_tag :search, params[:query], :id => 'search_field' %>
    3. <%= submit_tag "Search", :name => nil %>
    4. <%= link_to_function "Clear", "$('search_field').clear()" %>
    5. <% end %>


    Kann ich das ändern, das auch 2 Begriffe in 2 unterschiedlichen Spalten gesucht werden können oder benötige ich dann ein Plugin?
    Edit: Irgendwas hab ich jetzt wohl verbockt weil auf einmal gar nichts mehr geht und ich eine Fehlermeldung "wrong number of arguments (0 for 1)" für Zeile 1 des View Partials erhalte.

    Danke für den Tipp mit dem Select-Tag, jetzt weiss ich zumindest wonach ich suchen muss. Mit Dropdown Box habe ich bislang nichts finden können. Ich hoffe ich finde jetzt eine einfache Erklärung oder besser noch ein Beispiel, das mir weiter hilft.
    Für die restful authentication habe ich einen eigenen Thread aufgemacht und das Problem genauer beschrieben, ich hoffe das hilft um meine Schwierigkeiten verstehen und hoffentlich lösen zu können.

    lg

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Erich88 ()