Tuesday, December 30, 2008

Getting MySQL to work with Rails 2.2.2 on Mac OS 10.5.6

Weird errors: dlsym(0x256ee10, Init_mysql): symbol not found - /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle

It turned out I had installed the x86_64 version of MySQL and it does not work with Ruby.

[BLATANT COPY/PASTE BEGIN]
0. In Terminal: ls -l /usr/local ## Showed that mysql was pointing to a PowerPC version instead of i686
1. EXPORT ALL DATABASES FROM CURRENT MYSQL
2. Downloaded MySQL 5.1.30 (I am on OS X 10.4.11 so I used Mac OS X 10.4 (x86))
3. Ran installation package (be sure to see the README first about stopping current server, etc)
4. In Terminal: sudo gem uninstall mysql
5. In Terminal: sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
6. Started up my app's script/server
[BLATANT COPY/PASTE END]

Source: RailsForum

Saturday, December 20, 2008

Captcha in Rails 2.1.2

Simple Captcha plugin by Sur Max works great. Few things that has made life easier:

1. You can now install the RMagick on Linux and Mac OS X using gem install rmagick.
2. Just follow the readme file that comes with the plugin and things will work fine.

It still is in SVN repository. It's ok, just install it.

Thursday, November 20, 2008

Phusion Passenger Enterprise Ruby

If you're using Phusion Passenger (http://www.modrails.com),
and you want it to use Ruby Enterprise Edition, then edit your Apache
configuration file, and change the 'PassengerRuby' option:

PassengerRuby /opt/ruby-enterprise-1.8.6-20080810/bin/ruby

If you ever want to uninstall Ruby Enterprise Edition, simply remove this
directory:

/opt/ruby-enterprise-1.8.6-20080810

Tuesday, November 18, 2008

ssh keys setup - passwordless login from multiple machines

Append id_rsa.pub value in a new line (if there is already another entry) to the ~/.ssh/authorized_keys in the remote machine.

Thursday, November 06, 2008

no such file to load -- mysql (MissingSourceFile)

I followed the Hivelogic tutorial to install MySQL. I was getting that error message when I do:

sudo gem install mysql

To get this to work run:

sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/include

[All in one line]

Tuesday, November 04, 2008

WARNING: RubyGems 1.2+ index not found for:

RubyGems will revert to legacy indexes degrading performance.

I was getting this error message while upgrading from Rails 2.1.1 to 2.1.2. Just add github as another gem source.

1. sudo gem sources -a http://gems.github.com

2. sudo gem install rails --version 2.1.2

Monday, November 03, 2008

Rails 2.1.1 Htmldoc 0.2.1 PDF generation

I was getting the error:

NoMethodError (undefined method `size' for false:FalseClass):
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/streaming.rb:123:in
`send_data'

Patch the file :
/usr/local/lib/ruby/gems/1.8/gems/htmldoc-0.2.1/lib/htmldoc.rb

with the following:

result.split("\n").each do |line|
+ line.strip!


Reference:

http://textmode.at/2008/5/14/ruby-htmldoc-gem-falseclass-error

Wednesday, October 29, 2008

Using HTTPS in RESTful authentication Rails 2.1.1

If you get the error message:

ActionController::UnknownAction (No action responded to show):

In the sessions controller make sure you have :

ssl_required :new, :create

This will now enable https when someone logins in to the site. All other details can be easily found via Google.

Monday, October 27, 2008

Tagging in Rails 2.1

I had to migrate from Acts As Taggable on Steroids to Acts As Taggable On plugin to get tagging working Rails 2.1.

One migration issue is that context column that is added by this plugin will be null for old data. It must be set to 'tags' for listing tags for a given model. This will make #tag_list display all the tags for that particular model.

Wednesday, October 01, 2008

Dream Machine

I got my Mac Pro 3.2 GHz 2 processor quad core with 16 GB RAM and RAID enabled 15000 rpm SAS drive on oct 29. I am experimenting with 3 monitor setup, two 30 inch Apple Cinema displays and one Samsung 22 inch display.

Let's see how much productivity I can get from this new setup. Only gripe is the hissing noise of the fan. I don't know if it has to do with the SAS drive. I will post my setup photo on rubyplus.org soon.

Thursday, September 11, 2008

Secret to a Developer's Success

In a interview with LinuxDevCenter.com, Matz was asked the "future plans for Ruby", he replied:

loop do
read and reply mails
write code
write document/article/book
write code
end

I think this is an excellent plan to succeed for a developer who is passionate about software development.

Tuesday, September 09, 2008

Integrate ActiveMerchant With Rails

I read the Integrate ActiveMerchant With Rails recipe in the book Enterprise Rails Recipes by Maik Schmidt. This recipe is basically a recipe for disaster.

In a real web application the user must be taken out of the loop as soon as possible. Having a spinner spining or disabling the button or saying don't click the button is a bad design. Take Amazon for instance the user experience on the site is a good example to follow.

As soon as you create an order, you must set it's initial state and process that order in the background. You can use run rake task using a CRON job that processes the orders. What happens if the Gateway is down? What will you recover from network errors? These things happen in the real world and your software that affect the bottom line must be able to handle it.

Monday, August 25, 2008

Winner of Rubyplus.org Rails Documentation Contest

There was only one entry to the contest! That entry was from a prolific Rails contributor Xavier Noria Rami. Congratulations Xavier and keep up the good work.

I will be shipping him a brand new iPhone 3g soon!

Wednesday, August 13, 2008

LaunchBox Unleashes Its First Nine Startups

None of those startup are likely to make any money.

Here is an idea for a startup that can make money:
How about a web app / iPhone app that users can use to check how likely they can get a room with a certain rating in a given location and date? Business travelers will find it very helpful.

Friday, August 08, 2008

Eric Hodel 3000 Logger `load_missing_constant': uninitialized constant Hodel3000CompliantLogger

Rails 2.0 configuration for Hodel 3000 logger blows up in environment.rb. Switching to RAWK. It would be cool to have a Capistrano task that shows the output.

Tuesday, July 29, 2008

Ultrasphinx on Centos

1. yum install bison
2. yum install gcc-c++
3. wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz
4. tar xvf sphinx-x.y.z
5. cd sphinx.x.y.z
6. ./configure
7. make
8. sudo make install

You also need chronic and hpricot gems on your system.

Tuesday, July 22, 2008

Ultrasphinx Search Engine with Rails 2.0.2

ultrasphinx: Anonymous modules have no name to be referenced by

This error is caused due to the autoloading failing to load the required Ultrasphinx files in Rails 2.0.2. The following is the fix:

1. require 'ultrasphinx/fields' in ultrasphinx/configure.rb

2.

production.conf

source episodes_main
{
html_strip = 1
}

index main
{
strip_html = 0
}

3.
In environment.rb

config.after_initialize do
Ultrasphinx::Configure.load_constants
end

Notes:
git clone git://github.com/DrMark/ultrasphinx.git vendor/plugins/ultrasphinx
rm -rf vendor/plugins/ultrasphinx/.git

Tuesday, July 08, 2008

How Google reinvented Ruby Hash or Protocol Buffers by Google

I was laughing out aloud when I saw the following example on Protocol Buffers:

person {
name = "John Doe"
email = "jdoe@example.com"
}

How close is it to Ruby?

person => {
name => "John Doe"
email => "jdoe@example.com"
}

Tuesday, June 17, 2008

no such file to load -- memcache

On Mac OS Leopard:

sudo gem install memcache-client

fixed the issue.

Install memcached and dependencies on Mac OS X

cd src
ls -l
curl -O http://www.monkey.org/~provos/libevent-1.4.4-stable.tar.gz
tar xvzf libevent-1.4.4-stable.tar.gz
cd libevent-1.4.4-stable
./configure --prefix=/usr/local
make
sudo make install
cd ..
ls -l
rm -rf libevent-1.4.4-stable.tar.gz
ls -l
curl -O http://danga.com/memcached/dist/memcached-1.3.0.tar.gz
tar xvzf memcached-1.3.0.tar.gz
cd memcached-1.3.0
./configure --prefix=/usr/local
make
sudo make install

I installed this on Leopard. Original script by Geoffrey Grosenbach http://nubyonrails.com

Thursday, June 12, 2008

How to import a new project into Google code SVN

1. Go to the root of the project
2. svn import -m "Initial checkin" . https://aoror.googlecode.com/svn/trunk/ --username bparanj
3. Accept the authentication by entering 'p'
4. Enter the Google password for your project

Monday, June 09, 2008

Rubyplus Featured on 15 Great Places to Find Screencasts

Josh Catone has compiled a list of 15 Great Places for Screencasts at ReadWriteWeb.

Ryan Bates is my inspiration behind the rubyplus.org site. Rubyplus site is a tool that I use to share my passion for programming with other developers. Its purpose is to ease the pain and introduce the joy of programming in Ruby to other developers. I have learned a lot from his screencasts and I am a big railscasts fan. I have met him personally at Railsconf 2008.

Open Closed Principle in Ruby

Most of the developers in Ruby community only know about DRY principle. There are very few who know about Open Closed Principle in Ruby.

In this episode I will explain this principle and show an example in Rails where this principle can be applied. You will learn when and how you can apply this principle in Ruby.

Podcasting & Screencasting in Rails RailsConf 2008 Presentation

This presentation will definitely make podcasting and screencasting scary for those who want to get started.

The first few videos of my screencasts available at rubyplus.org has poor audio quality. Don't let details take away your focus.

Here's the lesson from my experience: If you're about to start something new, don't spend weeks trying to make the first attempt perfect. Get started as quickly as possible and learn as you go. Tinker, experiment and look for the big things you can tackle as you go. Solve problems when they need to be solved and you won't feel as overwhelmed by all the things that could be fixed.

Last paragraph stolen from: Solve Problems When They Need To Be Solved

Wednesday, May 07, 2008

Ruby Gems ERROR: could not find rush locally or in a repository

I had to do :

gem sources -r http://gems.github.com/

gem env shows:

- :sources => ["http://gems.rubyforge.org"]

Wednesday, April 30, 2008

Why return lambda from a function?

There was an excellent question at the meetup after my presentation on why return lambda instead of the actual result from a function. I did some digging on comp.lang.ruby group. Here is highlights of the notes from that group:

> I have seen many tutorials on the Internet explaining where lambdas
> CAN be used, such as clever multiplication functions, but when are
> they actually NEEDED?

> Sure, I can take a lambda and "pass it around" so to speak, but I can
> call a function from anywhere too, right?

Sure, you can call methods from almost anywhere. But you can't pass them
around (unless you turn them into proc objects, in which case you are back to
using lambdas.) And passing them around is necessary if you didn't write (and
don't want to have to monkeypatch) all the library, etc., code from which you
may want to perform a particular task. If those libraries are written to let you
pass in proc objects, you are in good shape.

> Can somebody give me an extremely useful, NOT complicated, example of
> when lambdas are the absolute perfect solution to a problem?

Callbacks.

--------------


Every time you use a block in ruby you're using a lambda implicitly.

Implicitly, but not really. I wonder, was the original question more
like "what are blocks for?" or "yes, I know what blocks are for, but why
are there also these Proc objects, which are instantiated with the
lambda construct?"

If the latter, then one answer is: when you need the program state that
is encapsulated in a block to persist outside of the method in which it
is used. For example, this happens in event-based frameworks: a setup
method in a client class registers lambdas as event handlers; the
framework doesn't need to know the classes or methods of the client
class, hence loose coupling. As a bonus, these handlers can refer to
shared program state (local variables) in the setup method.


cache :index, :ttl => 42, :key => lambda{ request['important'] }

this is a class level method which says

"cache the index method, invalidating every 42 seconds, by using the
current request's 'important' value from the query"

note that in this cast the lambda will be instance_eval'd - so when we
say 'request' here it will ultimately mean the current request

another example:

def each &block

@list.each &block

end

here we need to have captured the calling block's scope in other to
relay it along to our internal @list object's each method. it's NOT
the case that we want the scope if the function for this lambda, what
we want is logic bound to the scope of the caller

lambda are perfect anytime you want a context sensitive result and
don't want to code everything in one massive global scope.

My problem with lambda's is that I have a hard time to find a
real use case for them. I am not sure of some use case with
lambda {} that brings a definite advantage over i.e. just
using some special object or simple method.

Technically, you can replace every lambda with
an class and an instance thereof. The difference is that
the lambda is syntactically and semantically more lightweight.

To add another example, Rake tasks store away lambdas.

my_lib_version = "1.0.2"

task :tgz do
sh "tar -czf my_lib-#{my_lib_version}.tgz lib"
end

Assuming a Ruby-like language without lambdas,
we'd get this "pure OO" Rakefile:

class TgzTask
def initialize(version)
@version = version
end
def execute
sh "tar -czf my_li...@version.tgz lib"
end
end

my_lib_version = "1.0.2"

task :tgz, TgzTask.new(my_lib_version)

All context we need in our method (local variables,
eventually the current "self") has to be explicetely
passed to the constructor, which has to initialize
our object etc. Rake would loose all its appeal.

a lambda is a special object - on that knows about every variable in
scope. have fun maintaining code that populates that object by hand ;-)

the entire point of lambdas is that the language already *has* a
scope. so, sure, you can cherry pick the required variables and
populate an object, but you can also make loops with GOTO - lambda is
merely an abstraction.

the 'definite' bit comes in because you don't HAVE to do ANYTHING.
you simply write this code

sum = 0

list.each do |i|

sum += i

end

and you don't have to write anything special, the environment is
captured, the code is evaulated in the captured context, but you don't
have to build a special summing function that take i and a sum var.

so it 'definitely' is an advantage - that is unless you don't happen
to think less code is advantageous over more...

Short answer: they are more more concise and convenient.

Ever use C++ STL? In this library a "functor" is a very important concept
(for various comparators, visiting objects, etc). You make a functor by
defining a class with a primary method for functor's functionality
("operator()"). It might also have some state (possibly maintained through
other methods) or references to things external to the functor.

In ruby, this type of thing is done with blocks and lambdas. But, it is a
lot more concise and convenient. Because blocks/lambdas have access to
variables in the scope where they are defined (which can also be used to
create state), there shouldn't be a need to create dedicated "functor"
classes.

One main use is precisely when you don't need to pass anything around - you
need a one-off function, and probably the function isn't particularly
complicated. Typical examples are when supplying a code block to a sort,
group, map or filter function.

Are they needed? No. But then again, neither are subroutines or modules or
for loops...

the lambda expression came from the lisp community, it's kind of
abstraction of procedures.
in oo languages it's usually difficult to extend methods than extend
data structures.
ruby or other modern programming languages did a great job to mix them together.
well , back to the topic, imo to fully understand the power of
lambda(or abstraction), one has to look into the lisp/scheme world :)

Lambda comes from lambda calculus. The fact that LISP uses them is just a
happy coincidence.

But let's compare LISP and Ruby for a moment.

In LISP, any time you want to pass an unnamed ad-hoc function to another
function, you define it like (lambda (var1 var2) (code)), so you wind up
using the lambda macro a lot. You might have
(mapcar #'(lambda (x) (* x x)) '(1 2 3 4))
which returns
(1 4 9 16)

In Ruby, you do this kind of thing a lot too. Only we have syntactic
sugar that makes things a little nicer in many cases. The equivalent code
to the LISP example is
[1 2 3 4].map{|x| x*x}
so you just used a lambda, but didn't have to type the keyword.

There's one thing to know though. Kernel#proc and Kernel#lambda have
slightly different semantics when it comes to the return, next, and break
keywords. Kernel#lambda does things one way, and Kernel#proc or a bare
block do things the other way. So really, Ruby uses lambdas a lot (maybe
even more than LISP) but we just don't use the term very much, mostly
because we've shortened the syntax.

I like to use them when I have to efficiently choose an algorithm based
on some value:

algos = {
"print" => lambda {|x| puts x},
"ignore" => lambda {|x| },
"log" => lambda {|x| File.open("log","w") {|io| io.puts x}},

}

Now you can efficiently call a function based on some input

...each do |x,y|
algos[x][y]
end

Yes, I know the example is artificial and yes, you can do it with an
object and #send as well. But if keys are not Strings or have different
types then this approach is simpler.

Here is the link to the actual thread : http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/643980216d5c3356/2d0af8f6eabf9fb3?lnk=gst&q=proc#2d0af8f6eabf9fb3

Saturday, April 12, 2008

Changing the transparency of terminal in Mac OS Leopard

Go to Terminal -> Preferences, Window tab, Background Color and change the opacity to whatever you like. The window will change as you change the percentage of opacity.

make: yacc: Command not found on CentOS

When I was installing monit on CentOS 5, I got that error message when make was executed. The solution is to install byacc:

yum install byacc

Thursday, April 10, 2008

How to install Mongrel on CentOS 5

If you dont' have ruby-devel installed you will get the following error:

can't find header files for ruby

yum install ruby-devel

gem install mongrel



[root@rubyplus rubygems-1.1.0]# yum install -y postfix
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for postfix to pack into transaction set.
postfix-2.3.3-2.i386.rpm 100% |=========================| 41 kB 00:00
---> Package postfix.i386 2:2.3.3-2 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
postfix i386 2:2.3.3-2 base 3.6 M

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 3.6 M
Downloading Packages:
(1/1): postfix-2.3.3-2.i3 100% |=========================| 3.6 MB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: postfix ######################### [1/1]

Installed: postfix.i386 2:2.3.3-2
Complete!
[root@rubyplus rubygems-1.1.0]# chkconfig postfix on
[root@rubyplus rubygems-1.1.0]# mysqladmin -u root password 'esterc500mg'
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
[root@rubyplus rubygems-1.1.0]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# which mysql
/usr/bin/mysql
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysqladmin -uroot
/usr/bin/mysqladmin Ver 8.41 Distrib 5.0.22, for redhat-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Administration program for the mysqld daemon.
Usage: /usr/bin/mysqladmin [OPTIONS] command command....
-c, --count=# Number of iterations to make. This works with -i
(--sleep) only.
-#, --debug[=name] Output debug log. Often this is 'd:t:o,filename'.
-f, --force Don't ask for confirmation on drop database; with
multiple commands, continue even if an error occurs.
-C, --compress Use compression in server/client protocol.
--character-sets-dir=name
Directory where character sets are.
--default-character-set=name
Set the default character set.
-?, --help Display this help and exit.
-h, --host=name Connect to host.
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
-P, --port=# Port number to use for connection.
--protocol=name The protocol of connection (tcp,socket,pipe,memory).
-r, --relative Show difference between current and previous values when
used with -i. Currently works only with extended-status.
-O, --set-variable=name
Change the value of a variable. Please note that this
option is deprecated; you can set variables directly with
--variable-name=value.
-s, --silent Silently exit if one can't connect to server.
-S, --socket=name Socket file to use for connection.
-i, --sleep=# Execute commands again and again with a sleep between.
--ssl Enable SSL for connection (automatically enabled with
other flags). Disable with --skip-ssl.
--ssl-key=name X509 key in PEM format (implies --ssl).
--ssl-cert=name X509 cert in PEM format (implies --ssl).
--ssl-ca=name CA file in PEM format (check OpenSSL docs, implies
--ssl).
--ssl-capath=name CA directory (check OpenSSL docs, implies --ssl).
--ssl-cipher=name SSL cipher to use (implies --ssl).
-u, --user=name User for login if not current user.
-v, --verbose Write more information.
-V, --version Output version information and exit.
-E, --vertical Print output vertically. Is similar to --relative, but
prints output vertically.
-w, --wait[=#] Wait and retry if connection is down.
--connect_timeout=#
--shutdown_timeout=#

Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- -----------------------------
count 0
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set (No default value)
host (No default value)
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-key (No default value)
ssl-cert (No default value)
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cipher (No default value)
user root
verbose FALSE
vertical FALSE
connect_timeout 43200
shutdown_timeout 3600

Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf /etc/my.cnf
The following groups are read: mysqladmin client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read

Where command is a one or more of: (Commands may be shortened)
create databasename Create a new database
debug Instruct server to write debug information to log
drop databasename Delete a database and all its tables
extended-status Gives an extended status message from the server
flush-hosts Flush all cached hosts
flush-logs Flush all logs
flush-status Clear status variables
flush-tables Flush all tables
flush-threads Flush the thread cache
flush-privileges Reload grant tables (same as reload)
kill id,id,... Kill mysql threads
password new-password Change old password to new-password, MySQL 4.1 hashing.
old-password new-password Change old password to new-password in old format.

ping Check if mysqld is alive
processlist Show list of active threads in server
reload Reload grant tables
refresh Flush all tables and close and open logfiles
shutdown Take server down
status Gives a short status message from the server
start-slave Start slave
stop-slave Stop slave
variables Prints variables available
version Get version info from server
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# sudo gem install rails -y
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you list
Bulk updating Gem source index for: http://gems.rubyforge.org/
Successfully installed rake-0.8.1
Successfully installed activesupport-2.0.2
Successfully installed activerecord-2.0.2
Successfully installed actionpack-2.0.2
Successfully installed actionmailer-2.0.2
Successfully installed activeresource-2.0.2
Successfully installed rails-2.0.2
7 gems installed
Installing ri documentation for rake-0.8.1...
Installing ri documentation for activesupport-2.0.2...
Installing ri documentation for activerecord-2.0.2...
Installing ri documentation for actionpack-2.0.2...
Installing ri documentation for actionmailer-2.0.2...
Installing ri documentation for activeresource-2.0.2...
Installing RDoc documentation for rake-0.8.1...
Installing RDoc documentation for activesupport-2.0.2...
Installing RDoc documentation for activerecord-2.0.2...
Installing RDoc documentation for actionpack-2.0.2...
Installing RDoc documentation for actionmailer-2.0.2...
Installing RDoc documentation for activeresource-2.0.2...
[root@rubyplus rubygems-1.1.0]# sudo gem install mongrel
Building native extensions. This could take a while...
ERROR: Error installing mongrel:
ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb install mongrel
can't find header files for ruby.


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/fastthread-1.0.1 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/fastthread-1.0.1/ext/fastthread/gem_make.out
[root@rubyplus rubygems-1.1.0]#

Installation notes

[root@rubyplus rubygems-1.1.0]# yum install -y postfix
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for postfix to pack into transaction set.
postfix-2.3.3-2.i386.rpm 100% |=========================| 41 kB 00:00
---> Package postfix.i386 2:2.3.3-2 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
postfix i386 2:2.3.3-2 base 3.6 M

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 3.6 M
Downloading Packages:
(1/1): postfix-2.3.3-2.i3 100% |=========================| 3.6 MB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: postfix ######################### [1/1]

Installed: postfix.i386 2:2.3.3-2
Complete!
[root@rubyplus rubygems-1.1.0]# chkconfig postfix on
[root@rubyplus rubygems-1.1.0]# mysqladmin -u root password 'new_password_here'
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
[root@rubyplus rubygems-1.1.0]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# which mysql
/usr/bin/mysql
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysqladmin -uroot
/usr/bin/mysqladmin Ver 8.41 Distrib 5.0.22, for redhat-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Administration program for the mysqld daemon.
Usage: /usr/bin/mysqladmin [OPTIONS] command command....
-c, --count=# Number of iterations to make. This works with -i
(--sleep) only.
-#, --debug[=name] Output debug log. Often this is 'd:t:o,filename'.
-f, --force Don't ask for confirmation on drop database; with
multiple commands, continue even if an error occurs.
-C, --compress Use compression in server/client protocol.
--character-sets-dir=name
Directory where character sets are.
--default-character-set=name
Set the default character set.
-?, --help Display this help and exit.
-h, --host=name Connect to host.
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
-P, --port=# Port number to use for connection.
--protocol=name The protocol of connection (tcp,socket,pipe,memory).
-r, --relative Show difference between current and previous values when
used with -i. Currently works only with extended-status.
-O, --set-variable=name
Change the value of a variable. Please note that this
option is deprecated; you can set variables directly with
--variable-name=value.
-s, --silent Silently exit if one can't connect to server.
-S, --socket=name Socket file to use for connection.
-i, --sleep=# Execute commands again and again with a sleep between.
--ssl Enable SSL for connection (automatically enabled with
other flags). Disable with --skip-ssl.
--ssl-key=name X509 key in PEM format (implies --ssl).
--ssl-cert=name X509 cert in PEM format (implies --ssl).
--ssl-ca=name CA file in PEM format (check OpenSSL docs, implies
--ssl).
--ssl-capath=name CA directory (check OpenSSL docs, implies --ssl).
--ssl-cipher=name SSL cipher to use (implies --ssl).
-u, --user=name User for login if not current user.
-v, --verbose Write more information.
-V, --version Output version information and exit.
-E, --vertical Print output vertically. Is similar to --relative, but
prints output vertically.
-w, --wait[=#] Wait and retry if connection is down.
--connect_timeout=#
--shutdown_timeout=#

Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- -----------------------------
count 0
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set (No default value)
host (No default value)
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-key (No default value)
ssl-cert (No default value)
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cipher (No default value)
user root
verbose FALSE
vertical FALSE
connect_timeout 43200
shutdown_timeout 3600

Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf /etc/my.cnf
The following groups are read: mysqladmin client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read

Where command is a one or more of: (Commands may be shortened)
create databasename Create a new database
debug Instruct server to write debug information to log
drop databasename Delete a database and all its tables
extended-status Gives an extended status message from the server
flush-hosts Flush all cached hosts
flush-logs Flush all logs
flush-status Clear status variables
flush-tables Flush all tables
flush-threads Flush the thread cache
flush-privileges Reload grant tables (same as reload)
kill id,id,... Kill mysql threads
password new-password Change old password to new-password, MySQL 4.1 hashing.
old-password new-password Change old password to new-password in old format.

ping Check if mysqld is alive
processlist Show list of active threads in server
reload Reload grant tables
refresh Flush all tables and close and open logfiles
shutdown Take server down
status Gives a short status message from the server
start-slave Start slave
stop-slave Stop slave
variables Prints variables available
version Get version info from server
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# /usr/bin/mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@rubyplus rubygems-1.1.0]# sudo gem install rails -y
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you list
Bulk updating Gem source index for: http://gems.rubyforge.org/
Successfully installed rake-0.8.1
Successfully installed activesupport-2.0.2
Successfully installed activerecord-2.0.2
Successfully installed actionpack-2.0.2
Successfully installed actionmailer-2.0.2
Successfully installed activeresource-2.0.2
Successfully installed rails-2.0.2
7 gems installed
Installing ri documentation for rake-0.8.1...
Installing ri documentation for activesupport-2.0.2...
Installing ri documentation for activerecord-2.0.2...
Installing ri documentation for actionpack-2.0.2...
Installing ri documentation for actionmailer-2.0.2...
Installing ri documentation for activeresource-2.0.2...
Installing RDoc documentation for rake-0.8.1...
Installing RDoc documentation for activesupport-2.0.2...
Installing RDoc documentation for activerecord-2.0.2...
Installing RDoc documentation for actionpack-2.0.2...
Installing RDoc documentation for actionmailer-2.0.2...
Installing RDoc documentation for activeresource-2.0.2...
[root@rubyplus rubygems-1.1.0]# sudo gem install mongrel
Building native extensions. This could take a while...
ERROR: Error installing mongrel:
ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb install mongrel
can't find header files for ruby.


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/fastthread-1.0.1 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/fastthread-1.0.1/ext/fastthread/gem_make.out
[root@rubyplus rubygems-1.1.0]#

rubygems 1.1.0 on CentOS 5

ruby setup.rb
./lib/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rdoc/rdoc (LoadError)
from ./lib/rubygems/custom_require.rb:27:in `require'
from setup.rb:48

Rubygems is retarded, it will puke until you install ruby-rdoc and rdoc to install the rubygems 1.1

yum install ruby-rdoc

Download rubygems
wget http://rubyforge.org/frs/download.php/34638/rubygems-1.1.0.tgz
cd rubygems-1.1.0.tgz
Extract
tar -xvzf rubygems-1.1.0.tgz
ruby setup.rb

Installing Nginx on CentOS 5

[root@rubyplus etc]# yum install pcre
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
base 100% |=========================| 1.1 kB 00:00
updates 951 B 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for pcre to pack into transaction set.
pcre-6.6-2.el5_1.7.i386.r 100% |=========================| 7.4 kB 00:00
---> Package pcre.i386 0:6.6-2.el5_1.7 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Updating:
pcre i386 6.6-2.el5_1.7 updates 112 k

Transaction Summary
=============================================================================
Install 0 Package(s)
Update 1 Package(s)
Remove 0 Package(s)

Total download size: 112 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): pcre-6.6-2.el5_1.7.i386.rpm 112 kB 00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : pcre ######################### [1/2]
Cleanup : pcre ######################### [2/2]

Updated: pcre.i386 0:6.6-2.el5_1.7
Complete!
[root@rubyplus etc]# yum install pcre-devel
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for pcre-devel to pack into transaction set.
pcre-devel-6.6-2.el5_1.7. 100% |=========================| 10 kB 00:00
---> Package pcre-devel.i386 0:6.6-2.el5_1.7 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
pcre-devel i386 6.6-2.el5_1.7 updates 176 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 176 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): pcre-devel-6.6-2.el5_1.7.i386.rpm 176 kB 00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: pcre-devel ######################### [1/1]

Installed: pcre-devel.i386 0:6.6-2.el5_1.7
Complete!
[root@rubyplus etc]# yum install zlib
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# yum install zlib-devel
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# yum install openssl
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# yum install openssl-devel
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with
-http_sub_module --with-http_dav_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-cc-opt="-I /usr/include/pcre" --pid-path=/var/run/ngin
x.pid --lock-path=/var/lock/subsys/nginx --conf-path=/etc/nginx/nginx.conf
-bash: ./configure: No such file or directory
[root@rubyplus etc]#
[root@rubyplus etc]# wget http://sysoev.ru/nginx/nginx-0.5.35.tar.gz
--12:44:58-- http://sysoev.ru/nginx/nginx-0.5.35.tar.gz
Resolving sysoev.ru... 81.19.69.70
Connecting to sysoev.ru|81.19.69.70|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 488926 (477K) [application/octet-stream]
Saving to: `nginx-0.5.35.tar.gz'

100%[===============================================================================================================================>] 488,926 48.7K/s in 9.3s

12:45:08 (51.3 KB/s) - `nginx-0.5.35.tar.gz' saved [488926/488926]

[root@rubyplus etc]# tar xzvf nginx-0.5.35.tar.gz
nginx-0.5.35/



nginx-0.5.35/contrib/unicode2nginx/koi-utf
[root@rubyplus etc]# cd nginx-0.5.35
[root@rubyplus nginx-0.5.35]# ./configure --sbin-path=/sbin/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module
--with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1
checking for OS
+ Linux 2.6.18-53.1.6.el5.028stab053.6PAE i686
checking for C compiler ... not found

./configure: error: C compiler gcc is not found

[root@rubyplus nginx-0.5.35]# yum install gcc
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for gcc to pack into transaction set.
gcc-4.1.2-14.el5.i386.rpm 100% |=========================| 64 kB 00:00
---> Package gcc.i386 0:4.1.2-14.el5 set to be updated
--> Running transaction check
--> Processing Dependency: libgomp.so.1 for package: gcc
--> Processing Dependency: binutils >= 2.17.50.0.2-8 for package: gcc
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc
glibc-common-2.5-18.el5_1 100% |=========================| 723 kB 00:00
---> Package glibc-common.i386 0:2.5-18.el5_1.1 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
gcc i386 4.1.2-14.el5 base 5.2 M
Installing for dependencies:
binutils i386 2.17.50.0.6-5.el5 base 2.9 M
cpp i386 4.1.2-14.el5 base 2.6 M
glibc-devel i386 2.5-18.el5_1.1 updates 2.0 M
glibc-headers i386 2.5-18.el5_1.1 updates 609 k
libgomp i386 4.1.2-14.el5 base 76 k
Updating for dependencies:
glibc i686 2.5-18.el5_1.1 updates 5.1 M
glibc-common i386 2.5-18.el5_1.1 updates 16 M
libgcc i386 4.1.2-14.el5 base 87 k

Transaction Summary
=============================================================================
Install 6 Package(s)
Update 3 Package(s)
Remove 0 Package(s)

Total download size: 35 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): binutils-2.17.50.0 100% |=========================| 2.9 MB 00:03
(2/9): gcc-4.1.2-14.el5.i 100% |=========================| 5.2 MB 00:07
(3/9): libgcc-4.1.2-14.el 100% |=========================| 87 kB 00:00
(4/9): libgomp-4.1.2-14.e 100% |=========================| 76 kB 00:00
(5/9): glibc-2.5-18.el5_1 100% |=========================| 5.1 MB 00:02
(6/9): cpp-4.1.2-14.el5.i 100% |=========================| 2.6 MB 00:02
(7/9): glibc-headers-2.5- 100% |=========================| 609 kB 00:00
(8/9): glibc-common-2.5-1 100% |=========================| 16 MB 00:07
(9/9): glibc-devel-2.5-18 100% |=========================| 2.0 MB 00:01
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : libgcc ####################### [ 1/12]
Updating : glibc-common ####################### [ 2/12]
Updating : glibc ####################### [ 3/12]
Installing: binutils ####################### [ 4/12]
Installing: libgomp ####################### [ 5/12]
Installing: cpp ####################### [ 6/12]
Installing: glibc-headers ####################### [ 7/12]
Installing: glibc-devel ####################### [ 8/12]
Installing: gcc ####################### [ 9/12]
Cleanup : libgcc ####################### [10/12]
Cleanup : glibc ####################### [11/12]
Cleanup : glibc-common ####################### [12/12]

Installed: gcc.i386 0:4.1.2-14.el5
Dependency Installed: binutils.i386 0:2.17.50.0.6-5.el5 cpp.i386 0:4.1.2-14.el5 glibc-devel.i386 0:2.5-18.el5_1.1 glibc-headers.i386 0:2.5-18.el5_1.1 libgomp.i386 0:4.1.2-14.el5
Dependency Updated: glibc.i686 0:2.5-18.el5_1.1 glibc-common.i386 0:2.5-18.el5_1.1 libgcc.i386 0:4.1.2-14.el5
Complete!
[root@rubyplus nginx-0.5.35]# ./configure --sbin-path=/sbin/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module
--with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1
checking for OS
+ Linux 2.6.18-53.1.6.el5.028stab053.6PAE i686
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.1.2 20070626 (Red Hat 4.1.2-14)
checking for gcc -pipe switch ... found
checking for gcc variadic macros ... found
checking for C99 variadic macros ... found
checking for unistd.h ... found

checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found

Configuration summary
+ threads are not used
+ using system PCRE library
+ using system OpenSSL library
+ using md5 library: auto/lib/md5
+ using sha1 library: auto/lib/sha1
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/sbin/nginx"
nginx configuration file: "/usr/local/nginx/nginx.conf"
nginx pid file: "/usr/local/nginx/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "/usr/local/nginx/client_body_temp"
nginx http proxy temporary files: "/usr/local/nginx/proxy_temp"
nginx http fastcgi temporary files: "/usr/local/nginx/fastcgi_temp"

Run:
make
make install

Installing MySQL server on Centos 5

Followed the instructions on this blog post : Rails Stack on CentOS 5

The following instructions has the chkconfig which works. The given instruction on the blog for that does not work.

[root@rubyplus etc]# yum install which
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for which to pack into transaction set.
which-2.16-7.i386.rpm 100% |=========================| 6.5 kB 00:00
---> Package which.i386 0:2.16-7 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
which i386 2.16-7 base 23 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 23 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): which-2.16-7.i386. 100% |=========================| 23 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: which ######################### [1/1]

Installed: which.i386 0:2.16-7
Complete!
[root@rubyplus etc]# which mysql
which: no mysql in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
[root@rubyplus etc]# yum install mysql-server
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for mysql-server to pack into transaction set.
mysql-server-5.0.22-2.2.e 100% |=========================| 33 kB 00:00
---> Package mysql-server.i386 0:5.0.22-2.2.el5_1.1 set to be updated
--> Running transaction check
--> Processing Dependency: libmysqlclient_r.so.15 for package: mysql-server
--> Processing Dependency: libmysqlclient.so.15 for package: mysql-server
--> Processing Dependency: perl-DBI for package: mysql-server
--> Processing Dependency: mysql = 5.0.22-2.2.el5_1.1 for package: mysql-server
--> Processing Dependency: perl-DBD-MySQL for package: mysql-server
--> Processing Dependency: libmysqlclient_r.so.15(libmysqlclient_15) for package: mysql-server
--> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15) for package: mysql-server
--> Processing Dependency: perl(DBI) for package: mysql-server
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for perl-DBD-MySQL to pack into transaction set.
perl-DBD-MySQL-3.0007-1.f 100% |=========================| 8.3 kB 00:00
---> Package perl-DBD-MySQL.i386 0:3.0007-1.fc6 set to be updated
---> Downloading header for mysql to pack into transaction set.
mysql-5.0.22-2.2.el5_1.1. 100% |=========================| 36 kB 00:00
---> Package mysql.i386 0:5.0.22-2.2.el5_1.1 set to be updated
---> Downloading header for perl-DBI to pack into transaction set.
perl-DBI-1.52-1.fc6.i386. 100% |=========================| 16 kB 00:00
---> Package perl-DBI.i386 0:1.52-1.fc6 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
mysql-server i386 5.0.22-2.2.el5_1.1 updates 10 M
Installing for dependencies:
mysql i386 5.0.22-2.2.el5_1.1 updates 3.0 M
perl-DBD-MySQL i386 3.0007-1.fc6 base 147 k
perl-DBI i386 1.52-1.fc6 base 605 k

Transaction Summary
=============================================================================
Install 4 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 14 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): perl-DBD-MySQL-3.0 100% |=========================| 147 kB 00:00
(2/4): mysql-5.0.22-2.2.e 100% |=========================| 3.0 MB 00:01
(3/4): mysql-server-5.0.2 100% |=========================| 10 MB 00:04
(4/4): perl-DBI-1.52-1.fc 100% |=========================| 605 kB 00:01
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: perl-DBI ######################### [1/4]
Installing: mysql ######################### [2/4]
Installing: perl-DBD-MySQL ######################### [3/4]
Installing: mysql-server ######################### [4/4]

Installed: mysql-server.i386 0:5.0.22-2.2.el5_1.1
Dependency Installed: mysql.i386 0:5.0.22-2.2.el5_1.1 perl-DBD-MySQL.i386 0:3.0007-1.fc6 perl-DBI.i386 0:1.52-1.fc6
Complete!
[root@rubyplus etc]# yum install mysql
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# yum install mysql-devel
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for mysql-devel to pack into transaction set.
mysql-devel-5.0.22-2.2.el 100% |=========================| 28 kB 00:00
---> Package mysql-devel.i386 0:5.0.22-2.2.el5_1.1 set to be updated
--> Running transaction check
--> Processing Dependency: openssl-devel for package: mysql-devel
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for openssl-devel to pack into transaction set.
openssl-devel-0.9.8b-8.3. 100% |=========================| 142 kB 00:00
---> Package openssl-devel.i386 0:0.9.8b-8.3.el5_0.2 set to be updated
--> Running transaction check
--> Processing Dependency: openssl = 0.9.8b-8.3.el5_0.2 for package: openssl-devel
--> Processing Dependency: zlib-devel for package: openssl-devel
--> Processing Dependency: krb5-devel for package: openssl-devel
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for openssl to pack into transaction set.
openssl-0.9.8b-8.3.el5_0. 100% |=========================| 35 kB 00:00
---> Package openssl.i686 0:0.9.8b-8.3.el5_0.2 set to be updated
---> Downloading header for zlib-devel to pack into transaction set.
zlib-devel-1.2.3-3.i386.r 100% |=========================| 7.0 kB 00:00
---> Package zlib-devel.i386 0:1.2.3-3 set to be updated
---> Downloading header for krb5-devel to pack into transaction set.
krb5-devel-1.6.1-17.el5_1 100% |=========================| 48 kB 00:00
---> Package krb5-devel.i386 0:1.6.1-17.el5_1.1 set to be updated
--> Running transaction check
--> Processing Dependency: krb5-libs = 1.6.1-17.el5_1.1 for package: krb5-devel
--> Processing Dependency: e2fsprogs-devel for package: krb5-devel
--> Processing Dependency: libkeyutils.so.1 for package: krb5-devel
--> Processing Dependency: libselinux-devel for package: krb5-devel
--> Processing Dependency: keyutils-libs-devel for package: krb5-devel
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for keyutils-libs to pack into transaction set.
keyutils-libs-1.2-1.el5.i 100% |=========================| 5.0 kB 00:00
---> Package keyutils-libs.i386 0:1.2-1.el5 set to be updated
---> Downloading header for libselinux-devel to pack into transaction set.
libselinux-devel-1.33.4-4 100% |=========================| 45 kB 00:00
---> Package libselinux-devel.i386 0:1.33.4-4.el5 set to be updated
---> Downloading header for krb5-libs to pack into transaction set.
krb5-libs-1.6.1-17.el5_1. 100% |=========================| 45 kB 00:00
---> Package krb5-libs.i386 0:1.6.1-17.el5_1.1 set to be updated
---> Downloading header for e2fsprogs-devel to pack into transaction set.
e2fsprogs-devel-1.39-10.e 100% |=========================| 24 kB 00:00
---> Package e2fsprogs-devel.i386 0:1.39-10.el5_1.1 set to be updated
---> Downloading header for keyutils-libs-devel to pack into transaction set.
keyutils-libs-devel-1.2-1 100% |=========================| 6.7 kB 00:00
---> Package keyutils-libs-devel.i386 0:1.2-1.el5 set to be updated
--> Running transaction check
--> Processing Dependency: e2fsprogs-libs = 1.39-10.el5_1.1 for package: e2fsprogs-devel
--> Processing Dependency: libselinux = 1.33.4-4.el5 for package: libselinux-devel
--> Processing Dependency: libsepol-devel >= 1.15.2-1 for package: libselinux-devel
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for libselinux to pack into transaction set.
libselinux-1.33.4-4.el5.i 100% |=========================| 38 kB 00:00
---> Package libselinux.i386 0:1.33.4-4.el5 set to be updated
---> Downloading header for e2fsprogs-libs to pack into transaction set.
e2fsprogs-libs-1.39-10.el 100% |=========================| 19 kB 00:00
---> Package e2fsprogs-libs.i386 0:1.39-10.el5_1.1 set to be updated
---> Downloading header for libsepol-devel to pack into transaction set.
libsepol-devel-1.15.2-1.e 100% |=========================| 29 kB 00:00
---> Package libsepol-devel.i386 0:1.15.2-1.el5 set to be updated
--> Running transaction check
--> Processing Dependency: libselinux = 1.33.4-2.el5 for package: libselinux-python
--> Processing Dependency: e2fsprogs-libs = 1.39-8.el5 for package: e2fsprogs
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for libselinux-python to pack into transaction set.
libselinux-python-1.33.4- 100% |=========================| 35 kB 00:00
---> Package libselinux-python.i386 0:1.33.4-4.el5 set to be updated
---> Downloading header for e2fsprogs to pack into transaction set.
e2fsprogs-1.39-10.el5_1.1 100% |=========================| 25 kB 00:00
---> Package e2fsprogs.i386 0:1.39-10.el5_1.1 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
mysql-devel i386 5.0.22-2.2.el5_1.1 updates 2.4 M
Installing for dependencies:
e2fsprogs-devel i386 1.39-10.el5_1.1 updates 563 k
keyutils-libs i386 1.2-1.el5 base 18 k
keyutils-libs-devel i386 1.2-1.el5 base 27 k
krb5-devel i386 1.6.1-17.el5_1.1 updates 1.9 M
libselinux-devel i386 1.33.4-4.el5 base 131 k
libsepol-devel i386 1.15.2-1.el5 base 189 k
openssl-devel i386 0.9.8b-8.3.el5_0.2 base 1.8 M
zlib-devel i386 1.2.3-3 base 101 k
Updating for dependencies:
e2fsprogs i386 1.39-10.el5_1.1 updates 960 k
e2fsprogs-libs i386 1.39-10.el5_1.1 updates 114 k
krb5-libs i386 1.6.1-17.el5_1.1 updates 652 k
libselinux i386 1.33.4-4.el5 base 94 k
libselinux-python i386 1.33.4-4.el5 base 55 k
openssl i686 0.9.8b-8.3.el5_0.2 base 1.4 M

Transaction Summary
=============================================================================
Install 9 Package(s)
Update 6 Package(s)
Remove 0 Package(s)

Total download size: 10 M
Is this ok [y/N]: y
Downloading Packages:
(1/15): openssl-0.9.8b-8. 100% |=========================| 1.4 MB 00:01
(2/15): libselinux-1.33.4 100% |=========================| 94 kB 00:00
(3/15): mysql-devel-5.0.2 100% |=========================| 2.4 MB 00:01
(4/15): keyutils-libs-1.2 100% |=========================| 18 kB 00:00
(5/15): e2fsprogs-libs-1. 100% |=========================| 114 kB 00:00
(6/15): libselinux-devel- 100% |=========================| 131 kB 00:00
(7/15): zlib-devel-1.2.3- 100% |=========================| 101 kB 00:00
(8/15): libselinux-python 100% |=========================| 55 kB 00:00
(9/15): openssl-devel-0.9 100% |=========================| 1.8 MB 00:02
(10/15): e2fsprogs-1.39-1 100% |=========================| 960 kB 00:00
(11/15): krb5-libs-1.6.1- 100% |=========================| 652 kB 00:00
(12/15): e2fsprogs-devel- 100% |=========================| 563 kB 00:00
(13/15): keyutils-libs-de 100% |=========================| 27 kB 00:00
(14/15): libsepol-devel-1 100% |=========================| 189 kB 00:00
(15/15): krb5-devel-1.6.1 100% |=========================| 1.9 MB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : e2fsprogs-libs ####################### [ 1/21]
Updating : libselinux ####################### [ 2/21]
Installing: keyutils-libs ####################### [ 3/21]
Updating : krb5-libs ####################### [ 4/21]
Updating : openssl ####################### [ 5/21]
Installing: keyutils-libs-devel ####################### [ 6/21]
Installing: e2fsprogs-devel ####################### [ 7/21]
Installing: libsepol-devel ####################### [ 8/21]
Installing: libselinux-devel ####################### [ 9/21]
Installing: krb5-devel ####################### [10/21]
Installing: zlib-devel ####################### [11/21]
Installing: openssl-devel ####################### [12/21]
Installing: mysql-devel ####################### [13/21]
Updating : libselinux-python ####################### [14/21]
Updating : e2fsprogs ####################### [15/21]
Cleanup : openssl ####################### [16/21]
Cleanup : libselinux ####################### [17/21]
Cleanup : e2fsprogs-libs ####################### [18/21]
Cleanup : libselinux-python ####################### [19/21]
Cleanup : e2fsprogs ####################### [20/21]
Cleanup : krb5-libs ####################### [21/21]

Installed: mysql-devel.i386 0:5.0.22-2.2.el5_1.1
Dependency Installed: e2fsprogs-devel.i386 0:1.39-10.el5_1.1 keyutils-libs.i386 0:1.2-1.el5 keyutils-libs-devel.i386 0:1.2-1.el5 krb5-devel.i386 0:1.6.1-17.el5_1.1 libselinux-devel.i386 0:1.33.4-4.el5 libsepol-devel.i386 0:1.15.2-1.el5 openssl-devel.i386 0:0.9.8b-8.3.el5_0.2 zlib-devel.i386 0:1.2.3-3
Dependency Updated: e2fsprogs.i386 0:1.39-10.el5_1.1 e2fsprogs-libs.i386 0:1.39-10.el5_1.1 krb5-libs.i386 0:1.6.1-17.el5_1.1 libselinux.i386 0:1.33.4-4.el5 libselinux-python.i386 0:1.33.4-4.el5 openssl.i686 0:0.9.8b-8.3.el5_0.2
Complete!
[root@rubyplus etc]# sudo checkconfig --level 345 mysqld on
sudo: checkconfig: command not found
[root@rubyplus etc]# yum install checkconfig
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
[root@rubyplus etc]# sudo checkconfig --level 345 mysqld on
sudo: checkconfig: command not found
[root@rubyplus etc]# chkconfig --level 345 mysqld on

Could not retrieve mirrorlist on CentOS 5.0

Problem:

# yum install ruby
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=5&arch=i386&repo=os error was
[Errno 4] IOError:
Error: Cannot find a valid baseurl for repo: base

Resolution:

Add the nameserver entry to your /etc/resolv.conf file.

-----
nameserver 1.2.3.4

Replace 1.2.3.4 with the actual values for your server

Wednesday, April 09, 2008

How to find out the version of CentOS?

[root@rubyplus ~]# uname -a
Linux rubyplus.tempdomain.com 2.6.18-53.1.6.el5.028stab053.6PAE #1 SMP Mon Feb 11 20:53:20 MSK 2008 i686 i686 i386 GNU/Linux

Doesnt tell much

[root@rubyplus ~]# rpm -qa | grep centos
filesystem-2.4.0-1.el5.centos
basesystem-8.0-5.1.1.el5.centos
procmail-3.22-17.1.el5.centos
initscripts-8.45.14.EL-1.el5.centos.1
httpd-2.2.3-6.el5.centos.1
setuptool-1.19.2-1.el5.centos
centos-release-notes-5.0.0-2
gzip-1.3.5-9.el5.centos
centos-release-5-0.0.el5.centos.2
httpd-manual-2.2.3-6.el5.centos.1
yum-3.0.5-1.el5.centos.2

Says what's installed.

[root@rubyplus ~]# cat /etc/issue
CentOS release 5 (Final)
Kernel \r on an \m

This is clear.

Saturday, April 05, 2008

Authorize.net CIM and ARB

CIM cannot be used in combination with the ARB Service. These are two totally separate services.

Customer Information Manager (CIM) is a new paid service that allows merchants to store their
customers’ sensitive payment information on our secure servers for use in future transactions. CIM
helps eliminate steps in the checkout process for a merchant’s repeat customers, potentially
increasing loyalty and revenue. It can also help merchants comply with the Payment Card Industry (PCI)
Data Security Standard, since customer information is no longer stored on their local servers.

Automated Recurring Billing (ARB) is a powerful tool that enables you to provide a scheduled
recurring billing service to your customers. ARB is completely automated—there’s no manual entry of
transactions required at each billing. The process is simple. You will create an ARB
“subscription” (using a subscription form similar to the Virtual Terminal) that includes the customer’s
payment information, billing amount, and a specific billing interval and duration. The payment
gateway does the rest, generating the subsequent recurring transactions based on the set schedule.
Subscriptions may also be created from eligible previous transactions and via batch upload.

For more details refer the development documentation.

Thursday, April 03, 2008

monit install problem

I was getting error message while ./configure of monit:

checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking whether gcc needs -traditional... no
checking for a BSD-compatible install... /usr/bin/install -c
checking whether make sets $(MAKE)... yes
checking for flex... no
checking for lex... no
checking for yywrap in -lfl... no
checking for yywrap in -ll... no
configure: error: monit requires flex, not lex

Flex was not installed. I installed that via:

apt-get install flex

After doing that, ./configure works fine.

Sunday, March 30, 2008

Upgrading gems from 1.0.1 to 1.1.0

I followed Hivelogic tutorial to install the gems 1.0.1 on Leopard. So I had to use the following commands to upgrade:

sudo gem install rubygems-update
sudo update_rubygems

Note: sudo gem update --system did not work. It installed it in some other directory and gem env was showing version 1.0.1

Thursday, March 27, 2008

Error installing MySQL

sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
Password:
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb install mysql -- --with-mysql-dir=/usr/local/mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/bin/ruby
--with-mysql-config
--without-mysql-config
--with-mysql-dir
--with-mysql-include
--without-mysql-include=${mysql-dir}/include
--with-mysql-lib
--without-mysql-lib=${mysql-dir}/lib
--with-mysqlclientlib
--without-mysqlclientlib
--with-mlib
--without-mlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-zlib
--without-zlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-socketlib
--without-socketlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-nsllib
--without-nsllib
--with-mysqlclientlib
--without-mysqlclientlib


Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out

Fix: You forgot to run make

no acceptable C compiler found in $PATH

If you get this error:

configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1
checking build system type... i686-apple-darwin9.0.0
checking host system type... i686-apple-darwin9.0.0
checking target system type... i686-apple-darwin9.0.0
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

Install XCode to resolve the above issue.

ls command not found in Leopard

Followed the Hivelogic tutorial to install the Rails stack on Leopard. This message was due to the messed up PATH variable in ./bash_login. I deleted the line that was mentioned in the MySQL installation and there is only one line:

export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

That fixed the problem. I had to install the Tinkertool to make the invisible files show up in the Finder so that it can be edited.

Monday, March 24, 2008

cvs login: warning: failed to open /User/user_name/.cvspass for reading: No such file or directory

This error message occured when using CVS to checkout lame.
cvs -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame login

Just ignore it. Continue the checkout:

cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P lame

Voila, it checks out the lame code with no problemo!

Monday, March 10, 2008

Installing Ruby 1.9 on Mac OS X with Ruby 1.8 Intact

Install ReadLine

cd /temp
curl -O http://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
tar xvzf readline-5.2.tar.gz
cd readline-5.2
./configure --prefix=/Users/balaparanj/
sudo make
sudo make install

Install Ruby 1.9

cd /temp
curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz
tar xzvf ruby-1.9.0-0.tar.gz
cd ruby-1.9.0-0
autoconf
sudo ./configure --prefix=/Users/balaparanj/ruby19 --with-readline-dir=/Users/balaparanj/
sudo make
sudo make install

Monday, March 03, 2008

How to Speak - Lecture Tips from Patrick Winston

http://isites.harvard.edu/fs/html/icb.topic58703/winston1.html

Introduction

Success of your career depends on following factors:

1) Ability to speak
2) Ability to write
3) Quality of your ideas

My objective is to prove to you that with knowledge you can be a better speaker. Second objective ...

When I am thru, what I hope to accomplish is to ...

How to Start

1. Outline on the board (with checkboxes)
2. Start with a promise
Say something to the audience that indicates to them how they will be empowered by the talk, how they will be better people by the time you are finished.

The Big Four

1. Cycle (say the concept 3 times)
Repeating reduces the probability that the audience misses a certain point. It is a fact that people lose their attention and think about something else during the presentation.

2. Verbal Punctuation
Keep track of where you are by checking off the boxes on the outline.

3. Near miss
Two or more. Surround the concept with near misses that help to establish its boundaries and provides an effective way to zero-in on just what the concept is about.

4. Ask questions
Frequent easy questions. Wait for 5 seconds before demanding an answer.

5. Time and Place

10:30 or 11 in the morning. Hall must be well lit (with natural light if possible).
It must be full. There are three types of talk: seminar, lecture, theatre. Avoid theatre like ambiance.

6. Blackboard
Well suited because it matches the pace at which people can absorb material. Drawings, icons and lists can be made. Use it as a target to point your hand.

7. Projectors
Do not read slides
Do not stand far away from transparency
Do not use physical pointers
Do not hide slides, use color instead
Do not use paragraphs use bullet points

8. Props

9. Style
To develop your own style, look at other good speakers with a view towards finding points of style that you can adapt to your own skills and situation.
It's ok to be eccentric. It will be useful as a handle if it is entertaining. Use stories.

10. How to stop
Do not thank the audience. Tell a joke. Deliver on the promise. When you conclude, remind people of your promise and exhibit how the promise is fulfilled. Call for answers to questions. Salute the audience.

Ex: This concludes what I have to say, I wish to add only that being here the past few days has been wonderfully stimulating and provacative experience for me. And I look forward to the same kind of interactions frequently in the future.

You can also say: Your questions have been stimulating and provocative.

11. Questions
Are there any questions. You can ask questions to get started.


Thursday, February 07, 2008

Wednesday, February 06, 2008

Sunday, January 20, 2008

Startup Success 2006

Notes from Google video Startup Success 2006

Distribution, Distribution, Distribution. There is no value in consumer Internet company if there is no distribution model. If you are not embarrassed by first version of your product you are too late to market. Keep iterating. Value speed and intelligent feedback.

Persistence, never take no for an answer. Opportunities - one opportunity leads to another. Keep the site very simple. Focus is very important for a startup. One step process, one form. Just do one thing and do it very well. Google - search, Flickr - photo etc.

Two Types of Entrepreneur

Pick an established market and penetrate a niche within it. Ex: Vertical search engine.
Look for patterns in the market and provide a solution. Ex: Wiki product for the non-geeks.

Secrets of a Serial Entrepreneur

Notes from Google video presentation by Mike O'Donnel

Startup Phases & Objectives

Start - Need
Innovate - Product
Sell - Customers
Hire - People
Partner - Channels
Finance - Revenue

Marketing comes after above phases

Six Phases of start-up success:

1. Idea Valuation
2. Product Valuation
3. Market Valuation
4. Channel Valuation
5. People Valuation
6. Revenue Valuation

There is no such thing as serial entrepreneur. There are parallel entrepreneur who run multiple businesses at the same time.

Start: Idea Valuation

All startups are a leap of faith. Founders cannot foresee what will unfold. Based on passion.
The true value of an idea can only be found in its execution
Starting is more important than finishing. Use feedback and learn as you go.
Will is more important than money. Passion, determination and good will of others more important.
It's marathon, not a sprint. Take a long term view.

Innovate: Product Valuation

Key insight, unique and sustainable advantage. How you are going to serve the market.
Nothing succeeds like a working prototype
Rapid development and iteration
Galvanizing event

Sell: Market Valuation

Marquee account, referenceable user
New pain points. Your real business
Cost of customer acquisition and LTV
Does it scale

Hire: People Valuation

1:3 rule. Generalists more valuable than specialists.
Fire yourself. Contract everything and everyone.
Pay for work not for advice.
Leverage "client development" programs.
Advertise for all positions every 6 months.

Partner: Channel Valuation

Leverage the resources of partners. Distribution, customers, people, budget.
Customers make the best salespeople
It's the 'service provider' network, stupid.

Finance: Investor Valuation

The best investors are customers, followed by partners with a strategic stake.
All money has the same value, the costs to acquire it varies greatly.
Investors value the future higher than the present, but base that value on the past.
Tell them whatever they want to hear.
Your chances of being right are better with the money than without it.

Sunday, January 06, 2008

AWDR - Part 2 Screencast Clarifications

In this screencast, admin namespaced products controller is created. This gives products_controller in the admin directory.

The public products_controller has only index and show and the other actions are not needed so we delete them. The admin products controller is capable of all the CRUD operations. So we copy them over to the admin controller. The urls needs to be changed because when we access them as an admin the url on the browser will be:

http://localhost:3000/admin/products

Since we have admin in the url the url helper methods will be different than the public url methods. You can find out the name of the URL methods by doing rake routes in your rails project home directory. Here is the process:

1. Let's say you want to find out the name of the URL helper method to route to update action in admin's products controller.
2. Look at the output of rake routes and find the controller with value admin/products and action with value show. The first column will give you the name of the URL helper you should use in the admin/products_controller and the views under admin/views/ directory.
3. The :id in the /admin/products/:id is a variable that is available in the params hash. You can access it's value in your controller by doing params[:id]. Similarly if you find anything in the second column that is prefixed by : , it means that it is a variable and you can extract it's value in the controller from the params hash.