robsite

In ruby

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 · ★

rest_in_place

Elegantes In-Place Editor Plugin für Rails. Benutzt jQuery oder Prototype.

Sehr chique: Wenn der Controller schon RESTful aufgebaut ist und auf JavaScript-Anfragen XML zurückschickt, ist die (serverseitige) Arbeit erledigt und es funktioniert einfach.

Gibts Probleme mit jQuery und Rails' Forgery Protection (InvalidAuthenticityToken oder so), hilft es, das hier in den <head> von application.html.erb zu packen:

<%= javascript_tag "var AUTH_TOKEN = #{form_authenticity_token.inspect};" if protect_against_forgery? %>

Und dies hier

$.ajaxSetup({
  beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} 
});

in application.js sorgt dafür, das jQuery die richtigen Header sendet und mit respond_to zusammenarbeitet.

· javascript, jquery, rails, rest, ruby, tool · ★

Developing Cocoa Applications Using MacRuby

Anders als [RubyCocoa](http://rubycocoa.sourceforge.net/HomePage) ist Apples MacRuby eine direkte Implementation von Ruby auf der Objective C Runtime, dem Garbage Collector und Core Foundation. Heißt: schneller, stabiler und Strings sind automatisch UTF-16.

Apples Tutorial gibt einen guten Überblick und führt einen durch die Entwicklung eines kleinen Programms.

· apple, cocoa, mac, programming, ruby · ★
Mastodon