<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>3.times { print "Ruby! " }</title><generator>Tumblr (3.0; @michaelbulat)</generator><link>http://tumblr.crazydogsoftware.com/</link><item><title>Project nearing completion... welcome CredRock!</title><description>&lt;p&gt;The project that I’ve been working on, on-and-off for the last couple years is nearing completion. It’s a full stack software suite for ICANN Accredited Registrars. It’s modern, flexible, and has a RESTful API allowing all kinds of app integration for a Registrar. &lt;/p&gt;
&lt;p&gt;The software design process on this has been a real treat. It’s quite a complex undertaking, including software that communicates with all the various TLD registries, deals with a ton of ICANN requirements, and still manages to focus on a clean user experience and a robust and simple to maintain software stack. Every level of the software is backed up by a full test suite, which should give us the flexibility to roll out support for the upcoming gTLDs quicker than the competition. (and with fewer bugs!)&lt;/p&gt;
&lt;p&gt;We’ve just launched our announcement page at &lt;a href="http://www.credrock.com/"&gt;&lt;span&gt;&lt;a href="http://www.credrock.com"&gt;www.credrock.com&lt;/a&gt;&lt;/span&gt;&lt;/a&gt;. If you’d like to know more and stay up to date as we approach launch, please register on the site. And if you know anyone looking for new software for their Registrar, or just starting their own, send them our way. &lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/11398438229</link><guid>http://tumblr.crazydogsoftware.com/post/11398438229</guid><pubDate>Thu, 13 Oct 2011 12:44:00 -0400</pubDate><category>ICANN</category><category>domain name registrar</category><category>domains</category><category>registrar</category><category>software</category><category>gTLDs</category><category>gTLD</category></item><item><title>Fun with ActiveResource</title><description>&lt;p&gt;So I’ve been using ActiveResource to consume a RESTful Rails API, and had embarked upon setting up forms for the ActiveResource web client. I’m a big fan of &lt;a href="http://github.com/justinfrench/formtastic" target="_blank"&gt;Formtastic&lt;/a&gt;, and have been using that for standard ActiveRecord forms for a while now, and figured I’d go ahead and try it with ActiveResource. &lt;/p&gt;
&lt;p&gt;Well, just like the form_for helper, Formtastic relies on the the attributes specified by the object. With ActiveRecord, the attributes are pulled from the database when the object is initialized.  ActiveResource, on the other hand, generates a pretty plain object upon initialization. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&gt;&gt; User.new()
=&gt; #&lt;User:0x102fd0e00 @prefix_options={}, @attributes={}&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My first instinct was to go ahead and create the attribute accessors in my ActiveResource class by hand. However, as soon as I started typing out all those attributes by hand, I had flash backs of C# and knew I was straying from the Righteous Rails Path to DRY Salvation. (RRPDS)&lt;/p&gt;
&lt;p&gt;I then realized that when scaffolding out REST Resources on the API side, Rails generates methods that serialize a new object to XML, which can be reached at /resource/new.xml. It seemed to me that the whole point of serializing a new object would be to make the attributes discoverable. The &lt;a href="http://api.rubyonrails.org/classes/ActiveResource/Base.html" target="_blank"&gt;Rails docs for ActiveResource&lt;/a&gt;, however, are strangely mum on the finer points of populating the attributes, and all of the examples simply show passing in an attributes hash to the new method. &lt;/p&gt;
&lt;p&gt;So then it suddenly hit me. Since the find(id) method simply makes a GET request to /resource/id, if I passed in ‘new’ as the id, it should do a GET request to the serialized representation of a new object. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&gt;&gt; User.find(:new)
=&gt; #&lt;User:0x102e541a8 @prefix_options={}, 
        @attributes={
           "first_name"=&gt;nil,  
           "last_name"=&gt;nil, ... }&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So now I can simply pass Formtastic a User.find(:new), and I’m back to bathing in the glorious DRY light.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: As of Rails 3.0, calling &lt;code&gt;Model.build()&lt;/code&gt; will do the same thing as &lt;code&gt;Model.find(:new)&lt;/code&gt;. &lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/663488252</link><guid>http://tumblr.crazydogsoftware.com/post/663488252</guid><pubDate>Fri, 04 Jun 2010 10:39:00 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://26.media.tumblr.com/tumblr_l3hqutNvAz1qa8x04o1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://tumblr.crazydogsoftware.com/post/663264851</link><guid>http://tumblr.crazydogsoftware.com/post/663264851</guid><pubDate>Fri, 04 Jun 2010 09:01:40 -0400</pubDate></item><item><title>ZenCoding</title><description>&lt;a href="http://www.downloadsquad.com/2010/04/30/if-you-code-html-zen-coding-will-change-your-life/"&gt;ZenCoding&lt;/a&gt;: &lt;p&gt;Just tried this out in TextMate, and it works a treat. I think this is going to replace my use of HAML.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/568175366</link><guid>http://tumblr.crazydogsoftware.com/post/568175366</guid><pubDate>Mon, 03 May 2010 09:15:06 -0400</pubDate></item><item><title>She and Him - Ridin’ In My Car
Ever feel like they just...</title><description>&lt;embed type="application/x-shockwave-flash" src="http://assets.tumblr.com/swf/audio_player_black.swf?audio_file=http://www.tumblr.com/audio_file/472912831/tumblr_kzuo24fY1H1qa8x04&amp;color=FFFFFF" height="27" width="207" quality="best" wmode="opaque"&gt;&lt;/embed&gt;&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;&lt;strong&gt;She and Him - Ridin’ In My Car&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Ever feel like they just don’t make music like they used to? Well, She and Him really seem to be picking up some of the slack.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://itunes.apple.com/us/album/volume-two/id358850454"&gt;&lt;a href="http://itunes.apple.com/us/album/volume-two/id358850454"&gt;http://itunes.apple.com/us/album/volume-two/id358850454&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/472912831</link><guid>http://tumblr.crazydogsoftware.com/post/472912831</guid><pubDate>Thu, 25 Mar 2010 14:15:00 -0400</pubDate><category>she and him</category><category>music</category><category>oldies</category></item><item><title>Maybe why you don't see recursion used much in Ruby</title><description>&lt;p&gt;You’re also highly likely to hit the stack limit in Ruby with recursion, and I don’t think there’s a simple way to alter the stack size.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jrwest.tumblr.com/post/466077650/maybe-why-you-dont-see-recursion-used-much-in-ruby"&gt;jrwest&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I may be wrong but if my CS classes haven’t left me yet I believe you will find this in all programming languages. Iterative algorithms always run faster than recursive ones.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://swaggadocio.com/post/466026682"&gt;stevegraham&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve become interested in recursion and functional programming lately in the interests of sharpening one’s saw, and was interested to see how recursion performed in Ruby.&lt;/p&gt;
&lt;p&gt;Consider the following code:&lt;/p&gt;
&lt;pre class="brush: ruby;"&gt;require 'benchmark'

def recursive_factorial(n)
  n == 0 ? 1 : n * recursive_factorial(n-1)
end

def iterative_factorial(n)
  (1..n).reduce :*
end

Benchmark.bmbm do |x|
  x.report("recursive:") { 10000.times { recursive_factorial 1000 } }
  x.report("iterative:") { 10000.times { iterative_factorial 1000 } }
end
&lt;/pre&gt;
&lt;p&gt;Yields the following benchmark:&lt;/p&gt;
&lt;pre class="irb"&gt;Rehearsal ----------------------------------------------
recursive:  53.670000   2.560000  56.230000 ( 57.035829)
iterative:  32.540000   2.330000  34.870000 ( 35.629017)
------------------------------------ total: 91.100000sec

                 user     system      total        real
recursive:  77.420000   3.740000  81.160000 ( 88.844745)
iterative:  41.870000   3.200000  45.070000 ( 64.231568)
&lt;/pre&gt;
&lt;p&gt;Considerable difference in performance. The iterative method looks a lot more simple and elegant too in my opinion.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;</description><link>http://tumblr.crazydogsoftware.com/post/467956436</link><guid>http://tumblr.crazydogsoftware.com/post/467956436</guid><pubDate>Tue, 23 Mar 2010 09:35:52 -0400</pubDate></item><item><title>(via fuckyeahcomputerscience)
Check out Kryder’s...</title><description>&lt;img src="http://26.media.tumblr.com/tumblr_kzmout7YwC1qav3jwo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;(via &lt;a href="http://fuckyeahcomputerscience.tumblr.com/"&gt;fuckyeahcomputerscience&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Check out &lt;a title="Kryder's Law" target="_blank" href="http://www.scientificamerican.com/article.cfm?id=kryders-law"&gt;Kryder’s Law&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I remember when I couldn’t imagine filling up the 40 MB hard drive on my Amiga. &lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/465634906</link><guid>http://tumblr.crazydogsoftware.com/post/465634906</guid><pubDate>Mon, 22 Mar 2010 09:40:00 -0400</pubDate></item><item><title>When was the last time you saw a real computer screen in a...</title><description>&lt;img src="http://30.media.tumblr.com/tumblr_kz0q50nqd51qa8x04o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;When was the last time you saw a real computer screen in a movie? Usually in movies we get some dumbed down looking operating system, or some totally unreal user interface, like flying through a 3D city to access a file. I’m sure even in the far off future, navigating a 3D virtual world will not be an efficient user interface for most computer systems.&lt;/p&gt;
&lt;p&gt;So it was with great joy that I watched the &lt;a target="_blank" href="http://www.program-glitch-esc.net/"&gt;latest Tron trailer&lt;/a&gt;. If you pause it at the moment Flynn’s son sits down at the computer terminal, you’ll see a real looking NIX operating system, as can be seen above. You’ll notice that both iostat and top can be seen running. The version name in the screen is “Solar OS 4.0.1” which as far as I know is a made up system, but is probably a play on SunOS and Solaris. Additionally, the platform name says “sun4m” which would make it a SPARC workstation, which would make sense if this is a 20 year old system.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/436871172</link><guid>http://tumblr.crazydogsoftware.com/post/436871172</guid><pubDate>Tue, 09 Mar 2010 09:12:00 -0500</pubDate><category>tron</category><category>computers</category><category>operating systems</category></item><item><title>Silly User</title><description>&lt;p&gt;&lt;a href="http://clientsfromhell.tumblr.com/post/413281458/a-client-called-complaining-that-she-couldnt"&gt;clientsfromhell&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A client called complaining that she couldn’t access the company website. When I get there, this is what she had typed in the URL field: “the company website”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A friend of mine once told me a story about when he was doing IT work for a local state election campaign. They told him that they backed up their entire user database every night…. on a single floppy disk. Nonplussed by this feat of engineering achievement, he asked them to show him how they did it.&lt;/p&gt;
&lt;p&gt;Walking up to the computer, the diligent user proceeded to drag the shortcut icon for the access database to the floppy. See… backup complete!&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/413388485</link><guid>http://tumblr.crazydogsoftware.com/post/413388485</guid><pubDate>Fri, 26 Feb 2010 10:22:00 -0500</pubDate></item><item><title>We're still talking about SQL Injection... really?</title><description>&lt;p&gt;I find it frightening that SQL Injection is still &lt;a target="_blank" href="http://threatpost.com/en_us/blogs/anatomy-sql-injection-attack-022510"&gt;making the headlines&lt;/a&gt;. Back in 2000 we wrote a library for our ASP sites that took care of this. Yes, I said ASP. How is it that 10 years later this is still such a problem?&lt;/p&gt;
&lt;p&gt;If you don’t think it’s an issue, check out this &lt;a target="_blank" href="http://en.wikipedia.org/wiki/SQL_injection#Real-world_examples"&gt;list of recent SQL Injection attacks&lt;/a&gt;, which includes the largest case of identity theft known in the US.&lt;/p&gt;
&lt;p&gt;So what’s causing this, who’s to blame? In my opinion, it’s the developers, and the people who hire and perpetuate the use of such developers. Excuses of time, budget constraints, or my boss made me do it don’t ring true for me. First of all, there are enough libraries and frameworks out there that make SQL Injection a thing of the past and a simple fix. I primarily use Rails for my web applications, and I’d have to try really hard to expose a SQL Injection vulnerability. And when there is a case in which using a database persistence library is a no-go, I spend the time to abstract out the persistence layer myself and include sanitization on all the inputs.&lt;/p&gt;
&lt;p&gt;I would never trade such basic security measures for time or budget constraints, and if a client or employer ever asked me to do so, I’d explain that things could take an extra week or two now, or you could expose all of your valuable data for theft and destruction. In reality, such a discussion would not even come up, because the SQL abstraction and sanitization would be built into the timetable from the get-go, and is always non-negotiable.&lt;/p&gt;
&lt;p&gt;So usually it comes down to the developers, the ones writing the code. In my experience, it usually comes from ignorance or laziness. On the ignorance side, sometimes you’ll find a developer who has always just “gotten by” as a programmer and their depth of knowledge doesn’t pass much beyond the basics they learned years ago, which includes writing SQL statements in their web pages. On the lazy side, it’s the pass the buck mentality. Arguing that time and budgets constraints are the cause is really an excuse for not doing your job as a developer, which includes educating business owners as to what needs to be done for a working and secure system.&lt;/p&gt;
&lt;p&gt;Some of the blame does lie with those people hiring the ignorant and lazy developers though. In the end, you get what you pay for. We need to understand that software programming is becoming an ever more vital part of our society. It’s the foundation upon which much of our current civilization runs. That’s not something you outsource to the lowest bidder.&lt;/p&gt;


&lt;p&gt;&lt;img height="205" width="666" src="http://imgs.xkcd.com/comics/exploits_of_a_mom.png"/&gt;&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/413273123</link><guid>http://tumblr.crazydogsoftware.com/post/413273123</guid><pubDate>Fri, 26 Feb 2010 08:55:00 -0500</pubDate></item><item><title>I’ve seen that face before…</title><description>&lt;img src="http://28.media.tumblr.com/tumblr_kxpj3uZV531qa8x04o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I’ve seen that face before…&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/384757337</link><guid>http://tumblr.crazydogsoftware.com/post/384757337</guid><pubDate>Thu, 11 Feb 2010 21:33:29 -0500</pubDate></item><item><title>Upgrading to Rails 3 Beta</title><description>&lt;p&gt;Today I attempted to upgrade a Rails app from 2.3.5 to 3.0.beta. I assumed this might be a monumental undertaking, and was prepared to cut things short if needed.&lt;/p&gt;
&lt;p&gt;The bad news is that I did stop half way through, and have reverted to 2.3.5. The good news is the basic upgrade path was easier than I expected.&lt;/p&gt;
&lt;p&gt;There’s now an official upgrade plugin which you can install into your existing Rails 2.x app that provides a number of rake tasks that help you determine what’s going to change, and provide code so you can make it happen:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/rails/rails_upgrade"&gt;http://github.com/rails/rails_upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Jeremy McAnally, the creator of the plugin, also has a nice tutorial on getting Rails 3 beta installed on your system:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://omgbloglol.com/post/371893012/the-path-to-rails-3-greenfielding-new-apps-with-the"&gt;http://omgbloglol.com/post/371893012/the-path-to-rails-3-greenfielding-new-apps-with-the&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once Rails 3 is on your system, and you’re ready for the upgrade, it’s as simple as doing&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd myapp
$ rails . 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After updating all my config files with proper database settings and the like, I fired up the server and found to my delight that everything seemed to work, including my Metal classes.&lt;/p&gt;
&lt;p&gt;I then moved on to getting my RSpec testing suite working, and that’s when I ran into problems. After tinkering around for a while attempting to install the alpha of RSpec 2, I realized that rspec and rspec-rails are a bit far off from being ready for Rails 3. Since testing is intregal to my development, it was a no go for an upgrade. :(&lt;/p&gt;
&lt;p&gt;So it seems that once the community has time to update gems and plugins for Rails 3, things will be looking good. Personally, I can’t wait to take advantage of all the Rails 3 has to offer.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/384318979</link><guid>http://tumblr.crazydogsoftware.com/post/384318979</guid><pubDate>Thu, 11 Feb 2010 16:33:00 -0500</pubDate><category>programming</category><category>rails3</category><category>ruby</category><category>ruby on rails</category></item><item><title>Rails 3 Beta is Here</title><description>&lt;a href="http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release/"&gt;Rails 3 Beta is Here&lt;/a&gt;</description><link>http://tumblr.crazydogsoftware.com/post/377000124</link><guid>http://tumblr.crazydogsoftware.com/post/377000124</guid><pubDate>Sun, 07 Feb 2010 19:18:15 -0500</pubDate></item><item><title>Master Lock Algorithm</title><description>&lt;p&gt;A while ago I had come across the &lt;a target="_blank" href="http://gizmodo.com/5375600/how-to-best-a-master-lock"&gt;following cool tip and graphic&lt;/a&gt; on how to recover a combination for a Master Lock padlock you’ve forgotten.&lt;/p&gt;
&lt;p&gt;The technique is a little algorithm that exploits a mechanical weakness in the lock to narrow down the last digit in the combination. You then use what is basically a lookup table to run through the possible combinations till you open the lock.&lt;/p&gt;
&lt;p&gt;So last night, I found myself in need of a padlock and managed to scrounge up an old Master Lock. And of course I had no recollection of the combo. So I pulled up the instructions online and presto… 15 minutes later, I had myself a working padlock.&lt;/p&gt;
&lt;p&gt;You gotta love it when a little algorithm like that can so easily solve what seems like an insurmountable problem.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/370538226</link><guid>http://tumblr.crazydogsoftware.com/post/370538226</guid><pubDate>Thu, 04 Feb 2010 08:23:00 -0500</pubDate><category>computer science</category><category>cool</category></item><item><title>Classic.</title><description>&lt;img src="http://30.media.tumblr.com/tumblr_kwypt2ce3j1qa8x04o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Classic.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/357977261</link><guid>http://tumblr.crazydogsoftware.com/post/357977261</guid><pubDate>Thu, 28 Jan 2010 10:03:00 -0500</pubDate><category>funny</category><category>star trek</category></item><item><title>nil?, empty? and blank?</title><description>&lt;p&gt;&lt;a href="http://rubyquicktips.tumblr.com/post/357739776/nil-empty-and-blank"&gt;rubyquicktips&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In Ruby, you check with &lt;code&gt;nil?&lt;/code&gt; if an object is nil:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;article = nil
article.nil?  # =&gt; true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;empty?&lt;/code&gt; checks if an element - like a string or an array f.e. - is empty:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Array
[].empty?   #=&gt; true
# String
"".empty?   #=&gt; true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rails adds the method &lt;code&gt;blank?&lt;/code&gt; to the &lt;code&gt;Object&lt;/code&gt; class:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An object is blank if it‘s false, empty, or a whitespace string. For example, “”, ” “, nil, [], and {} are blank.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This simplifies&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if !address.nil? &amp;&amp; !address.empty?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if !address.blank?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Documentation: &lt;a href="http://www.ruby-doc.org/core/classes/Object.html#M000342"&gt;nil?&lt;/a&gt;, empty? (&lt;a href="http://www.ruby-doc.org/core/classes/String.html#M000776"&gt;String&lt;/a&gt;, &lt;a href="http://www.ruby-doc.org/core/classes/Array.html#M002177"&gt;Array&lt;/a&gt;) and &lt;a href="http://api.rubyonrails.org/classes/Object.html#M000279"&gt;blank?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As of Rails 2.3, there’s also a handy new try() method on objects, which allows you to invoke a method on a possibly nil object without throwing a NoMethodError. This saves you the trouble of checking if your object is nil or not before accessing a method.&lt;/p&gt;
&lt;p&gt;For example, previously you’d need to do something like&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;article = Article.find_by_title("My Article")
unless article.nil? 
  article.body
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With try() you can skip the nil? check and do the following&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Article.find_by_title("My Article").try(:body) =&gt; #body or nil
&lt;/code&gt;&lt;/pre&gt;</description><link>http://tumblr.crazydogsoftware.com/post/357915902</link><guid>http://tumblr.crazydogsoftware.com/post/357915902</guid><pubDate>Thu, 28 Jan 2010 09:04:00 -0500</pubDate><category>ruby on rails</category><category>ruby</category><category>computers</category><category>programming</category></item><item><title>Google may pull out of China</title><description>&lt;p&gt;Here’s an interesting post by Google on their problems in China, alluding to the possibility that they might close down Google.cn&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googleblog.blogspot.com/2010/01/new-approach-to-china.html"&gt;http://googleblog.blogspot.com/2010/01/new-approach-to-china.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Personally I’m not surprised. I’ve been firewalling all the servers I administer from all netblocks in China for a while now. If you’re not doing business in China, my advice is to do the same. Along with blocking netblocks in Eastern Europe, you’ll see a huge decrease in the number of malicious scripts and automated exploit attempts against your server, which has the nice side effect of lowering you bandwith and slimming down your log files. Here’s a convenient list of Chinese netblocks in CIDR format which you can add to your iptables.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.okean.com/chinacidr.txt"&gt;http://www.okean.com/chinacidr.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It feels to me like were are on the cusp of some serious global cyberwars. If we want to maintain an open and safe Internet, it’s going to fall on us, as responsible developers and IT people, to talk openly about what we are seeing and dealing with.&lt;/p&gt;
&lt;p&gt;So hats off to Google for being frank and open about their security compromises.&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/332422969</link><guid>http://tumblr.crazydogsoftware.com/post/332422969</guid><pubDate>Wed, 13 Jan 2010 09:30:00 -0500</pubDate><category>Google</category><category>China</category><category>Security</category><category>IT</category><category>Software</category></item><item><title>It’s a hard knock life…</title><description>&lt;img src="http://26.media.tumblr.com/tumblr_kutbl2J3cW1qa8x04o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;It’s a hard knock life…&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/287833420</link><guid>http://tumblr.crazydogsoftware.com/post/287833420</guid><pubDate>Thu, 17 Dec 2009 15:00:38 -0500</pubDate></item><item><title>Conversation Plugin for Rails</title><description>&lt;p&gt;Thought I’d post my new Ruby on Rails plugin here if it’s of interest to anyone. The plugin provides mixin conversation functionality. It’s ultra simple at the moment, and simply allows you to setup a conversation between two objects, and then send messages between those objects in the context of a conversation.&lt;/p&gt;
&lt;p&gt;Please feel free to fork and ping me if anyone finds it of interest or has thoughts on additionally functionality.&lt;/p&gt;
&lt;p&gt;Here it is:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/mbulat/acts_as_conversable"&gt;http://github.com/mbulat/acts_as_conversable&lt;/a&gt;&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/277719622</link><guid>http://tumblr.crazydogsoftware.com/post/277719622</guid><pubDate>Thu, 10 Dec 2009 12:18:05 -0500</pubDate></item><item><title>Firing up Tumblr</title><description>&lt;p&gt;I’d created an account on Tumblr awhile ago, but haven’t yet had the chance to get into it and start posting…. so now seems the time.&lt;/p&gt;
&lt;p&gt;Ready… set… tumbl!&lt;/p&gt;</description><link>http://tumblr.crazydogsoftware.com/post/277715804</link><guid>http://tumblr.crazydogsoftware.com/post/277715804</guid><pubDate>Thu, 10 Dec 2009 12:13:42 -0500</pubDate></item></channel></rss>

