robsite

In meins

Xewton Music Studio

/images/posts/0000/2080/xewton-music-studio_big.jpg Ich bin grad schwer begeistert von Xewton Music Studio. FĂŒr elektronische Musik und zum Beat-basteln gibts einige gute Tools im AppStore, aber zum komponieren mit klassischen Instrumenten fand ich bisher nichts.
Bis jetzt. FĂŒr den Preis von 6 Dönern bekommt man > 20 gesamplete Instrumente, einen mĂ€chtigen mehrspurigen Sequencer, Effekte und eine brauchbare Klaviertastatur.

Das Interface verpackt die vielen Funktionen so elegant wie es geht auf dem kleinen Bildschirm und ist mit etwas Übung gut zu bedienen. Die Instrumente klingen ausreichend gut, wobei die Gitarren am ĂŒberzeugendsten sind. Das Klavier könnte allerdings bessere Samples vertragen.

Um den Klang der Spuren zu beeinflussen gibts einen 3-Band Equalizer, einen Amplifier der schick verzerrt, Delay, Volume und einen Reverb, der allerdings mehr nach Delay/Echo klingt. Der Sequencer lĂ€sst einen leicht Noten umherschieben, kopieren und quantisieren, wobei er bei langen StĂŒcken etwas schleppend scrollt.

Generell bringt das Music Studio zumindest meinen 2nd Gen. iPod an seine Grenzen. Bei lĂ€ngeren StĂŒcken reagiert das Interface nicht mehr ganz flĂŒssig, wirds komplexer werden mangels Arbeitsspeicher keine Instrumente mehr geladen. Ein Reboot hilft. Hier wĂŒrde sich ein iPhone 3GS lohnen.

Mal davon abgesehen machts einen Mordsspaß und ist fĂŒr eine 1.0er Version sehr stabil. Grad kam Version 1.0.1 mit Bugfixes und MIDI-Export raus, hab ich aber noch nicht getestet.

Screenshots:

Als Demo eine einfache kleine Melodie die grundlos zum Western wird. Music Studio lahmte schon betrĂ€chtlich gen Ende, lĂ€nger hĂ€tte es nicht sein dĂŒrfen.

spaghetti.xms - 36 KB

· meins, iphone, musik, review · ★

Smooth path in canvas

Ich spiel grad mit <canvas> rum und wollte eine Kurve möglichst fließend durch Punkte fĂŒhren:

/images/posts/0000/2068/smooth_path_explanation_big.png

Viele Algorithmen laufen entweder nicht durch jeden Punkt oder setzen voraus, dass man die Pixel selbst malen will, was gerade bei Anti-Aliasing recht mĂŒhselig wird. Ich fand dann einen netten Algorithmus von Jean-Yves QuĂ©inec, der BĂ©zier-Splines so hinbiegt, dass eine durchgehende schöne Kurve entsteht. Manchmal gibts noch leicht merkwĂŒrdige Kurventeile aber insgesamt funktioniert es gut.

Der Code: smooth_path.js

Die Funktion bekommt ein Array von Punkten und erstellt einen Pfad, den man dann selbst malen kann.

  • path - Ein Punkte-Array der Form [{x:0, y:0}, {x:10, y:10}, ...]

  • smoothness - Der Grad der Biegung. 0 glĂ€ttet nichts, 1.05 macht aus einem Quadrat einen Kreis und auch sonst schöne Kurven, alles andere erzeugt lustige Formen.

  • joinPath - Falls true werden die Kurven am Anfang und Ende des Pfades aufeinander ausgerichtet, sodass eine durchgehende Form entsteht, wenn Anfangs- und Endpunkt aufeinander liegen.

  • c - der canvas-Kontext

Wer Fehler findet oder Verbesserungen hat, immer her damit :)

Beispiel:

var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');
var path = [{x: 100, y: 100}, {x: 20, y: 150}, {x: 200, y: 200}, {x: 100, y: 100}];
var smoothness = 1.05;
var joinPath = true;
c.beginPath();
smoothPath(path, smoothness, joinPath, c);
c.stroke();
c.closePath();

Und eine kleine Demo. Per Maus die Punkte setzen, mit dem Slider die smoothness verÀndern.

· meins, canvas, grafik, javascript, jquery · ★

Humanize Array

Kleine Funktion zum schönen ausgeben von Arrays.

# [1, 2, 3] => "1, 2 and 3"
# [1, 2]    => "1 and 2"
# [1]       => "1"
def humanize_array a
  [a[0..-3], [a[-2], a[-1]].compact.join(" and ")].flatten.join(", ")
end
· meins, ruby · ★

Robsite-Entwurf gratis

/images/posts/0000/0850/robsite-entwurf-1_mid.png Das hier war einer der vielen EntwĂŒrfe fĂŒr die neue Robsite. Pixel-perfekt, schön blau, somit bemerkenswert grandios.
Dachte ich.
Bis mich der Hr. Gramberg darauf aufmerksam machte, dass die Seite doch sehr gedrĂŒckt und eng aussieht.
Er hatte leider recht. Somit nahm ich das schlichte Layout des Adminbereichs auch fĂŒr die Front und warf den alten Entwurf weg.

Damit die 2 Wochen Arbeit nicht komplett fĂŒr die Katz sind, veröffentliche ich die alte Seite nun als kleines Weihnachtsgeschenk.

Im Paket sind vier Versionen als Photoshop-Datei sowie die HTML-Umsetzung der letzten Version. Diese validiert, sieht gut aus in Firefox, Safari und Opera und zerbricht spektakulÀr im Internet Explorer, was aber gewollt ist /images/posts/0000/0478/uberhappy_big.png

Das ganze ist zwar unfertig, es gibt kein Druck-Stylesheet, der Footer fehlt etc. aber vielleicht kann jemand was damit anfangen oder fĂŒhlt sich inspiriert.

Lizenz: /images/posts/0000/0856/88x31_big.png (Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0).
Heißt, mach damit was du willst, solange du mir Credits gibst und das verĂ€nderte unter eine Ă€hnlich freie Lizenz stellst. Das "robsite" im Logo muss natĂŒrlich geĂ€ndert werden.

Download: Robsite-Entwurf - 1.1 MB

HTML-Version

/images/posts/0000/0796/robsite-entwurf-2_big.jpg

· meins, webdesign · ★

Robsite.new

Wie vor 44 Monatan angekĂŒndigt ist die neue Robsite nun fertig.
Es ist ein Neuanfang. Ich hab wenig alten Content ĂŒbernommen, hauptsĂ€chlich, weil er mich nicht mehr interessierte oder die Links gestorben sind.

Nach Monaten des Kopfzerbrechens ĂŒber das Konzept der neuen Seite, war mir klar, dass die Robsite eigentlich immer nur ein ordinĂ€res Blog war. Mit Linkarchiv. In Blau. Somit ist die neue Robsite nichts weiter als das. Das dreimilliardste Blog. Mein Blog. ErnĂŒchternd, aber auch befreiend. HĂ€tte deshalb eigentlich Roblog heissen mĂŒssen, aber auf die [Idee](http://www.google.com/search?q=roblog&hl=en) sind auch schon einige tausend Geeks gekommen.

Seit den Tagen der alten Robsite haben sich meine Interessen leicht verschoben. Ich bin von Windows auf Mac gewechselt, interessier mich mehr fĂŒr Ruby und Webentwicklung statt *Basic und Spieleentwicklung und fang langsam an Musik am Rechner zu machen. Dies alles, neben diversem lustigem Zeug, wird also die Seite fĂŒllen. Oder auch nicht. Je nachdem.

Ruby on Rails ist derweil die Technik meiner Wahl um Webzeug zu basteln. In den Semesterferien hab ich mich mit wenig anderem beschÀftigt und die Robsite mit Rails neugebaut. Was ich dabei gelernt hab, werd ich nach und nach hier veröffentlichen. Die neue Seite mag zwar schlicht aussehen, aber der Adminbereich hats in sich. Simpel aber mÀchtig. Wie George W. Bush.

Warum nun Rails statt PHP? Vor allem Spaß. Spaß bei der Arbeit = höhere ProduktivitĂ€t, QualitĂ€t und Motivation. Entweder du schaffst in gleicher Zeit mehr und bessere Ergebnisse, oder du schaffst gleiche Ergebnisse in weniger Zeit. Es ist einfach keine lĂ€stige Arbeit, wenn es Spaß macht. Und das motiviert :>

Bis sich mein Domainhoster auskĂ€st und robsite.de auf meinen neuen Hoster ĂŒbertrĂ€gt, erfolgt die Weiterleitung auf robsite.net mit einer .htaccess. Das heisst, robsite.de wird demnĂ€chst kurz offline gehen. robsite.net sollte aber weiterlaufen, solange mein kleiner vServer bei Slicehost nicht aufgibt.
Andererseits hab ich eh nur noch 3 Besucher pro Tag, also betriffts sowieso keinen (img 358 t:big)

· meins · ★

Ein kleiner Brainfuck Interpreter

Mit Brainfuck-Code fĂŒr Fibonacci-Zahlen. Oh Jubel.

    # brainfuck Interpreter

class Array
    def rtrim empty = 0
        (self.length-1).downto(0) do |a|
            return self[0..a] if self[a] != empty
        end     
        []   
    end
end

class Brainfuck

    attr_accessor :code, :ascii, :debug

    def initialize(code = "", memsize = 30000)
        @code   = code.gsub(/[^.,+-<>[]]/, "")
        @mem    = Array.new(memsize, 0)
        @ascii = true   # In/Output als ASCII oder mit puren Zellwerten arbeiten?
        @debug = false
    end

    def run
        p = 0
        cp = 0
        brackets = []
        while cp < @code.length
            c = @code[cp].chr

            case c 
            when "+"
                @mem[p] += 1
            when "-"
                @mem[p] -= 1
            when ">"
                p += 1
            when "<"
                p -= 1
            when "["
                brackets.push(cp)
            when "]"
                if @mem[p] != 0
                    cp = brackets.pop - 1
                else
                    brackets.pop
                end
            when "."
                if @debug
                    print "p: #{p} cp: #{cp} "
                    p @mem.rtrim
                end
                if @ascii
                    print @mem[p].chr
                else
                   puts @mem[p] 
                end
            when ","
                input = gets
                if @ascii
                    @mem[p] = input[0]
                else
                    @mem[p] = input.to_i
                end
            end    

            cp += 1       
        
        end        
    end
end

# Die ersten 10 Fibonacci-Zahlen: +>++>>>++++++++++[<<<<.>[->+>+<<]>>[-<<+>>]<<<[->+>>+<<<]>>>[-<<<+>>>]<<<[-]>>[<<+>>-]>>-]
# Die ersten n Fibonacci-Zahlen: +>++>>>,[<<<<.>[->+>+<<]>>[-<<+>>]<<<[->+>>+<<<]>>>[-<<<+>>>]<<<[-]>>[<<+>>-]>>-]

code = <<END
+>++>>>,[<<<<.>[->+>+<<]>>[-<<+>>]<<<[->+>>+<<<]>>>[-<<<+>>>]<<<[-]>>[<<+>>-]>>-]
END

bf = Brainfuck.new(code)
bf.ascii = false
bf.debug = false
bf.run
· meins, brainfuck, esoteric programming, ruby · ★
Mastodon