Sunday, January 06, 2008

Use Ruby language power in command line

Task: Delete file that didn't added to subversion

svn st|grep ?

Then you can get all the files that not added to subversion but the list is with a ?, so It's not easy to delete it with rm

felix@Felix:~/Developments/joblet$ svn st|grep ?
?      aaa
?      bbb
?      ccc

Then I want to trim the ?, awk may simple do the task, but for those who don't know awk. and instead we use Ruby for day to day work.

Ruby gives you the way to do task on command line.

 felix@Felix:~/Developments/joblet$ svn st|grep ?|ruby -pe '$_ = $_[1..-1].strip + "\n"'
 aaa
 bbb
 ccc

felix@Felix:~/Developments/joblet$ rm `svn st|grep ?|ruby -pe '$_ = $_[1..-1].strip + "\n"'`

Thursday, December 13, 2007

Give a ticket number to your subversion commit message when you are using trac

If you give a number when you commit your changes to subversion

    svn commit -m "Fixed Ticket #456"

then Trac will connect the changeset to the Ticket, Wonderful feature, isn't it.

Friday, December 07, 2007

Migrate PostgreSQL 8.1 Data to PostgreSQL 8.2

Install PSQL 8.2

Felix:~ sunfmin$ sudo port install postgresql82

Dump all the PSQL 8.1 Databases to a file

Using The new installed PSQL 8.2 's pg_dumpall to dump all the PSQL 8.1 databases

Felix:~ sunfmin$ /opt/local/lib/postgresql82/bin/pg_dumpall > ~/pg81_all_dump

Initialize PSQL 8.2 Database instance

Felix:~/Developments sunfmin$ sudo su postgres -c '/opt/local/lib/postgresql82/bin/initdb -D /opt/local/var/db/postgresql82/defaultdb'
Password:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /opt/local/var/db/postgresql82/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 32MB/204800
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql82/defaultdb/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /opt/local/lib/postgresql82/bin/postgres -D /opt/local/var/db/postgresql82/defaultdb
or
    /opt/local/lib/postgresql82/bin/pg_ctl -D /opt/local/var/db/postgresql82/defaultdb -l logfile start

Start your database

Felix:~/Developments sunfmin$ sudo su postgres -c "/opt/local/lib/postgresql82/bin/pg_ctl -D /opt/local/var/db/postgresql82/defaultdb -l /opt/local/var/log/postgresql82/postgres.log start"
server starting

You may encounter some problem like this following

Felix:~/Developments sunfmin$ sudo su postgres /opt/local/lib/postgresql82/bin/postgres -D /opt/local/var/db/postgresql82/defaultdb
Password:
/opt/local/lib/postgresql82/bin/postgres: /opt/local/lib/postgresql82/bin/postgres: cannot execute binary file

Felix:~/Developments sunfmin$ sudo  /opt/local/lib/postgresql82/bin/postgres -D /opt/local/var/db/postgresql82/defaultdb
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.


Felix:~/Developments sunfmin$ psql
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Restore all the data

Felix:~ sunfmin$ /opt/local/lib/postgresql82/bin/psql -f pg81_all_dump template1 -U postgres
You are now connected to database "postgres".
SET
SET
SET
CREATE ROLE
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE ROLE
ALTER ROLE
CREATE DATABASE

Failed system call was shmget

When I try to setup PostgreSQL 8.2 on Mac OS X 10.4 , I get the following error.

Felix:~ sunfmin$ sudo su postgres -c '/opt/local/lib/postgresql82/bin/initdb -D /opt/local/var/db/postgresql82/defaultdb'
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /opt/local/var/db/postgresql82/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers/max_fsm_pages ... 400kB/20000
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql82/defaultdb/base/1 ... FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shmget(key=1, size=1646592, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space. To reduce the request size (currently 1646592 bytes), reduce PostgreSQL's shared_buffers parameter (currently 50) and/or its max_connections parameter (currently 10).
The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing data directory "/opt/local/var/db/postgresql82/defaultdb"

Following http://brilliantcorners.org/node/tag/osx

I changed: /etc/rc

sysctl -w kern.sysv.shmmax=4194304 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=1024

to

sysctl -w kern.sysv.shmmax=167772160 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=65536

And Then the problem solved.

Felix:~/Developments sunfmin$ sudo su postgres -c '/opt/local/lib/postgresql82/bin/initdb -D /opt/local/var/db/postgresql82/defaultdb'
Password:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /opt/local/var/db/postgresql82/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 32MB/204800
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql82/defaultdb/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /opt/local/lib/postgresql82/bin/postgres -D /opt/local/var/db/postgresql82/defaultdb
or
    /opt/local/lib/postgresql82/bin/pg_ctl -D /opt/local/var/db/postgresql82/defaultdb -l logfile start

Monday, December 03, 2007

Update itself with single command

It is cool that like gem and MacPorts could update itself with just a single command.

sudo gem update --system
sudo port selfupdate

and also when you can not find software you want in port, don't forget to do a


sudo port -d sync

Saturday, December 01, 2007

Write your blog in Markdown with Emacs and post it directly to Google Blogger

For those who using Emacs, Markdown and Blogger

You write your blog entry in Emacs and with Markdown format Then you issue a M-x blogger-post command in emacs, It convert the markdown to html and post it to your Blogger blog.

How to Install

The code

(require 'gblogger)

(defvar markdown-blogger-new-entry-template
  "<entry xmlns='http://www.w3.org/2005/Atom'>
  <generator url=\"%s\">%s</generator>
  <author> <name>%s </name> </author>
  <title mode=\"escaped\" type=\"text/html\">%s </title>
  <content type='xhtml'>
    <div xmlns=\"http://www.w3.org/1999/xhtml\">
%s
    </div>
  </content>
</entry>"
  "Template for new Blogger entries.")

(defun blogger-post()
  (interactive)

  (markdown)
  (set-buffer (get-buffer "*markdown-output*"))

  (setq post-url "http://www\.blogger\.com/feeds/7841127/posts/default")
  (setq markdown-buffer (current-buffer))
  (setq markdown-content (buffer-string))

  (setq title (read-string "Title: "))

  (setq buffer (get-buffer-create "*markdown-blogger-post*"))

  (declare (special gblogger-auth-handle markdown-blogger-new-entry-template
                    gblogger-generator-name ))

  (g-auth-ensure-token gblogger-auth-handle)




  (set-buffer buffer)
  (erase-buffer)
  (insert (format markdown-blogger-new-entry-template
                  gblogger-generator-name gblogger-generator-name
                  "Felix Sun" title markdown-content))
  (switch-to-buffer buffer)
  (g-app-mode)

  (setq g-app-this-url post-url
        g-app-auth-handle gblogger-auth-handle
        g-app-publish-action 'g-app-post-entry)


  (g-app-publish)
)

Posted from emacs

You can do that also

http://emacspeak.blogspot.com/2007/03/emacs-client-for-google-services.html

Friday, November 30, 2007

Add code formatter to your blog

see: http://code.google.com/p/syntaxhighlighter/

You could format ruby like this.


describe RSpec do
  before(:each) do
    @rspec = RSpec.new
  end

  describe "at release 1.0.8" do
    before(:each) do
      @rspec.version = "1.0.8" 
    end

    it "should not support nested example groups" do
      @rspec.should_not support_nested_example_groups
    end
  end

  describe "at release 1.1.0" do
    before(:each) do
      @rspec.version = "1.1.0" 
    end

    it "should support nested example groups" do
      @rspec.should support_nested_example_groups
    end
  end
end

Thursday, November 29, 2007

Integrate your website with joblet seamlessly

For most of website that integrated joblet like asoboo. right now just link to http://asoboo.joblet.jp

But you may not want your user go out of your own domain. If you want to do so, You need to create a subdomain for you website, because things like http://asoboo.com/jobs simple not very easy to work. (all inside url of joblet is begain with / )

So For Apache, create a virtual host

ServerName jobs.asoboo.com

<Directory proxy:http://asoboo.joblet.jp>
    Order Allow,Deny
    Allow from all
</Directory>

ProxyPass / http://asoboo.joblet.jp/
ProxyPassReverse  / http://asoboo.joblet.jp/

And Then you can point your browser to http://jobs.asoboo.com, :)

Saturday, October 27, 2007

Different ps command in Solaris

What I am interresting is:

why /usr/ucb/ps command is having out put differnet than

/usr/bin/ps

I CAN'T run /usr/bin/ps axuwwww

but I can under /usr/ucb/ps

Or /usr/ucb/ps -ef does not work, but

/usr/bin/ps -ef does work.

Wednesday, October 24, 2007

Put 503 page for your rails application

Put

ErrorDocument 503 /503.html

in apache configuration for you rails application, because when you
deploy , mongrels may take some time to restart.

Monday, October 22, 2007

Fwd: warning: already initialized constant OPTIONS

Something required can not be loaded in your environment file, or in plugins

=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
Exiting
/usr/lib/ruby/gems/1.8/gems/rails-1.2.4/lib/commands/servers/mongrel.rb:15:
warning: already initialized constant OPTIONS
/usr/lib/ruby/gems/1.8/gems/rails-1.2.4/lib/commands/servers/mongrel.rb:18:
undefined method `options' for []:Array (NoMethodError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:32:in
`gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:32:in
`require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/active_support/dependencies.rb:495:in
`require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-
1.4.3/lib/active_support/dependencies.rb:342:in `new_constants_in'
from /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/active_support/dependencies.rb:495:in
`require'
from /usr/lib/ruby/gems/1.8/gems/rails- 1.2.4/lib/commands/server.rb:39
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
from ./script/server:3

Merge a branch r123:569 to trunk subversion

svn log --stop-on-copy http://svnserver/code/some_project/branches/release_12

to find out when the branch created, you know that at 942 revision, you created the branch

svn merge http://svnserver/code/some_project/branches/release_12 -r942:HEAD .

Sunday, October 21, 2007

Run single test passed, but run all tests as a whole will fail that test

In my situation

I didn't load required fixture on that failed test when run all tests as a whole
when I run that special single test, because you already run all tests before,
and in some tests It loaded the fixture that you special test needed, and didn't clear
test database when you only run that special test. So It pass.

Thursday, October 11, 2007

Read Gmane mailing list with Emacs

C-u M-x gnus # Start gnus and prompt for server

news.gmane.org # The Gmane nntp server

A A # List all groups

C-s scheme.chicken <RET> <RET> # Find the chicken Scheme list

from: http://dharmatech.onigirihouse.com/emacs-gnus-gmane

Saturday, October 06, 2007

Using copy to combine binary file

copy /B somefile.zip.aa+somefile.zip.ab somefile.zip

Friday, September 28, 2007

Outbound Port25 Blocking

sudo postconf -e relayhost=mail.qb3.so-net.ne.jp

Thursday, September 20, 2007

FInd slow actions in a Rails app

# Show a list of actions sorted by time taken. Useful for finding slow actions.
cat log/development.log | awk '/Completed/ { print "[" $3 "] - " $0 }'
| sort -nr

from: http://snippets.dzone.com/posts/show/4440

Thursday, September 13, 2007

Don't override to_json like this

I don't know why our project override this method
class String
def to_json
"'#{self}'"
end
end

Because of this , The RJS totally don't work
and You get "unterminated string literal" because of not escaped javascript.

Wednesday, September 12, 2007

Show all files in the Finder

Show all files in the Finder

Open Terminal, type this command, and press Enter:

defaults write com.apple.Finder AppleShowAllFiles YES