{"id":217,"date":"2011-01-11T09:18:22","date_gmt":"2011-01-11T08:18:22","guid":{"rendered":"https:\/\/thebc.ch\/blog\/?p=217"},"modified":"2013-02-01T13:11:11","modified_gmt":"2013-02-01T12:11:11","slug":"ruby-of-wisdom","status":"publish","type":"post","link":"https:\/\/thebc.ch\/blog\/?p=217","title":{"rendered":"Ruby of wisdom"},"content":{"rendered":"<div class='toc toc'>\n<h2>Contents<\/h2>\n<ul class='toc-odd level-1'>\n\t\t<ul class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Hello.rb\">Hello.rb<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Classes\">Classes<\/a>\n\t\t\t<\/li>\n\t\t<\/ul>\n\t<li>\n\t\t<a href=\"#Methods\">Methods<\/a>\n\t\t<ul class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Variables\">Variables<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Working_with_Numbers\">Working with Numbers<\/a>\n\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Math\">Math<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Working_with_Strings\">Working with Strings<\/a>\n\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#String_Manipulation\">String Manipulation<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n<\/ul>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Data_Structures\">Data Structures<\/a>\n\t\t\t\t<ul class='toc-even level-2'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Working_with_Arrays\">Working with Arrays<\/a>\n\t\t\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Defining_Arrays\">Defining Arrays<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Accessing_Arrays\">Accessing Arrays<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Working_with_Hashes\">Working with Hashes<\/a>\n\t\t\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Defining_Hashes\">Defining Hashes<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Accessing_Hashes\">Accessing Hashes<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Working_with_Hashes_of_Hashes\">Working with Hashes of Hashes<\/a>\n\t\t\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#The_default_proc_Method\">The \"default_proc\" Method<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#The_ostruct_Method\">The \"ostruct\" Method<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n<\/ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Loops\">Loops<\/a>\n\t\t\t\t\t\t<ul class='toc-even level-2'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Counted_Loop\">Counted Loop<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Conditional_Statements\">Conditional Statements<\/a>\n\t\t\t\t\t\t<ul class='toc-even level-2'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#IF_THEN_ELSE\">IF THEN ELSE<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#WHILE\">WHILE<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Methodes_functions\">Methodes (functions)<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Task_specific_solutions\">Task specific solutions<\/a>\n\t\t\t\t\t\t<ul class='toc-even level-2'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Networking\">Networking<\/a>\n\t\t\t\t\t\t\t\t<ul class='toc-odd level-3'>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a href=\"#Banner_grabbing\">Banner grabbing<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a href=\"#Get_MAC_and_IP_from_network_interface\">Get MAC and IP from network interface<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a href=\"#Set_NIC_into_promiscuous_mode\">Set NIC into promiscuous mode<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n<\/ul>\n<\/ul>\n<\/ul>\n<\/div>\n<div class='toc-end'>&nbsp;<\/div>\n<p><a id=\"Hello.rb\" name=\"Hello.rb\"><\/a><\/p>\n<span id=\"Hello.rb\"><h2>Hello.rb<\/h2><\/span>\n<div dir=\"ltr\">\n<pre>#!\/usr\/bin\/ruby\r\n\r\nputs 'Hello World!\"<\/pre>\n<\/div>\n<p><a id=\"Classes\" name=\"Classes\"><\/a><\/p>\n<span id=\"Classes\"><h2>Classes<\/h2><\/span>\n<p>Ruby knows the following classes:<\/p>\n<ul>\n<li>Integer<\/li>\n<li>Float<\/li>\n<li>String<\/li>\n<\/ul>\n<p><a id=\"Methods\" name=\"Methods\"><\/a><\/p>\n<span id=\"Methods\"><h1>Methods<\/h1><\/span>\n<p>A method is something you can do with a class.<\/p>\n<ul>\n<li><strong>foo.to_i<\/strong> convert to integer<\/li>\n<li><strong>foo.to_f<\/strong> convert to float<\/li>\n<li><strong>foo.to_s<\/strong> convert to string<\/li>\n<\/ul>\n<p><a id=\"Variables\" name=\"Variables\"><\/a><\/p>\n<span id=\"Variables\"><h2>Variables<\/h2><\/span>\n<p><strong>Warnung: <\/strong>Variablennamen d\u00c3\u00bcrfen nicht mit einem Gro\u00c3\u0178buchstaben beginnen.<\/p>\n<div dir=\"ltr\">\n<pre>stadt = \"Berlin\"<\/pre>\n<\/div>\n<p><a id=\"Working_with_Numbers\" name=\"Working_with_Numbers\"><\/a><\/p>\n<span id=\"Working_with_Numbers\"><h2>Working with Numbers<\/h2><\/span>\n<p><a id=\"Math\" name=\"Math\"><\/a><\/p>\n<span id=\"Math\"><h3>Math<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>var = var + 2\r\nvar += 2\r\n\r\nvar = var - 3\r\nvar -= 3\r\n\r\nvar = var * 6\r\nvar *= 6\r\n\r\nvar = var \/ 2\r\nvar \/= 2\r\n\r\nvar = var** 3\r\nvar **=3\r\n\r\nvar = var\u00c2\u00a0% 4\r\nvar\u00c2\u00a0%= 4<\/pre>\n<\/div>\n<p><a id=\"Working_with_Strings\" name=\"Working_with_Strings\"><\/a><\/p>\n<span id=\"Working_with_Strings\"><h2>Working with Strings<\/h2><\/span>\n<p><a id=\"String_Manipulation\" name=\"String_Manipulation\"><\/a><\/p>\n<span id=\"String_Manipulation\"><h3>String Manipulation<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>name = name.chomp<\/pre>\n<\/div>\n<div dir=\"ltr\">\n<pre>number = gets.chomp.to_i<\/pre>\n<\/div>\n<p><a id=\"Data_Structures\" name=\"Data_Structures\"><\/a><\/p>\n<span id=\"Data_Structures\"><h1>Data Structures<\/h1><\/span>\n<p><a id=\"Working_with_Arrays\" name=\"Working_with_Arrays\"><\/a><\/p>\n<span id=\"Working_with_Arrays\"><h2>Working with Arrays<\/h2><\/span>\n<p><a id=\"Defining_Arrays\" name=\"Defining_Arrays\"><\/a><\/p>\n<span id=\"Defining_Arrays\"><h3>Defining Arrays<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>item = Array.new\r\n@item = Array.new\r\n\r\n$a = `ls`\r\n=&gt; \"bin\\nDATA\\nDesktop\\nvmware\\n\"\r\n\r\n$a = `ls`.split\r\n=&gt; [\"bin\", \"DATA\", \"Desktop\", \"vmware\"]\r\n\r\nzahlen = [ \"null\", \"eins\", \"zwei\", \"drei\", \"vier\" ]<\/pre>\n<\/div>\n<p><a id=\"Accessing_Arrays\" name=\"Accessing_Arrays\"><\/a><\/p>\n<span id=\"Accessing_Arrays\"><h3>Accessing Arrays<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>zahlen = [ \"null\", \"eins\", \"zwei\", \"drei\", \"vier\" ]\r\n\r\nzahlen.lenght        # Anzahl der Array-Elemente<\/pre>\n<\/div>\n<div dir=\"ltr\">\n<pre>freunde = [\"Jim\", \"Jeff\", \"Tim\", \"Rob\"]\r\n\r\nfreunde.each do |freund|\r\n    puts \"Ich habe einen Freund, der \" + freund + \" hei\u00c3\u0178t\"\r\nend\r\n\r\n# same as\r\n\r\n4.times do |i|\r\n    puts \"Ich habe einen Freund, der \" + freunde[i] + \" hei\u00c3\u0178t\"\r\nend\r\n\r\n# same as\r\n\r\nfreunde.length.times do |i|  # 'i' f\u00c3\u00bcr 'index'.\r\n  puts \"Ich habe einen Freund, der \" + freunde[i] + \"hei\u00c3\u0178t\"\r\nend<\/pre>\n<\/div>\n<p><a id=\"Working_with_Hashes\" name=\"Working_with_Hashes\"><\/a><\/p>\n<span id=\"Working_with_Hashes\"><h2>Working with Hashes<\/h2><\/span>\n<p><a id=\"Defining_Hashes\" name=\"Defining_Hashes\"><\/a><\/p>\n<span id=\"Defining_Hashes\"><h3>Defining Hashes<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>data = Hash.new\r\n\r\nfreund = {\r\n  \"vorname\"    =&gt; \"Herbert\",\r\n  \"nachname\"   =&gt; \"Maier\",\r\n  \"adresse\"    =&gt; \"Auf Maien 69\",\r\n  \"stadt\"      =&gt; \"Neunkirchen\",\r\n  \"bundesland\" =&gt; \"Saarland\"\r\n}<\/pre>\n<\/div>\n<p><a id=\"Accessing_Hashes\" name=\"Accessing_Hashes\"><\/a><\/p>\n<span id=\"Accessing_Hashes\"><h3>Accessing Hashes<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>freund.each do |key, value|\r\n  puts key + \" =&gt; \" + value\r\nend\r\n\r\n# same as\r\n\r\nfreund.each_key do |key|\r\n  puts freund[key]\r\nend<\/pre>\n<\/div>\n<div dir=\"ltr\">\n<pre>freund.each_key do |key|\r\n  puts key\r\nend<\/pre>\n<\/div>\n<div dir=\"ltr\">\n<pre>h = { \"a\" =&gt; 100, \"b\" =&gt; 200 }\r\nh.each_pair {|key, value|\r\n  puts \"#{key} is #{value}\"\r\n}\r\n=&gt; a is 100\r\n=&gt; b is 200<\/pre>\n<\/div>\n<p><a id=\"Working_with_Hashes_of_Hashes\" name=\"Working_with_Hashes_of_Hashes\"><\/a><\/p>\n<span id=\"Working_with_Hashes_of_Hashes\"><h2>Working with Hashes of Hashes<\/h2><\/span>\n<p>Creating HOH in Ruby is a bit quiet strange IMHO.<\/p>\n<p><a id=\"The_.22default_proc.22_Method\" name=\"The_.22default_proc.22_Method\"><\/a><\/p>\n<span id=\"The_8220default_proc8221_Method\"><h3>The &#8220;default_proc&#8221; Method<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>int = Hash.new{|h,k| h[k]=Hash.new &amp;h.default_proc}\r\nint[:eth0][:ip]   = \"10.0.0.1\"\r\nint[:eth0][:mask] = \"255.255.255.0\"\r\nint[:eth0][:cidr] = \"24\"\r\nint[:eth1][:ip]   = \"10.0.1.1\"\r\nint[:eth1][:mask] = \"255.255.255.0\"\r\nint[:eth1][:cidr] = \"24\"\r\n\r\nputs \"IP of eth0 is:\"+int[:eth0][:ip]<\/pre>\n<\/div>\n<p><a id=\"The_.22ostruct.22_Method\" name=\"The_.22ostruct.22_Method\"><\/a><\/p>\n<span id=\"The_8220ostruct8221_Method\"><h3>The &#8220;ostruct&#8221; Method<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>require 'ostruct'\r\n\r\nint = Hash.new{|h,k| h[k]=OpenStruct.new}\r\n\r\nint[:eth0].ip   = \"10.0.0.1\"\r\nint[:eth0].mask = \"255.255.255.0\"\r\nint[:eth0].cidr = \"24\"\r\nint[:eth1].ip   = \"10.0.1.1\"\r\nint[:eth1].mask = \"255.255.255.0\"\r\nint[:eth1].cidr = \"24\"\r\n\r\nputs int[:eth1].cidr<\/pre>\n<\/div>\n<p><a id=\"Loops\" name=\"Loops\"><\/a><\/p>\n<span id=\"Loops\"><h1>Loops<\/h1><\/span>\n<p><a id=\"Counted_Loop\" name=\"Counted_Loop\"><\/a><\/p>\n<span id=\"Counted_Loop\"><h2>Counted Loop<\/h2><\/span>\n<div dir=\"ltr\">\n<pre>count = 0\r\n5.times do\r\n    count += 1\r\n    puts \"count = \" + count.to_s\r\nend<\/pre>\n<\/div>\n<pre>count = 1\r\ncount = 2\r\ncount = 3\r\ncount = 4\r\ncount = 5<\/pre>\n<div dir=\"ltr\">\n<pre>count = sum = 0\r\n11.times do\r\n  count += 1\r\n  sum += count\r\n  puts \"Summe to \" + count.to_s + \" = \"+ sum.to_s\r\nend<\/pre>\n<\/div>\n<pre>Summe to 1 = 1\r\nSumme to 2 = 3\r\nSumme to 3 = 6\r\nSumme to 4 = 10\r\nSumme to 5 = 15\r\nSumme to 6 = 21\r\nSumme to 7 = 28\r\nSumme to 8 = 36\r\nSumme to 9 = 45\r\nSumme to 10 = 55\r\nSumme to 11 = 66<\/pre>\n<div dir=\"ltr\">\n<pre>count=10\r\ncount.times do\r\n  count-=1\r\n  puts count.to_s\r\nend<\/pre>\n<\/div>\n<pre>9\r\n8\r\n7\r\n6\r\n5\r\n4\r\n3\r\n2\r\n1\r\n0<\/pre>\n<p><a id=\"Conditional_Statements\" name=\"Conditional_Statements\"><\/a><\/p>\n<span id=\"Conditional_Statements\"><h1>Conditional Statements<\/h1><\/span>\n<p><a id=\"IF_THEN_ELSE\" name=\"IF_THEN_ELSE\"><\/a><\/p>\n<span id=\"IF_THEN_ELSE\"><h2>IF THEN ELSE<\/h2><\/span>\n<div dir=\"ltr\">\n<pre>stadt=\"zh\"\r\nif stadt == \"Berlin\"\r\n   drinking_age = 18\r\nelse\r\n   drinking_age = 21\r\nend<\/pre>\n<\/div>\n<p><a id=\"WHILE\" name=\"WHILE\"><\/a><\/p>\n<span id=\"WHILE\"><h2>WHILE<\/h2><\/span>\n<div dir=\"ltr\">\n<pre>count=0\r\nwhile count &lt; 10\r\n  puts \"count = \" + count.to_s\r\n  count +=1\r\nend<\/pre>\n<\/div>\n<p><a id=\"Methodes_.28functions.29\" name=\"Methodes_.28functions.29\"><\/a><\/p>\n<span id=\"Methodes_functions\"><h1>Methodes (functions)<\/h1><\/span>\n<p>Methodes are in Ruby what you would call a function in Bash or Perl.<\/p>\n<p>A simple Methode looks like:<\/p>\n<div dir=\"ltr\">\n<pre>def showme(message)\r\n  puts message\r\nend\r\n\r\nmessage=\"ruby says hello\"\r\nshowme(message)<\/pre>\n<\/div>\n<p><a id=\"Task_specific_solutions\" name=\"Task_specific_solutions\"><\/a><\/p>\n<span id=\"Task_specific_solutions\"><h1>Task specific solutions<\/h1><\/span>\n<p><a id=\"Networking\" name=\"Networking\"><\/a><\/p>\n<span id=\"Networking\"><h2>Networking<\/h2><\/span>\n<p><a id=\"Banner_grabbing\" name=\"Banner_grabbing\"><\/a><\/p>\n<span id=\"Banner_grabbing\"><h3>Banner grabbing<\/h3><\/span>\n<div dir=\"ltr\">\n<pre># Lets try a simple banner grabber in ruby\r\n#\r\nrequire 'socket'\r\nsocket = TCPSocket.new(\"www.heise.de\", \"80\")\r\nsocket.write(\"GET \/ HTTP\/1.0\\n\\n\")\r\nprint socket.read + \" - soso \\n\"<\/pre>\n<\/div>\n<p><a id=\"Get_MAC_and_IP_from_network_interface\" name=\"Get_MAC_and_IP_from_network_interface\"><\/a><\/p>\n<span id=\"Get_MAC_and_IP_from_network_interface\"><h3>Get MAC and IP from network interface<\/h3><\/span>\n<div dir=\"ltr\">\n<pre>require 'socket'\r\n\r\n# From bits\/ioctls.h\r\nSIOCGIFHWADDR  = 0x8927          # Get hardware address\r\nSIOCGIFADDR    = 0x8915          # get PA address\r\n\r\nclass String\r\n\tdef to_ipaddr4\r\n\t\tself.unpack(\"CCCC\").join(\".\")\r\n\tend\r\n\tdef to_etheraddr\r\n\t\tself.unpack(\"H2H2H2H2H2H2\").join(\":\")\r\n\tend\r\nend\r\n\r\nclass Interface\r\n\r\n\tdef self.hw_address(iface)\r\n\t\tsock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0)\r\n\t\tbuf = [iface,\"\"].pack('a16h16')\r\n\t\tsock.ioctl(SIOCGIFHWADDR, buf);\r\n\t\tsock.close\r\n\t\treturn buf[18..24].to_etheraddr\r\n\tend\r\n\r\n\tdef self.ip_address(iface)\r\n\t\t#sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0)\r\n\t\tsock = UDPSocket.new\r\n\t\tbuf = [iface,\"\"].pack('a16h16')\r\n\t\tsock.ioctl(SIOCGIFADDR, buf);\r\n\t\tsock.close\r\n\t\t# Another way\r\n\t\t# Socket::unpack_sockaddr_in(buf[16..256])[1]\r\n\t\tbuf[20..24].to_ipaddr4\r\n\tend\r\n\r\nend\r\n\r\nif $0 == __FILE__\r\n\tputs Interface.hw_address('eth0')\r\n\tputs Interface.ip_address('eth0')\r\nend<\/pre>\n<\/div>\n<p><a id=\"Set_NIC_into_promiscuous_mode\" name=\"Set_NIC_into_promiscuous_mode\"><\/a><\/p>\n<span id=\"Set_NIC_into_promiscuous_mode\"><h3>Set NIC into promiscuous mode<\/h3><\/span>\n<p>You have to install the bit-struct library from: <a title=\"http:\/\/raa.ruby-lang.org\/project\/bit-struct\/\" href=\"http:\/\/raa.ruby-lang.org\/project\/bit-struct\/\" rel=\"nofollow\">http:\/\/raa.ruby-lang.org\/project\/bit-struct\/<\/a><\/p>\n<p><strong>Installation:<\/strong><\/p>\n<div dir=\"ltr\">\n<pre>tar xvfz bit-struct-0.10.tgz\r\ncd bit-struct-0.10\r\nruby install.rb config\r\nruby install.rb setup\r\nsudo ruby install.rb install<\/pre>\n<\/div>\n<div dir=\"ltr\">\n<pre>require 'socket'\r\nrequire 'bit-struct'\r\n\r\nAF_PACKET = 17\r\nETH_P_ALL = 3\r\n\r\n# From bits\/socket.h\r\nSOL_PACKET = 263\r\n\r\n# From netpacket\/packet.h\r\nPACKET_ADD_MEMBERSHIP  = 1\r\nPACKET_MR_PROMISC      = 1\r\n\r\n# Equivalent C htons function\r\ndef htons(h)\r\n  [h].pack(\"S\").unpack(\"n\")[0]\r\nend\r\n\r\n# Struct in linux\/if_packet.h\r\nclass MReq &lt; BitStruct\r\n\tsigned   :mr_ifindex, 32, :endian =&gt; :native\r\n\tunsigned :mr_type, 16, :endian =&gt; :native\r\n\tunsigned :mr_alen, 16, :endian =&gt; :native\r\n\tchar\t\t :mr_address, 64\r\nend\r\n\r\nmreq = MReq.new do |m|\r\n\tm.mr_ifindex = 2\r\n\tm.mr_type = PACKET_MR_PROMISC\r\n\tm.mr_alen = 0\r\n\tm.mr_address = 0\r\nend\r\n\r\nbegin\r\n  ssock = Socket.open(AF_PACKET, Socket::SOCK_RAW, htons(ETH_P_ALL))\r\n\tssock.setsockopt(SOL_PACKET, PACKET_ADD_MEMBERSHIP, mreq)\r\nrescue Errno::EPERM\r\n  $stderr.puts \"Must run #{$0} as root.\"\r\n  exit!\r\nend<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hello.rb #!\/usr\/bin\/ruby puts &#8216;Hello World!&#8221; Classes Ruby knows the following classes: Integer Float String Methods A method is something you can do with a class. foo.to_i convert to integer foo.to_f convert to float foo.to_s convert to string Variables Warnung: Variablennamen &hellip; <a href=\"https:\/\/thebc.ch\/blog\/?p=217\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,15],"tags":[],"class_list":["post-217","post","type-post","status-publish","format-standard","hentry","category-programing","category-ruby"],"_links":{"self":[{"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=217"}],"version-history":[{"count":13,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions"}],"predecessor-version":[{"id":2732,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions\/2732"}],"wp:attachment":[{"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thebc.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}