sudo apt-get install libxslt-dev libxml2-dev
Monday, April 16, 2012
How to install Nokogiri on Ubuntu
libxml2 is missing error message is due to missing libraries. Install the pre-requisite library with:
How to install curb gem on Ubuntu 10.04
sudo apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev
How to install bson_ext on Ubuntu 10.04
Using Bundler 1.1.3 for some reason does not work. Solution:
sudo gem install bson_ext -v=1.0.1
installs the gem.
sudo gem install bson_ext -v=1.0.1
installs the gem.
How to ssh using a given private key
ssh -i /path/to/your_private_key_file user-name@your-ip-address-here
Friday, April 13, 2012
It is recommended that your private key files are NOT accessible by others
I was getting this error : Permissions 0644 for '/home/bparanj/Downloads/my-file.ssh' are too open. when I was ssh ing into a box.
Solution:
sudo chmod 600 your-private-key.ssh
Monday, April 09, 2012
Rails Recipes 3rd Edition
The recipe: Focus Your Tests with Mocking and Stubbing show how to use stubs and mocks. It violates one of the testing best practices. DO NOT mock external services. Why? Because you cannot drive the design of a third party library. For a good discussion on this topic read the "Growing Object Oriented Software Guided by Tests".
I scanned through the book, I was a bit disappointed. Lot of the recipes are just from the old book.
I scanned through the book, I was a bit disappointed. Lot of the recipes are just from the old book.
Saturday, March 17, 2012
WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead. WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead
Include rdoc in the Gemfile :
group :development, :test do
gem 'rcov'
gem "rdoc", '~> 3.12'
end
Run bundle install.
group :development, :test do
gem 'rcov'
gem "rdoc", '~> 3.12'
end
Run bundle install.
Tuesday, March 13, 2012
Using Stubs with Test Spy in Ruby
While I was working on my super stealth product of my company - Affiliate Tracking system, I came across a problem during testing. I had to test the cookie setting logic of my controllers. It was straightforward to test that the cookie was set for the happy path. For the alternative scenario it became tricky to test because RSpec and Rails framework did not play that well together. I even read Devise Rails plugin code to see how Jose Valim handled cookie related problems during testing. No luck. One solution I found was on Stackoverflow. How do I test cookie expiry?
This technique is a great example of Test Spy described in Gerard Mezos book xUnit Test Patterns. Basically, you install a spy and check the results collected by the test spy in the verification phase. In this case the Hash is the Test Spy that collects data. See how the stub is used to install the spy in the SUT? It overcomes the problems and isolates the SUT from the Rails framework and allows the code to be tested easily.
In my TDD bootcamps, the topic on Stubs and Mocks generates lot of discussion. To clear confusion that surrounds the stubs and mocks, I would state : Read Martin Fowler's paper on Mocks Aren't Stubs, Stub can never fail your test, only mocks can fail your test. Using stubs in combination with a spy like this makes stubs seem like they can in fact fail your test. But only the data collected by the Test Spy decides whether the test passes or not. So the stub's main purpose is to just isolate the production code from Rails framework and allow access to the internal state of the SUT where there is no direct way to access it.
# app/controllers/widget_controller.rb
...
def index
cookies[:expiring_cookie] = { :value => 'All that we see or seem...',
:expires => 1.hour.from_now }
end
...
# spec/controllers/widget_controller_spec.rb
...
it "sets the cookie" do
get :index
response.cookies['expiring_cookie'].should eq('All that we see or seem...')
# is but a dream within a dream.
# - Edgar Allan Poe
end
it "sets the cookie expiration" do
stub_cookie_jar = HashWithIndifferentAccess.new
controller.stub(:cookies) { stub_cookie_jar }
get :index
expiring_cookie = stub_cookie_jar['expiring_cookie']
expiring_cookie[:expires].to_i.should be_within(1).of(1.hour.from_now.to_i)
endThis technique is a great example of Test Spy described in Gerard Mezos book xUnit Test Patterns. Basically, you install a spy and check the results collected by the test spy in the verification phase. In this case the Hash is the Test Spy that collects data. See how the stub is used to install the spy in the SUT? It overcomes the problems and isolates the SUT from the Rails framework and allows the code to be tested easily.
In my TDD bootcamps, the topic on Stubs and Mocks generates lot of discussion. To clear confusion that surrounds the stubs and mocks, I would state : Read Martin Fowler's paper on Mocks Aren't Stubs, Stub can never fail your test, only mocks can fail your test. Using stubs in combination with a spy like this makes stubs seem like they can in fact fail your test. But only the data collected by the Test Spy decides whether the test passes or not. So the stub's main purpose is to just isolate the production code from Rails framework and allow access to the internal state of the SUT where there is no direct way to access it.
Saturday, March 10, 2012
TDD Bootcamp Videos
You can watch the TDD Bootcamp videos on YouTube. It is over 5.5 hours of recording.
Tuesday, February 07, 2012
Testing and Command Query Separation Principle
The term 'command query separation' was coined by Bertrand Meyer in his book "Object Oriented Software Construction".
The fundamental idea is that we should divide an object's methods into two categories:
Queries: Return a result and do not change the observable state of the system (are free of side effects).
Commands: Change the state of a system but do not return a value.
Because the term 'command' is widely used in other contexts it is referred as 'modifiers' and 'mutators'.
It's useful if you can clearly separate methods that change state from those that don't. This is because you can use queries in many situations with much more confidence, changing their order. You have to be careful with modifiers.
The return type is the give-away for the difference. It's a good convention because most of the time it works well. Consider iterating through a collection in Java: the next method both gives the next item in the collection and advances the iterator. It's preferable to separate advance and current methods.
There are exceptions. Popping a stack is a good example of a modifier that modifies state. Meyer correctly says that you can avoid having this method, but it is a useful idiom. Follow this principle when you can.
From jMock home page: Tests are kept flexible when we follow this rule of thumb: Stub queries and expect commands, where a query is a method with no side effects that does nothing but query the state of an object and a command is a method with side effects that may, or may not, return a result. Of course, this rule does not hold all the time, but it's a useful starting point.
The fundamental idea is that we should divide an object's methods into two categories:
Queries: Return a result and do not change the observable state of the system (are free of side effects).
Commands: Change the state of a system but do not return a value.
Because the term 'command' is widely used in other contexts it is referred as 'modifiers' and 'mutators'.
It's useful if you can clearly separate methods that change state from those that don't. This is because you can use queries in many situations with much more confidence, changing their order. You have to be careful with modifiers.
The return type is the give-away for the difference. It's a good convention because most of the time it works well. Consider iterating through a collection in Java: the next method both gives the next item in the collection and advances the iterator. It's preferable to separate advance and current methods.
There are exceptions. Popping a stack is a good example of a modifier that modifies state. Meyer correctly says that you can avoid having this method, but it is a useful idiom. Follow this principle when you can.
From jMock home page: Tests are kept flexible when we follow this rule of thumb: Stub queries and expect commands, where a query is a method with no side effects that does nothing but query the state of an object and a command is a method with side effects that may, or may not, return a result. Of course, this rule does not hold all the time, but it's a useful starting point.
Saturday, February 04, 2012
Stubs are not Mocks - Concise Version of Martin Fowler's Article
Stubs - a common helper to testing environments. There is a difference in how test results are verified: a distinction between state verification and behavior verification. Focusing on one element of the software at a time -hence the common term unit testing. The problem is that to make a single unit work, you often need other units.
- Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
- Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
- Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it 'sent', or maybe only how many messages it 'sent'.
- Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.
Only mocks insist upon behavior verification. The other doubles can, and usually do, use state verification.
The classical TDD style is to use real objects if possible and a double if it's awkward to use the real thing. A mockist TDD practitioner, however, will always use a mock for any object with interesting behavior.
An acknowledged issue with state-based verification is that it can lead to creating query methods only to support verification. It's never comfortable to add methods to the API of an object purely for testing, using behavior verification avoids that problem.
Thursday, January 26, 2012
RCov Tips
1. How to turn off rcov for specific sections in a file:
Start and end with :
#:nocov:
in your file.
2. How to exclude files from rcov:
In spec directory, edit rcov.opts
append our path of files to –exclude option. Eg: –exclude “helpers/*,app/sweepers/*”.
Reference
http://psixty.wordpress.com/2010/06/22/how-to-exclude-files-in-rcova-code-coverage-tool-in-ruby/
Start and end with :
#:nocov:
in your file.
2. How to exclude files from rcov:
In spec directory, edit rcov.opts
append our path of files to –exclude option. Eg: –exclude “helpers/*,app/sweepers/*”.
Reference
http://psixty.wordpress.com/2010/06/22/how-to-exclude-files-in-rcova-code-coverage-tool-in-ruby/
Monday, January 16, 2012
How to uninstall all gems in global rvm ?
rvm use @global
rvm gemset empty global
If you want to remove all gems for a particular gemset, replace global with your-gemset-name
gem "rake" is not installed
Problem uninstalling rake? Run the following command:
rvm use @global && gem uninstall rake
rvm use @global && gem uninstall rake
Thursday, January 12, 2012
How to disable acts_as_audited 2.0 rails plugin in Rails 3.1 and RSpec
Create disable.rb under spec/support folder and call disable_auditing method on your modes. For example:
Account.disable_auditing
Cart.disable_auditing
Account.disable_auditing
Cart.disable_auditing
Monday, January 09, 2012
Using Reek gem in Rails 3.1 projects
1. gem install reek
2. reek lib/*.rb > myreport.txt
You can run reports for app/models/*.rb, app/controllers/*.rb and app/helpers/*.rb
2. reek lib/*.rb > myreport.txt
You can run reports for app/models/*.rb, app/controllers/*.rb and app/helpers/*.rb
rcov for Rails 3.1
1. rake spec:rcov
2. open coverage/index.html
3. add coverage/* to your .gitignore file.
4. $ rake -T rcov
rake spec:clobber_rcov # Remove rcov products for rcov
rake spec:rcov # Run all specs in spec directory with RCov (excluding plugin specs)
2. open coverage/index.html
3. add coverage/* to your .gitignore file.
4. $ rake -T rcov
rake spec:clobber_rcov # Remove rcov products for rcov
rake spec:rcov # Run all specs in spec directory with RCov (excluding plugin specs)
Rails Best Practices
1. gem install rails_best_practices
2. gem install ripper
3. From the root of the project run:
rails_best_practices -f html .
to generate the report.
2. gem install ripper
3. From the root of the project run:
rails_best_practices -f html .
to generate the report.
Sunday, December 25, 2011
You need to specify gem names as Strings. Use 'gem "test"' instead.
This can happen due to syntax error in your Gemfile. Fix the sytax error by manually checking this file. If that does not work delete the lines that you added to result in this problem and copy / paste from a working copy of a Gemfile.
Wednesday, December 07, 2011
syntax error, unexpected keyword_end
This happens because you have : <%= end %> instead of <% end %>
Thursday, December 01, 2011
`test': unknown command 't' (ArgumentError)
To write tests using Test::Unit new syntax :
test "truth" do
assert true
end
1. gem install test-unit
2. Code:
require 'rubygems'
gem 'test-unit'
require 'test/unit'
class ExampleTest < Test::Unit::TestCase
def test_truth
assert true
end
test "truth" do
assert true
end
end
3. Run: ruby example_test This will work on ruby-1.9.3-p0.
Reference: Test::Unit and MiniTest with different Ruby versions
test "truth" do
assert true
end
1. gem install test-unit
2. Code:
require 'rubygems'
gem 'test-unit'
require 'test/unit'
class ExampleTest < Test::Unit::TestCase
def test_truth
assert true
end
test "truth" do
assert true
end
end
3. Run: ruby example_test This will work on ruby-1.9.3-p0.
Reference: Test::Unit and MiniTest with different Ruby versions
Wednesday, November 30, 2011
Installing Ruby 1.9.3 using RVM on Mac OS Lion
ERROR: The provided CC(gcc) is LLVM based, it is not yet fully supported by ruby and gems, please read `rvm requirements`.
1) Download Xcode 4.2.x via App Store.
2) Go to Applications folder and click Install Xcode
3) Download and install GCC from https://github.com/kennethreitz/osx-gcc-installer
4) In a new terminal run : export CC=gcc
and then run : rvm install 1.9.3
5) You may also want to upgrade ruby gems by running:
gem update --system
1) Download Xcode 4.2.x via App Store.
2) Go to Applications folder and click Install Xcode
3) Download and install GCC from https://github.com/kennethreitz/osx-gcc-installer
4) In a new terminal run : export CC=gcc
and then run : rvm install 1.9.3
5) You may also want to upgrade ruby gems by running:
gem update --system
Wednesday, November 02, 2011
ActiveRecord::Relation, undefined method error
If you are using the active record relationships to access columns, for instance:
Article has many comments
article.comments.where("spam = ?", false).order("created_at asc")
This returns ActiveRelation object that does not fire the query. Only when you loop through the results you can access the columns of comments objects. If you want to force the call to the database just append "all" to it like this:
article.comments.where("spam = ?", false).order("created_at asc").all
Article has many comments
article.comments.where("spam = ?", false).order("created_at asc")
This returns ActiveRelation object that does not fire the query. Only when you loop through the results you can access the columns of comments objects. If you want to force the call to the database just append "all" to it like this:
article.comments.where("spam = ?", false).order("created_at asc").all
Monday, October 24, 2011
(local out of date) error in Git when working with branches
1. git pull origin your-branch
2. git push origin your-branch
Step 1 brings your local branch to up-to date. Step 2 pushes your changes to the remote branch.
2. git push origin your-branch
Step 1 brings your local branch to up-to date. Step 2 pushes your changes to the remote branch.
Sunday, October 23, 2011
invalid date format in specification: gem ruby
1) Upgraded ruby gems to 1.8.11 (gem update --system)
2) gem pristine --all
No luck.
Deleted all the gemspec that were causing problems: whenever-0.6.8.gemspec etc. Then bundle install made it work.
2) gem pristine --all
No luck.
Deleted all the gemspec that were causing problems: whenever-0.6.8.gemspec etc. Then bundle install made it work.
`build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
I was getting :
Installing eventmachine (0.12.10) with native extensions .rvm/rubies/ruby-1.8.7-p330/lib/ruby/site_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
during the installation of scheduler_daemon on Mac OS Lion. Upgraded XCode via appstore (download from appstore and install) to resolve this issue.
Installing eventmachine (0.12.10) with native extensions .rvm/rubies/ruby-1.8.7-p330/lib/ruby/site_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
during the installation of scheduler_daemon on Mac OS Lion. Upgraded XCode via appstore (download from appstore and install) to resolve this issue.
Friday, October 07, 2011
Integrating Tweet Button in Rails App
In Rails 3.0 app:
1) In Gemfile include:
gem 'tweet-button'
2) bundle install
3) In application_helper.rb include:
module ApplicationHelper
include TweetButton
... other methods...
end
4) In your partial:
<%= tweet_button(:via => "CreditCardLogic", :url => polymorphic_url(article), :text => "Check this out!") %>
To see this in action, check out my credit cards site.
1) In Gemfile include:
gem 'tweet-button'
2) bundle install
3) In application_helper.rb include:
module ApplicationHelper
include TweetButton
... other methods...
end
4) In your partial:
<%= tweet_button(:via => "CreditCardLogic", :url => polymorphic_url(article), :text => "Check this out!") %>
To see this in action, check out my credit cards site.
Tuesday, September 27, 2011
Making a Branch the Master in GIT
git checkout cat_killer
git merge -s ours master
git checkout master
git merge cat_killer
git push
cat_killer is the branch you want to make the master.
Stolen from Stackoverflow post.
git merge -s ours master
git checkout master
git merge cat_killer
git push
cat_killer is the branch you want to make the master.
Stolen from Stackoverflow post.
Tuesday, September 20, 2011
no mongrel gem found in sdk rubymine
Even if you are using RVM, Rubymine actually looks at the global installation for the gem. Install thin, mongrel etc on the global Ruby installation that is independent of any gemset.
Friday, August 12, 2011
require that is compatible with ruby 1.8.x and 1.9.x
require File.expand_path(File.join(File.dirname(__FILE__), 'player'))
This makes : require 'player' work on both Ruby 1.8.x and 1.9.x
This makes : require 'player' work on both Ruby 1.8.x and 1.9.x
Sunday, August 07, 2011
ImageMagick Installer
Download the script from https://github.com/maddox/magick-installer/blob/master/magick-installer.sh and run it.
ImageScience on Snow Leopard
1) Download and install MacPorts http://www.macports.org/install.php
2) sudo port install freeimage
3) env ARCHFLAGS="-arch x86_64" gem install RubyInline image_science
2) sudo port install freeimage
3) env ARCHFLAGS="-arch x86_64" gem install RubyInline image_science
Wednesday, July 27, 2011
Reserved Words in Rails
To find out if a given name is reserved in Rails programmatically, check out this How to find out if a name is reserved in Rails 4.2.5.
* ADDITIONAL_LOAD_PATHS
* ARGF
* ARGV
* ActionController
* ActionView
* ActiveRecord
* ArgumentError
* Array
* BasicSocket
* Benchmark
* Bignum
* Binding
* CGI
* CGIMethods
* CROSS_COMPILING
* Class
* ClassInheritableAttributes
* Comparable
* ConditionVariable
* Config
* Continuation
* DRb
* DRbIdConv
* DRbObject
* DRbUndumped
* Data
* Date
* DateTime
* Delegater
* Delegator
* Digest
* Dir
* ENV
* EOFError
* ERB
* Enumerable
* Errno
* Exception
* FALSE
* FalseClass
* Fcntl
* File
* FileList
* FileTask
* FileTest
* FileUtils
* Fixnum
* Float
* FloatDomainError
* GC
* Gem
* GetoptLong
* Hash
* IO
* IOError
* IPSocket
* IPsocket
* IndexError
* Inflector
* Integer
* Interrupt
* Kernel
* LN_SUPPORTED
* LoadError
* LocalJumpError
* Logger
* Marshal
* MatchData
* MatchingData
* Math
* Method
* Module
* Mutex
* Mysql
* MysqlError
* MysqlField
* MysqlRes
* NIL
* NameError
* NilClass
* NoMemoryError
* NoMethodError
* NoWrite
* NotImplementedError
* Numeric
* OPT_TABLE
* Object
* ObjectSpace
* Observable
* Observer
* PGError
* PGconn
* PGlarge
* PGresult
* PLATFORM
* PStore
* ParseDate
* Precision
* Proc
* Process
* Queue
* RAKEVERSION
* RELEASE_DATE
* RUBY
* RUBY_PLATFORM
* RUBY_RELEASE_DATE
* RUBY_VERSION
* Rack
* Rake
* RakeApp
* RakeFileUtils
* Range
* RangeError
* Rational
* Regexp
* RegexpError
* Request
* RuntimeError
* STDERR
* STDIN
* STDOUT
* ScanError
* ScriptError
* SecurityError
* Signal
* SignalException
* SimpleDelegater
* SimpleDelegator
* Singleton
* SizedQueue
* Socket
* SocketError
* StandardError
* String
* StringScanner
* Struct
* Symbol
* SyntaxError
* SystemCallError
* SystemExit
* SystemStackError
* TCPServer
* TCPSocket
* TCPserver
* TCPsocket
* TOPLEVEL_BINDING
* TRUE
* Task
* Text
* Thread
* ThreadError
* ThreadGroup
* Time
* Transaction
* TrueClass
* TypeError
* UDPSocket
* UDPsocket
* UNIXServer
* UNIXSocket
* UNIXserver
* UNIXsocket
* UnboundMethod
* Url
* VERSION
* Verbose
* YAML
* ZeroDivisionError
Other names that have been reported to cause trouble:
* accept
* callback – breaks validation if used as a model method.
* categorie
* action
* attributes – if you have a has_many called attributes, you can’t access to your object attributes anymore; only the associated objects
* application2
* @base_path – setting this variable name in a controller method seems to break the ablity to render a partial in the view. The view will render with no content and no errors will be generated .
* connection – there seems to be a connection class already
* database – (in mysql)
* dispatcher
* display1
* drive – fixtures will not autogenerate IDs in Rails 2.0.2
* errors
* format
* host – I had a text_field :host, :name that I saw problems with. (JR)
* key
* layout – If you have a model called Layout and in a controller have “scaffold :layout” it generates an exception. However, if you script/generate the scaffold for layout it works.
* load – When making an Ajax call to an action named load, the action’s code will be skipped (or otherwise rendered useless). This is made apparent by: a) @variables are not available in the view, b) calling render :layout => false still yields the layout.
* link – breaks migrations when used as a column name in combination with validation: ticket
* new, override to news if you want a news table
* notify – not a valid column name
* open – not a valid column name
* public
* quote ‘quote’ cannot be used as a column name
* render – cannot be used as an action name
* request
* records – a table named records seemed to cause duplicate entries to be found by find
* responses – scaffold borks with "undefined method ‘body=’ "
* save – ActiveRecord uses this to save the object.
* scope – do not use as an association name because ActiveRecord::Base.scope is called instead
* send
* session (session_controller or SessionController will not work)
* system – a table column named system causes problems when trying to generate scaffold
* template – a table named templates causes an error when you try to invoke the create method of the default controller
* test (however those work with ruby test/unit/axistest.rb_ and rake testunits_)
* timeout – an ActiveRecord attribute named timeout will clash with the global function “timeout” defined in Ruby’s timeout.rb
* to_s — naming a model instance method to_s resulted in ‘File not found’ for any view an object of this class (should have) appeared in (no matter which method called) and WebRick had to be restarted. I couldn’t drag the very cause into light, but in the traces ‘to_s’ gave me a hint. After renaming everything worked well again.
* type — or any of the other MagicFieldNames
* URI
* visits — a table column named visits causes problems when trying to query some_obj.visits.
* Observer — for a model name works in development environment but not in production.
singular names finishing in “s”: Axis → Axes, Access → Accesses, will break the pluralization in rake: Axi, Acces
Monitor cannot be used. It is a Ruby class that is related to threading.
List of Magic Field Names
* created_at
* created_on
* updated_at
* updated_on
* lock_version
* type
* id
* #{table_name}_count
* position
* parent_id
* lft
* rgt
* quote_value (is used for quoting)
* template
* ADDITIONAL_LOAD_PATHS
* ARGF
* ARGV
* ActionController
* ActionView
* ActiveRecord
* ArgumentError
* Array
* BasicSocket
* Benchmark
* Bignum
* Binding
* CGI
* CGIMethods
* CROSS_COMPILING
* Class
* ClassInheritableAttributes
* Comparable
* ConditionVariable
* Config
* Continuation
* DRb
* DRbIdConv
* DRbObject
* DRbUndumped
* Data
* Date
* DateTime
* Delegater
* Delegator
* Digest
* Dir
* ENV
* EOFError
* ERB
* Enumerable
* Errno
* Exception
* FALSE
* FalseClass
* Fcntl
* File
* FileList
* FileTask
* FileTest
* FileUtils
* Fixnum
* Float
* FloatDomainError
* GC
* Gem
* GetoptLong
* Hash
* IO
* IOError
* IPSocket
* IPsocket
* IndexError
* Inflector
* Integer
* Interrupt
* Kernel
* LN_SUPPORTED
* LoadError
* LocalJumpError
* Logger
* Marshal
* MatchData
* MatchingData
* Math
* Method
* Module
* Mutex
* Mysql
* MysqlError
* MysqlField
* MysqlRes
* NIL
* NameError
* NilClass
* NoMemoryError
* NoMethodError
* NoWrite
* NotImplementedError
* Numeric
* OPT_TABLE
* Object
* ObjectSpace
* Observable
* Observer
* PGError
* PGconn
* PGlarge
* PGresult
* PLATFORM
* PStore
* ParseDate
* Precision
* Proc
* Process
* Queue
* RAKEVERSION
* RELEASE_DATE
* RUBY
* RUBY_PLATFORM
* RUBY_RELEASE_DATE
* RUBY_VERSION
* Rack
* Rake
* RakeApp
* RakeFileUtils
* Range
* RangeError
* Rational
* Regexp
* RegexpError
* Request
* RuntimeError
* STDERR
* STDIN
* STDOUT
* ScanError
* ScriptError
* SecurityError
* Signal
* SignalException
* SimpleDelegater
* SimpleDelegator
* Singleton
* SizedQueue
* Socket
* SocketError
* StandardError
* String
* StringScanner
* Struct
* Symbol
* SyntaxError
* SystemCallError
* SystemExit
* SystemStackError
* TCPServer
* TCPSocket
* TCPserver
* TCPsocket
* TOPLEVEL_BINDING
* TRUE
* Task
* Text
* Thread
* ThreadError
* ThreadGroup
* Time
* Transaction
* TrueClass
* TypeError
* UDPSocket
* UDPsocket
* UNIXServer
* UNIXSocket
* UNIXserver
* UNIXsocket
* UnboundMethod
* Url
* VERSION
* Verbose
* YAML
* ZeroDivisionError
Other names that have been reported to cause trouble:
* accept
* callback – breaks validation if used as a model method.
* categorie
* action
* attributes – if you have a has_many called attributes, you can’t access to your object attributes anymore; only the associated objects
* application2
* @base_path – setting this variable name in a controller method seems to break the ablity to render a partial in the view. The view will render with no content and no errors will be generated .
* connection – there seems to be a connection class already
* database – (in mysql)
* dispatcher
* display1
* drive – fixtures will not autogenerate IDs in Rails 2.0.2
* errors
* format
* host – I had a text_field :host, :name that I saw problems with. (JR)
* key
* layout – If you have a model called Layout and in a controller have “scaffold :layout” it generates an exception. However, if you script/generate the scaffold for layout it works.
* load – When making an Ajax call to an action named load, the action’s code will be skipped (or otherwise rendered useless). This is made apparent by: a) @variables are not available in the view, b) calling render :layout => false still yields the layout.
* link – breaks migrations when used as a column name in combination with validation: ticket
* new, override to news if you want a news table
* notify – not a valid column name
* open – not a valid column name
* public
* quote ‘quote’ cannot be used as a column name
* render – cannot be used as an action name
* request
* records – a table named records seemed to cause duplicate entries to be found by find
* responses – scaffold borks with "undefined method ‘body=’ "
* save – ActiveRecord uses this to save the object.
* scope – do not use as an association name because ActiveRecord::Base.scope is called instead
* send
* session (session_controller or SessionController will not work)
* system – a table column named system causes problems when trying to generate scaffold
* template – a table named templates causes an error when you try to invoke the create method of the default controller
* test (however those work with ruby test/unit/axistest.rb_ and rake testunits_)
* timeout – an ActiveRecord attribute named timeout will clash with the global function “timeout” defined in Ruby’s timeout.rb
* to_s — naming a model instance method to_s resulted in ‘File not found’ for any view an object of this class (should have) appeared in (no matter which method called) and WebRick had to be restarted. I couldn’t drag the very cause into light, but in the traces ‘to_s’ gave me a hint. After renaming everything worked well again.
* type — or any of the other MagicFieldNames
* URI
* visits — a table column named visits causes problems when trying to query some_obj.visits.
* Observer — for a model name works in development environment but not in production.
singular names finishing in “s”: Axis → Axes, Access → Accesses, will break the pluralization in rake: Axi, Acces
Monitor cannot be used. It is a Ruby class that is related to threading.
List of Magic Field Names
* created_at
* created_on
* updated_at
* updated_on
* lock_version
* type
* id
* #{table_name}_count
* position
* parent_id
* lft
* rgt
* quote_value (is used for quoting)
* template
uninstalling rake 0.9.2
gem uninstall rake
ERROR: While executing gem ... (Gem::InstallError)
cannot uninstall, check `gem list -d rake`
1) gem list -d rake
gives:
*** LOCAL GEMS ***
rake (0.9.2, 0.8.7)
Author: Jim Weirich
Rubyforge: http://rubyforge.org/projects/rake
Homepage: http://rake.rubyforge.org
Installed at (0.9.2): /Users/bparanj/.rvm/gems/ruby-1.9.2-p180@global
(0.8.7): /Users/bparanj/.rvm/gems/ruby-1.9.2-p180@global
2) rvm use @global && gem uninstall rake -v 0.9.2
uninstalls rake
ERROR: While executing gem ... (Gem::InstallError)
cannot uninstall, check `gem list -d rake`
1) gem list -d rake
gives:
*** LOCAL GEMS ***
rake (0.9.2, 0.8.7)
Author: Jim Weirich
Rubyforge: http://rubyforge.org/projects/rake
Homepage: http://rake.rubyforge.org
Installed at (0.9.2): /Users/bparanj/.rvm/gems/ruby-1.9.2-p180@global
(0.8.7): /Users/bparanj/.rvm/gems/ruby-1.9.2-p180@global
2) rvm use @global && gem uninstall rake -v 0.9.2
uninstalls rake
Friday, July 15, 2011
Installing Ruby Debug
1) From the root of the project run:
gem install ruby-debug19 -- --with-ruby-include="$rvm_path/src/$(rvm tools identifier)/"
2) Include in Gemfile
group :test, :development do
gem ‘ruby-debug19′, :require => ‘ruby-debug’
end
3) Create a .rdebugrc in your home directory
set autolist
set autoeval
set autoreload
set forcestep
4)
Specify how you would like Rails to report deprecation notices for your bugger environment, set
config.active_support.deprecation to :log, :notify or :stderr at config/environments/bugger.rb
5) require 'ruby-debug' in development.rb. Edit source where you want to debug to include :
debugger
6) Start server in debug mode:
rails s -d
References
http://pivotallabs.com/users/chad/blog/articles/366-ruby-debug-in-30-seconds-we-don-t-need-no-stinkin-gui-
http://bashdb.sourceforge.net/ruby-debug.html
http://railscasts.com/episodes/54-debugging-with-ruby-debug
gem install ruby-debug19 -- --with-ruby-include="$rvm_path/src/$(rvm tools identifier)/"
2) Include in Gemfile
group :test, :development do
gem ‘ruby-debug19′, :require => ‘ruby-debug’
end
3) Create a .rdebugrc in your home directory
set autolist
set autoeval
set autoreload
set forcestep
4)
Specify how you would like Rails to report deprecation notices for your bugger environment, set
config.active_support.deprecation to :log, :notify or :stderr at config/environments/bugger.rb
5) require 'ruby-debug' in development.rb. Edit source where you want to debug to include :
debugger
6) Start server in debug mode:
rails s -d
References
http://pivotallabs.com/users/chad/blog/articles/366-ruby-debug-in-30-seconds-we-don-t-need-no-stinkin-gui-
http://bashdb.sourceforge.net/ruby-debug.html
http://railscasts.com/episodes/54-debugging-with-ruby-debug
Friday, July 08, 2011
Sunday, June 26, 2011
Reserved Words You Can’t Use in Rails
It would be nice if the Rails generator fails to generate when you use the reserved words for a model. I wasted lot of time when I used words like monitor as a model name and class, type as an attribute for a model.
Here is a list of words that cannot be used.
Here is a list of words that cannot be used.
Wednesday, June 22, 2011
List of types to use in script/generate model
he attributes are SQL types, hence the following are supported:
* :primary_key
* :string
* :text
* :integer
* :float
* :decimal
* :datetime
* :timestamp
* :time
* :date
* :binary
* :boolean
Stolen from stackoverflow
* :primary_key
* :string
* :text
* :integer
* :float
* :decimal
* :datetime
* :timestamp
* :time
* :date
* :binary
* :boolean
Stolen from stackoverflow
Wednesday, June 15, 2011
Tuesday, May 31, 2011
Could not find nokogiri-1.4.4 in any of the sources on Ubuntu
If you get the error: "Could not find nokogiri-1.4.4 in any of the
sources" it is probably related to "libxm12" missing. In fact, that
library is probably there. What you are missing is the development
version:
sudo apt-get install libxml2-dev
nokogiri should then install.
Reference: Manual Install
sources" it is probably related to "libxm12" missing. In fact, that
library is probably there. What you are missing is the development
version:
sudo apt-get install libxml2-dev
nokogiri should then install.
Reference: Manual Install
Sunday, May 22, 2011
Forcing DNS changes to take effect on Snow Leopard
I made a mistake while setting up the DNS on Linode. In order to flush the old DNS server settings. I had to run:
dscacheutil -flushcache
Then create a new zone with the right IP Address. Just ping the hostname to find the IP Address and check if it is correct by comparing it to the Linode dashboard.
dscacheutil -flushcache
Then create a new zone with the right IP Address. Just ping the hostname to find the IP Address and check if it is correct by comparing it to the Linode dashboard.
Wednesday, May 11, 2011
How to highlight tabs in Rails
1) Include the following method in application helper.
def is_active?(page_name)
# logger.info("lllllllllllll #{page_name}")
# logger.info("cccccccccccccc #{params[:controller]}")
"current" if params[:controller] == page_name
end
2) In your layout, add this:
<%= link_to 'Articles', new_article_path, :class => is_active?("articles") %>
3) Uncomment the logger lines to see which controller is handling the request and just fill in
the parameters for is_active? method
Fixed an error from the code I found from an original post in Stackoverflow.
def is_active?(page_name)
# logger.info("lllllllllllll #{page_name}")
# logger.info("cccccccccccccc #{params[:controller]}")
"current" if params[:controller] == page_name
end
2) In your layout, add this:
<%= link_to 'Articles', new_article_path, :class => is_active?("articles") %>
3) Uncomment the logger lines to see which controller is handling the request and just fill in
the parameters for is_active? method
Fixed an error from the code I found from an original post in Stackoverflow.
Thursday, May 05, 2011
Installing Postgres on Snow Leopard
1) sudo port install postgresql83 postgresql83-server
2)
sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'
3) sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist
4) sudo su postgres -c '/opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb'
5) sudo vi /etc/profile
6) Add : PATH="/opt/local/bin:/opt/local/sbin:/opt/local/lib/postgresql83/bin:$PATH"
7) createuser --superuser your_macusername -U postgres
8) createdb my_database
9) sudo env ARCHFLAGS="-arch x86_64" gem install pg
10) database.yml
development:
adapter: postgresql
database: your_db
username: your_db_username
Installing pgAdmin
sudo port install pgAdmin3
Upon completion of installation, you can find the application in /Applications/MacPorts/pgAdmin3
Reference:
Installing PostgreSQL on Snow Leopard 10.6
Installing PostgreSQL on Leopard using MacPorts
2)
sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'
3) sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist
4) sudo su postgres -c '/opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb'
5) sudo vi /etc/profile
6) Add : PATH="/opt/local/bin:/opt/local/sbin:/opt/local/lib/postgresql83/bin:$PATH"
7) createuser --superuser your_macusername -U postgres
8) createdb my_database
9) sudo env ARCHFLAGS="-arch x86_64" gem install pg
10) database.yml
development:
adapter: postgresql
database: your_db
username: your_db_username
Installing pgAdmin
sudo port install pgAdmin3
Upon completion of installation, you can find the application in /Applications/MacPorts/pgAdmin3
Reference:
Installing PostgreSQL on Snow Leopard 10.6
Installing PostgreSQL on Leopard using MacPorts
Saturday, April 30, 2011
How to customize Flash messages in Devise Rails gem
Customize the config/locales/devise.en.yml file in your project.
undefined local variable or method `confirmed_at' for
Devise Rails plugin throws this error when you don't have the
t.confirmable
in the users migration.
t.confirmable
in the users migration.
/etc/hosts file messed up on Snow Leopard
Whenever I run a Rails app, I had to access it via http://0.0.0:port_number. Devise Rails plugin sample app barks when redirecting with this error message:
ERROR URI::InvalidURIError: the scheme http does not accept registry part: 0.0.0:3000 (or bad hostname?)
1) To cleanup the mess, I edited the /etc/hosts file so it now looks like this:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
2) Then flush the cache to pickup the new changes by running :
sudo dscacheutil -flushcache
Now you can access your local Rails apps by : http://localhost:port_number and Devise is happy again.
ERROR URI::InvalidURIError: the scheme http does not accept registry part: 0.0.0:3000 (or bad hostname?)
1) To cleanup the mess, I edited the /etc/hosts file so it now looks like this:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
2) Then flush the cache to pickup the new changes by running :
sudo dscacheutil -flushcache
Now you can access your local Rails apps by : http://localhost:port_number and Devise is happy again.
Thursday, April 28, 2011
sudo: no tty present and no askpass program specified
When trying to deploy to a new staging server, I get the following
error:
sudo: no tty present and no askpass program specified
Solution:
Add the line: default_run_options[:pty] = true
in your deploy.rb
error:
sudo: no tty present and no askpass program specified
Solution:
Add the line: default_run_options[:pty] = true
in your deploy.rb
Wednesday, April 20, 2011
Tuesday, April 19, 2011
how to get all the branches that is remote in git
If you have many remote branches that you want to fetch at once:
$ git remote update
$ git pull --all
Now you can checkout any branch as you need to, without hitting the remote repo.
http://stackoverflow.com/questions/67699/how-do-i-clone-all-remote-branches-with-git
$ git remote update
$ git pull --all
Now you can checkout any branch as you need to, without hitting the remote repo.
http://stackoverflow.com/questions/67699/how-do-i-clone-all-remote-branches-with-git
Sunday, April 17, 2011
Ruby Programming Language Book Notes 2
| operator is used for union operation in Array.
& operator is used for intersection operation in Array.
& operator is used for intersection operation in Array.
1: class Array
2: def union(another)
3: self | another
4: end
5: def intersection(another)
6: self & another
7: end
8: end
Saturday, April 16, 2011
Ruby Programming Language Book Notes
1)
minimum = if x < y then x else y end
can also be written as :
minimum = x < y ? x : y
2)
class Fixnum
def inclusive(element)
self..element
end
def exclusive(element)
self...element
end
end
This eliminates the mental mapping from .. and ... to the behaviour of the methods.
3) This does not work:
class Fixnum
alias inclusive ..
alias exclusive ...
end
gives syntax error, unexpected tDOT2
So how do you redefine the .. and ...? If you do ri Fixnum, it shows the instance methods. The section on Operators has discussion on operators that can be re-defined.
minimum = if x < y then x else y end
can also be written as :
minimum = x < y ? x : y
2)
class Fixnum
def inclusive(element)
self..element
end
def exclusive(element)
self...element
end
end
This eliminates the mental mapping from .. and ... to the behaviour of the methods.
3) This does not work:
class Fixnum
alias inclusive ..
alias exclusive ...
end
gives syntax error, unexpected tDOT2
So how do you redefine the .. and ...? If you do ri Fixnum, it shows the instance methods. The section on Operators has discussion on operators that can be re-defined.
Thursday, April 14, 2011
Convert Haml to ERB
1) script/plugin install http://github.com/cgoddard/haml2erb.git
2) In console:
hamls = Dir["app/views/**/*.haml"] - ['app/views/layouts/screen.html.haml'];
hamls.each do |haml|
puts haml
erb = haml.sub(/\.haml$/, '.erb')
File.open(erb, 'w') do |file|
file.write Haml2Erb.convert(File.read(haml))
end
end
http://makandra.com/notes/544-convert-haml-to-erb
2) In console:
hamls = Dir["app/views/**/*.haml"] - ['app/views/layouts/screen.html.haml'];
hamls.each do |haml|
puts haml
erb = haml.sub(/\.haml$/, '.erb')
File.open(erb, 'w') do |file|
file.write Haml2Erb.convert(File.read(haml))
end
end
http://makandra.com/notes/544-convert-haml-to-erb
ERROR: There has been an error fetching the ruby interpreter. Halting the installation.
This happens when there is no network connection. How wonderful it would be if developers can give error messages that make sense! Make the code robust and give users a clear call to action to rectify any errors that they can recover from. It is surprising that even ruby gems has the same issue.
Sunday, April 03, 2011
Mispelled HTTP_REFERER in Rails 3.0
The correct spelling is HTTP_REFERRER but Rails source has it with wrong spelling. So in order to get the HTTP_REFERRER do the following in your controller:
request.env["HTTP_REFERER"]
request.domain has been deprecated. The domain method has been moved to ActionDispatch::Http::URL. Ideally we want to use the method defined in this module.Do to metaprogramming it is difficult to figure out the actual keys that are used in ActionDispatch::Request. If you run this snippet:
request.env.keys.each do |x|
logger.info x
end
You will get all the keys:
action_dispatch.request.formats
action_dispatch.request.parameters
rack.session
HTTP_ACCEPT
HTTP_HOST
SERVER_NAME
rack.request.cookie_hash
action_dispatch.remote_ip
rack.url_scheme
HTTP_KEEP_ALIVE
HTTP_USER_AGENT
REQUEST_PATH
action_dispatch.request.query_parameters
action_dispatch.request.unsigned_session_cookie
SERVER_PROTOCOL
HTTP_ACCEPT_LANGUAGE
rack.errors
action_dispatch.secret_token
async.callback
REMOTE_ADDR
PATH_INFO
rack.run_once
rack.version
SERVER_SOFTWARE
action_dispatch.request.path_parameters
rack.request.cookie_string
SCRIPT_NAME
HTTP_REFERER
action_dispatch.parameter_filter
HTTP_COOKIE
HTTP_VERSION
rack.multithread
action_dispatch.request.request_parameters
action_dispatch.cookies
REQUEST_URI
rack.multiprocess
rack.request.query_hash
SERVER_PORT
HTTP_ACCEPT_CHARSET
action_controller.instance
rack.session.options
async.close
REQUEST_METHOD
warden
rack.request.query_string
action_dispatch.request.content_type
GATEWAY_INTERFACE
HTTP_CONNECTION
HTTP_ACCEPT_ENCODING
QUERY_STRING
rack.input
Now you can access any of these environment values from your controller similar to the referrer.
request.env["HTTP_REFERER"]
request.domain has been deprecated. The domain method has been moved to ActionDispatch::Http::URL. Ideally we want to use the method defined in this module.Do to metaprogramming it is difficult to figure out the actual keys that are used in ActionDispatch::Request. If you run this snippet:
request.env.keys.each do |x|
logger.info x
end
You will get all the keys:
action_dispatch.request.formats
action_dispatch.request.parameters
rack.session
HTTP_ACCEPT
HTTP_HOST
SERVER_NAME
rack.request.cookie_hash
action_dispatch.remote_ip
rack.url_scheme
HTTP_KEEP_ALIVE
HTTP_USER_AGENT
REQUEST_PATH
action_dispatch.request.query_parameters
action_dispatch.request.unsigned_session_cookie
SERVER_PROTOCOL
HTTP_ACCEPT_LANGUAGE
rack.errors
action_dispatch.secret_token
async.callback
REMOTE_ADDR
PATH_INFO
rack.run_once
rack.version
SERVER_SOFTWARE
action_dispatch.request.path_parameters
rack.request.cookie_string
SCRIPT_NAME
HTTP_REFERER
action_dispatch.parameter_filter
HTTP_COOKIE
HTTP_VERSION
rack.multithread
action_dispatch.request.request_parameters
action_dispatch.cookies
REQUEST_URI
rack.multiprocess
rack.request.query_hash
SERVER_PORT
HTTP_ACCEPT_CHARSET
action_controller.instance
rack.session.options
async.close
REQUEST_METHOD
warden
rack.request.query_string
action_dispatch.request.content_type
GATEWAY_INTERFACE
HTTP_CONNECTION
HTTP_ACCEPT_ENCODING
QUERY_STRING
rack.input
Now you can access any of these environment values from your controller similar to the referrer.
Saturday, April 02, 2011
Accessing Webrick running on VM from Mac OS
1) If the VM is running, stop it.
2) To forward from port 3001 on the host to port 3000 on the guest, run the following command on the host.
$ VBoxManage modifyvm "Ubuntu" --natpf1 "webrick,tcp,,3001,,3000"
3) To delete the port forwarding run:
VBoxManage modifyvm "Ubuntu" --natpf1 delete "webrick"
4) Now you can go to http://localhost:3001 on your host to hit webrick running on your VM.
The page loads very slow. Is there any way to speed it up?
2) To forward from port 3001 on the host to port 3000 on the guest, run the following command on the host.
$ VBoxManage modifyvm "Ubuntu" --natpf1 "webrick,tcp,,3001,,3000"
3) To delete the port forwarding run:
VBoxManage modifyvm "Ubuntu" --natpf1 delete "webrick"
4) Now you can go to http://localhost:3001 on your host to hit webrick running on your VM.
The page loads very slow. Is there any way to speed it up?
Sunday, March 13, 2011
My Job Went to India Book Review
Businesses cannot exist without the IT and vice-versa. They are interdependent. IT systems automate the business processes and run 24 by 7. Therefore we cannot really view those who work at the “Business” level as above us. So, I disagree with the author on this point. However, he does sort of make a U turn later on in the book.
This book will make you think. For instance: What is the supply demand for programmers in a particular Business domain? This would be a good question to research so that we can plan our career.
He talks about how to survive layoffs by being knowledgeable in different areas. Not everyone wants to stay in one organization for a long time. Another thing is that it is almost impractical to learn everything in a particular technology (say, Java technology). Developers will have different intentions, for example they might have a backup plan in case of IT downturn, either by having a cash cushion or generating cash flow through software products.
I agree about following your passion. It enables us to transcend limitations. It inspires us and makes us reach a level of performance that amazes us. This explains the previous paragraph (which sounds like excuses).
Another principle that he explains - “Be the Worst” is very real. Two projects, one early in my career where I had the opportunity to work with a strong and talented team of developers and project manager. Recently when I found working for people who were not anywhere near my capabilities, they did affect my performance.
This book helps to see and expect what the work environment could possibly bring us and what we can do to proactively handle these situations.
Maintenance is seen as a menial work and recruiters downplay any experience on it. Oh, this is a developer job… Chad advises you to learn to love maintenance.
He recommends having a mentor and I am glad I read his book. I know mentors can also come in the form of a book!!! You can have more than one mentor.
I love the Eight-Hour Burn concept. This explains why I get very depressed and productivity drops during the last few weeks of the project. Now I know how to make the work stay in the office. No more nagging problems following me home!
The concept of “Presence” is very realistic. I learned this by making mistakes in the workplace and the cost was high. I wish I had read this book early in my career. Lot of things that he explains has already happened to me in my career. Still I was able to learn how to handle those situations successfully next time around.
Reading open source code really helps to solve recurring problems quickly. I have experienced this in my job. The cover of this book really needs to be improved. The content of the book is much better than the quality of cover image.
This book will make you think. For instance: What is the supply demand for programmers in a particular Business domain? This would be a good question to research so that we can plan our career.
He talks about how to survive layoffs by being knowledgeable in different areas. Not everyone wants to stay in one organization for a long time. Another thing is that it is almost impractical to learn everything in a particular technology (say, Java technology). Developers will have different intentions, for example they might have a backup plan in case of IT downturn, either by having a cash cushion or generating cash flow through software products.
I agree about following your passion. It enables us to transcend limitations. It inspires us and makes us reach a level of performance that amazes us. This explains the previous paragraph (which sounds like excuses).
Another principle that he explains - “Be the Worst” is very real. Two projects, one early in my career where I had the opportunity to work with a strong and talented team of developers and project manager. Recently when I found working for people who were not anywhere near my capabilities, they did affect my performance.
This book helps to see and expect what the work environment could possibly bring us and what we can do to proactively handle these situations.
Maintenance is seen as a menial work and recruiters downplay any experience on it. Oh, this is a developer job… Chad advises you to learn to love maintenance.
He recommends having a mentor and I am glad I read his book. I know mentors can also come in the form of a book!!! You can have more than one mentor.
I love the Eight-Hour Burn concept. This explains why I get very depressed and productivity drops during the last few weeks of the project. Now I know how to make the work stay in the office. No more nagging problems following me home!
The concept of “Presence” is very realistic. I learned this by making mistakes in the workplace and the cost was high. I wish I had read this book early in my career. Lot of things that he explains has already happened to me in my career. Still I was able to learn how to handle those situations successfully next time around.
Reading open source code really helps to solve recurring problems quickly. I have experienced this in my job. The cover of this book really needs to be improved. The content of the book is much better than the quality of cover image.
Thursday, March 03, 2011
Search recursively for a specific pattern in directory and list the names of the files that has that string
grep -r "#{" .
This will search for the pattern #{ in the current directory and all the files at and below this directory
This will search for the pattern #{ in the current directory and all the files at and below this directory
Monday, February 28, 2011
Whole word search in Textmate
1) Command + Shift + f
2) Type in find :
\bsomething\b
Where something is the string you want to search
3) Check Regular expression box
2) Type in find :
\bsomething\b
Where something is the string you want to search
3) Check Regular expression box
Sunday, February 27, 2011
Getting Rails 3 running on Windows
Checkout the following resources for help:
http://accidentaltechnologist.com/ruby-on-rails/running-rails-3-on-windows/
http://accidentaltechnologist.com/ruby-on-rails/railsinstaller-is-instant-rails-evolved/
http://accidentaltechnologist.com/?s=rails
http://rubyinstaller.org/
http://sqlite.org/download.html (Go to precompiled binaries for Windows, download slitedll-3_7_3.zip , unzip it, copy the sqlite3. dll to Ruby bin directory, for example
c:\Ruby192\bin)
If you still need help, I recommend "Meet Rails 3 Part I" screencast by Peepcode.
http://accidentaltechnologist.com/ruby-on-rails/running-rails-3-on-windows/
http://accidentaltechnologist.com/ruby-on-rails/railsinstaller-is-instant-rails-evolved/
http://accidentaltechnologist.com/?s=rails
http://rubyinstaller.org/
http://sqlite.org/download.html (Go to precompiled binaries for Windows, download slitedll-3_7_3.zip , unzip it, copy the sqlite3. dll to Ruby bin directory, for example
c:\Ruby192\bin)
If you still need help, I recommend "Meet Rails 3 Part I" screencast by Peepcode.
Monday, January 17, 2011
Upgrading git on snow leopard
Error installing ruby-1.8.7-p330 on Snow Leopard
The error :
make[1]: *** [readline.o] Error 1
make: *** [all] Error 1
Error running 'make ', please read ...make.log
Snow Leopard version is 10.6.5
1) Make sure you have the latest XCode installed. I have 3.2.5
2) rvm update && rvm reload
3) rvm_archflags="-arch x86_64"
4) rvm install ruby-1.8.7
Fixes the problem and installs ruby-1.8.7-p330.
make[1]: *** [readline.o] Error 1
make: *** [all] Error 1
Error running 'make ', please read ...make.log
Snow Leopard version is 10.6.5
1) Make sure you have the latest XCode installed. I have 3.2.5
2) rvm update && rvm reload
3) rvm_archflags="-arch x86_64"
4) rvm install ruby-1.8.7
Fixes the problem and installs ruby-1.8.7-p330.
Monday, November 15, 2010
Subscribe to:
Posts (Atom)