Yesterday, I had a chance to bring awareness of recycling without causing other people defensive.
But I missed the chance.
I regret it very much.
At a language course I'm taking, the teacher asked me what I never do as a part of an exercise to explain it in the language we are learning.
I could have said that I never throw metal cans in the garbage because it's important to recycle them.
I have been noticing that many students there are throwing them in the garbage can instead of in the box for recycling metal cans, probably because majority of the students are immigrants and they are not aware of the importance of recycling.
That bothers me a lot.
One day, I mentioned to one student that there is a box for recycling metal cans. She was very upset taking it as an accusation.
Because the box for recycling them is not located in that floor and it's only on the first floor, I made a proposal to the school to put one in each floor at least to make it easier for the students to recycle metal cans.
The school seems to be doing the best to recycle materials as much as they can.
With the constrain that the company working for them who collects papers collects only papers in the recycling bin in each class room enforcing us to put only papers in the recycling box and that the company working for them who collects metal cans only collects them from the box in downstairs, I noticed that a cleaning person picks metal cans from the garbage cans and separate them for recycling.
I appreciate the cleaning person's work very much.
At the same time, what I concern most is that those students recycle in other part of their lives outside the school settings. If they continue to throw recycling materials in the garbage, it is a huge amount of recycling materials thrown away, which is not good for environment.
So I want them to have an awareness of the importance of recycling.
And yesterday presented me a good chance to initiate to achieve it.
I hope there will be another chance.
Thursday, September 04, 2008
Sunday, July 13, 2008
Setting up GIT public repository
I found setting up GIT public repository by copying the Rail application to the origin server doesn't allow tags to be pushed.
This lists the steps I took to set up GIT public repository that allows tags (or all GIT objects, I think) to be pushed.
1. Create bare GIT repository from the Rails app I want to create a repository for.
$ git clone --bare rails_app rails_app.git
2. Make the repository to be sharable by GIT daemon just in case I want to do so.
$ touch rails_app.git/git-daemon-export-ok
3. Tar it and scp to the server where I want to have the public repository, which becomes the origin server.
$ tar cvfjp rails_app.git.tar.bz2 rails_app.git
$ scp rails_app.git.tar.bz2@:~
4. In the origin server, add a new user called "git".
$ sudo adduser git
5. Change the shell for "git" to git-shell.
$ sudo vim /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6. In the origin server, create git directory under /var.
$ sudo mkdir git
$ cd git
7. Untar the tar file.
$ sudo tar xvfjp ~/rails_app.git.tar.bz2
8. Change the owner of "git" directory to "git".
$ cd ..
$ sudo chown -R git:git git
This lists the steps I took to set up GIT public repository that allows tags (or all GIT objects, I think) to be pushed.
1. Create bare GIT repository from the Rails app I want to create a repository for.
$ git clone --bare rails_app rails_app.git
2. Make the repository to be sharable by GIT daemon just in case I want to do so.
$ touch rails_app.git/git-daemon-export-ok
3. Tar it and scp to the server where I want to have the public repository, which becomes the origin server.
$ tar cvfjp rails_app.git.tar.bz2 rails_app.git
$ scp rails_app.git.tar.bz2
4. In the origin server, add a new user called "git".
$ sudo adduser git
5. Change the shell for "git" to git-shell.
$ sudo vim /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6. In the origin server, create git directory under /var.
$ sudo mkdir git
$ cd git
7. Untar the tar file.
$ sudo tar xvfjp ~/rails_app.git.tar.bz2
8. Change the owner of "git" directory to "git".
$ cd ..
$ sudo chown -R git:git git
Tuesday, June 24, 2008
Installing RMagick Ruby gem
Just for a record (because I forgot how when I had to do it again on another server):
* On Ubuntu Hardy:
1. Install ImageMagick.
$ sudo aptitude install libmagick9-dev
$ sudo aptitude install imagemagick
2. Install RMagick gem.
$ sudo gem install rmagick
* On Mac OS X Leopard (with MacPort):
1. Install ImageMagick.
$ sudo port install ImageMagick
2. Install RMagick gem.
$ sudo gem install rmagick
Sunday, June 22, 2008
RubyGems 1.2.0 is released
Just yesterday.
(Announce: RubyGems Release 1.2.0)
Get it by:
wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
(Announce: RubyGems Release 1.2.0)
Get it by:
wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
Sunday, June 01, 2008
The Wisdom of Crowds
There was an occasion that I mentioned "The Wisdom of Crowds" responding to the other person during a conversation today. I promised him to send a link to it. And this is what I found instead of just sending him a description in a bookstore site.
"The Wisdom of Crowds"
"The Wisdom of Crowds"
Sunday, May 18, 2008
"Skinny Controller, Fat Model" best practice
My first impression about reading about it ("Skinny Controller, Fat Model") was that it is a basic of Object-Oriented Programming. If you are familiar with Object-Oriented Programming practices such as small method, refactoring, Design Patterns, your code naturally becomes what this article is proposing. Especially, my impression is that if you are doing Test/Behaviour-Driven Development, it is even difficult NOT to become as proposed.
What I liked about "Skinny Controller, Fat Model" is that it is explaining the best practice from the different perspective and with the simpler expression. You can reach the same code either following the basic Object-Oriented Programming practices or following "Skinny Controller, Fat Model".
What I liked about "Skinny Controller, Fat Model" is that it is explaining the best practice from the different perspective and with the simpler expression. You can reach the same code either following the basic Object-Oriented Programming practices or following "Skinny Controller, Fat Model".
Ultrasphinx setup part2
Regarding what I wrote about test database in section "4. Build index" in my previous post "Ultrasphinx setup", RSpec code would become like below.
I put this under spec/models accessing database. But for controller spec under spec/controllers, I mocked Ultrasphinx::Search so that the controller spec is not accessing database.
(Note: The line with "system(..)" is one line.
It is shown to be multiple lines because of the space.)
I put this under spec/models accessing database. But for controller spec under spec/controllers, I mocked Ultrasphinx::Search so that the controller spec is not accessing database.
(Note: The line with "system(..)" is one line.
It is shown to be multiple lines because of the space.)
require File.dirname(__FILE__) + '/../spec_helper'
describe "Ultrasphinx sample" do
fixtures :overviews
before(:each) do
system("cd #{RAILS_ROOT};
rake ultrasphinx:index RAILS_ENV=\"test\"")
system("cd #{RAILS_ROOT};
rake ultrasphinx:daemon:start RAILS_ENV=\"test\"
&> /dev/null")
end
after(:each) do
system("cd #{RAILS_ROOT};
rake ultrasphinx:daemon:stop RAILS_ENV=\"test\"
&> /dev/null")
end
it "should find text with 'test'" do
@search = Ultrasphinx::Search.new(:query => "test")
@search.run
@search.results.size.should == 2
end
end
Thursday, May 15, 2008
Ultrasphinx setup
It was more straightforward to figure it out than other things I have done in the past. But I just write the whole thing I did to set up Ultrasphinx.
1. Sphinx installation
$ wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz
$ tar xvfzp sphinx-0.9.8-rc2.tar.gz
$ cd sphinx-0.9.8-rc2/
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
2. Install Chronic
(Chronic is a natural language date/time parser written
in pure Ruby.)
$ sudo gem install chronic
3. Install Ultrasphinx plugin
$ cd RAILS_ROOT
$ svn export svn://rubyforge.org/var/svn/fauna/ultrasphinx
/trunk/vendor/plugins/ultrasphinx
(if GIT or other version control system is used.)
(Or if Subversion is used,
$ script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx
/trunk/vendor/plugins/ultrasphinx)
$ cp RAILS_ROOT/examples/default.base RAILS_ROOT/config/ultrasphinx/
Add is_indexed to the model: e.g.
$ rake ultrasphinx:configure <= Generates development.conf
($ rake ultrasphinx:configure RAILS_ENV="test" <= Generates test.conf)
$ sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
(Because "rake ultrasphinx:index" has an incorrect path "/usr/local/mysql/lib/mysql".
Otherwise, "rake ultrasphinx:index" fails.)
$ rake ultrasphinx:index <= For development database
($ rake ultrasphinx:index RAILS_ENV="test" <= For test database)
(Of course, in the Test::Unit or RSpec, test database is cleaned up every time so this has to be put inside Test or Spec.
i.e.
system("cd #{RAILS_ROOT}; rake ultrasphinx:index RAILS_ENV=\"test\"") )
5. Start/Stop daemon
$ rake ultrasphinx:daemon:start <= For development database
($ rake ultrasphinx:daemon:start RAILS_ENV="test" <= For test database)
- How to stop Ultrasphinx
$ rake ultrasphinx:daemon:stop
1. Sphinx installation
$ wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz
$ tar xvfzp sphinx-0.9.8-rc2.tar.gz
$ cd sphinx-0.9.8-rc2/
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
2. Install Chronic
(Chronic is a natural language date/time parser written
in pure Ruby.)
$ sudo gem install chronic
3. Install Ultrasphinx plugin
$ cd RAILS_ROOT
$ svn export svn://rubyforge.org/var/svn/fauna/ultrasphinx
/trunk/vendor/plugins/ultrasphinx
(if GIT or other version control system is used.)
(Or if Subversion is used,
$ script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx
/trunk/vendor/plugins/ultrasphinx)
$ cp RAILS_ROOT/examples/default.base RAILS_ROOT/config/ultrasphinx/
Add is_indexed to the model: e.g.
4. Build index
class Overview
is_indexed :fields => [ 'title', 'description' ]
end
$ rake ultrasphinx:configure <= Generates development.conf
($ rake ultrasphinx:configure RAILS_ENV="test" <= Generates test.conf)
$ sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
(Because "rake ultrasphinx:index" has an incorrect path "/usr/local/mysql/lib/mysql".
Otherwise, "rake ultrasphinx:index" fails.)
$ rake ultrasphinx:index <= For development database
($ rake ultrasphinx:index RAILS_ENV="test" <= For test database)
(Of course, in the Test::Unit or RSpec, test database is cleaned up every time so this has to be put inside Test or Spec.
i.e.
system("cd #{RAILS_ROOT}; rake ultrasphinx:index RAILS_ENV=\"test\"") )
5. Start/Stop daemon
$ rake ultrasphinx:daemon:start <= For development database
($ rake ultrasphinx:daemon:start RAILS_ENV="test" <= For test database)
- How to stop Ultrasphinx
$ rake ultrasphinx:daemon:stop
Saturday, May 03, 2008
Friday, April 18, 2008
Tuesday, April 15, 2008
Nginx and Ruby on Rails ssl_requirement
ssl_requirement plugin was causing infinitive loop.
It was because request.ssl? was always returning false in ensure_proper_protocol method inside SslRequirement.
Actually, request.ssl? method is checking the value of X-FORWARDED_PROTO.
So it turned out that you have to set X-FORWARDED_PROTO in Nginx's configuation file.
i.e.
It was because request.ssl? was always returning false in ensure_proper_protocol method inside SslRequirement.
Actually, request.ssl? method is checking the value of X-FORWARDED_PROTO.
So it turned out that you have to set X-FORWARDED_PROTO in Nginx's configuation file.
i.e.
server {
location / {
proxy_set_header X-FORWARDED_PROTO https;
}
}
Thursday, April 10, 2008
Growth hormone release in pulsatile pattern
I've just learned that the effect of growth hormone is bigger with the existence of the periods when it is not released. In that case the hormone release has a pattern of pulse.
Also I learned that it is more intertwined with other hormones than I had known before. But it makes sense.
Human body or any mammal's body is amazing in how it's functioning. On the way back home, I was looking at other people on the bus and thought that at each moment, inside their body, hormones and other chemicals are highly balanced. Of course, it has been one of the reasons why I respect each individual human and creature. I was reminded of that feeling strongly again today. I just wish all the individuals can achieve the best they can achieve.
Also I learned that it is more intertwined with other hormones than I had known before. But it makes sense.
Human body or any mammal's body is amazing in how it's functioning. On the way back home, I was looking at other people on the bus and thought that at each moment, inside their body, hormones and other chemicals are highly balanced. Of course, it has been one of the reasons why I respect each individual human and creature. I was reminded of that feeling strongly again today. I just wish all the individuals can achieve the best they can achieve.
Sunday, March 30, 2008
Great Team Basketball
In NCAA Men's basketball tournament, Davidson University played great team basketball games. I just loved the way they played basketball.
Wednesday, March 26, 2008
Healthy snowboarding brand
After an "Event to build entrepreneurial software in 48 hours over a weekend", I got into a mindset to come up with a new brand a little bit.
That led me to come up with a way of snowboarding in a healthy athletic way.
Often times, many snowboarders are rude and aggressive and do stuff like smoking and drinking excessively.
But if you take snowboarding itself, it's a good sport requires whole body muscles. It has variety of movements - free riding, free styling in snow park, etc. It's challenging, which gives you positive attitude overcoming fear. It's outdoor, often breathing fresh air in the mountains. And on the top of the ski hills, you can see magnificent views, which refreshes your mind.
So I would package all these good features together and brand it as a healthy snowboarding. The image of that brand is like working out in the gym. You eat well with nutritious food and in the daily life, work out and tone up the muscles, in order to give you the best snowboarding performance. A friendly attitude toward other people has the high value. And you progressively improve various snowboarding skills, including free style moves.
That led me to come up with a way of snowboarding in a healthy athletic way.
Often times, many snowboarders are rude and aggressive and do stuff like smoking and drinking excessively.
But if you take snowboarding itself, it's a good sport requires whole body muscles. It has variety of movements - free riding, free styling in snow park, etc. It's challenging, which gives you positive attitude overcoming fear. It's outdoor, often breathing fresh air in the mountains. And on the top of the ski hills, you can see magnificent views, which refreshes your mind.
So I would package all these good features together and brand it as a healthy snowboarding. The image of that brand is like working out in the gym. You eat well with nutritious food and in the daily life, work out and tone up the muscles, in order to give you the best snowboarding performance. A friendly attitude toward other people has the high value. And you progressively improve various snowboarding skills, including free style moves.
Possibility of hydrogen production for hydrogen vehicle
After I wrote a blog entry, "Wind-powered generator on the top of the ski hills - Éoliennes sur le sommet des centres de ski", I was reminded that I live in a place with abundant electricity by hydroelectric energy production.
Then I thought of hydrogen vehicles. As far as I remember Iceland is the only country that can produce hydrogen from water by electrolysis using clean natural energy source, enough to support almost all the vehicles in the country. Maybe we can be next. With the combination with the electricity by wind-powered generator, maybe we have enough electricity needed to produce hydrogen.
Then I thought of hydrogen vehicles. As far as I remember Iceland is the only country that can produce hydrogen from water by electrolysis using clean natural energy source, enough to support almost all the vehicles in the country. Maybe we can be next. With the combination with the electricity by wind-powered generator, maybe we have enough electricity needed to produce hydrogen.
Thursday, March 20, 2008
REST for various scenarios
The purpose of the article is different but I read it in such a way to learn more about REST.
"Addressing Doubts about REST"
Also the comments are interesting.
And one of them "Resource transformations" is what I'm concerned with most now.
"Addressing Doubts about REST"
Also the comments are interesting.
And one of them "Resource transformations" is what I'm concerned with most now.
Wednesday, March 05, 2008
How to set up to access LDAP from Ruby on Rails
Note: This is for Mac OS X 10.5 Leopard. For other system, change the directory path appropriately.
1. Install OpenLDAP.
1-1. Install Berkeley DB.
(OpenLDAP requires this.)
1-1-1. Download the source. db-4.5.20.tar.gz
(OpenLDAP only works with the version up to 4.5.
Don't download 4.6.)
("Berkeley DB 4.5.20.tar.gz, with AES encryption(8.9M)"
in
http://www.oracle.com/technology/software
/products/berkeley-db/db/index.html)
1-1-2. Unpack the tar.gz file. And build it.
$ cd build_unix
$ ../dist/make
1-1-3. Install it.
$ sudo make install
1-2. Install OpenLDAP
1-2-1. Set the environment variables.
(See the message with "configure --help")
$ export CPPFLAGS="-I/usr/local/include"
$ export LDFLAGS="-L/usr/local/lib"
$ export LDFLAGS="-L/usr/local/BerkeleyDB.4.5/lib/"
$ export CPPFLAGS="-I/usr/local/BerkeleyDB.4.5/include/"
1-2-2. Build it.
$ make depend
$ sudo make
(make has to be executed as root
otherwise a permission error occurs.)
1-2-3. Install it.
$ sudo make install
1-2-4. See doc/guide/admin/guide.html for how to use it.
Especially, "2. A Quick-Start Guide".
e.g How to start it.
$ su root -c /usr/local/libexec/slapd
2. Install ruby-activeldap Rails Plugin.
(http://code.google.com/p/ruby-activeldap/)
$ script/plugin install \
http://ruby-activeldap.googlecode.com \
/svn/trunk/rails/plugin/active_ldap
3. Install activeldap Ruby Gem.
(ruby-activeldap Rails Plugin only generates
scaffold model to access this gem.)
$ sudo gem install activeldap
4. Install Ruby/LDAP.
(activeldap is a wrapper for this.)
4-1. Download the source. ruby-ldap-0.9.7.tar.gz
(http://sourceforge.net/projects/ruby-ldap/)
4-2. Unpack the tar.gz file. And build it.
(See README file under the unpacked directory.)
$ ruby extconf.rb --with-openldap2
$ make
4-3. Install it.
$ sudo make install
(It's installed under /Library/Ruby/Site/1.8)
Event to build entrepreneurial software in 48 hours over a weekend
Over the last weekend, I participated in an event to build software product in two days and present it to investors at the end.
My goal of participating the event was to work on Ruby on Rails development and to get familiar with local start-up scene because they are the ones who are using Ruby on Rails most.
Our team lead was very professional in skills, knowledge and the manner he conducted business throughout the project. I was able to enjoy the development fully.
During the event, series of experts in business, entrepreneurship, and technology visited each team and gave us advices. It was very interesting to see how the project was being shaped as a result of this interaction and how the direction changed along the way.
The presentations by investors and accounting professional, etc. at the beginning of the event were very informative also. And I was able to meet various technical people during the event.
My goal was more than fulfilled.
My goal of participating the event was to work on Ruby on Rails development and to get familiar with local start-up scene because they are the ones who are using Ruby on Rails most.
Our team lead was very professional in skills, knowledge and the manner he conducted business throughout the project. I was able to enjoy the development fully.
During the event, series of experts in business, entrepreneurship, and technology visited each team and gave us advices. It was very interesting to see how the project was being shaped as a result of this interaction and how the direction changed along the way.
The presentations by investors and accounting professional, etc. at the beginning of the event were very informative also. And I was able to meet various technical people during the event.
My goal was more than fulfilled.
Friday, February 29, 2008
Sunday, February 24, 2008
RSpec Stories resources
I just put it in here because I refer to it often.
RSpec Stories resources.
By the way, one comment in David Chelimsky's blog entry in there has a link to a Story Editor using Prototype.
RSpec Stories resources.
By the way, one comment in David Chelimsky's blog entry in there has a link to a Story Editor using Prototype.
Friday, February 22, 2008
Éoliennes sur le sommet des centres de ski
Since I'm learning French, I try to write a blog entry in French as well.
This is about the idea of Wind-powered generator on the top of the ski hills, which I wrote on February 5th. Please correct it if you are familiar with French. My French is not good yet:
J'ai une idée de mettre des vent générateurs sur le sommet des centres de ski parce que souvent il vente très fort là . L'électrcité générée est utilizé pour l'ascenseurs.
(Corrigez les erreurs, SVP. Ça ne fait pas longtemps que j'apprends français.)
Mon ami a corrigé les fautes (Merci!):
J'ai eu une idée d'installer des éoliennes sur le somment des centres de ski car il vente très fort a ces endroits. L'électricité générée serait utilisées pour les remonte pente.
This is about the idea of Wind-powered generator on the top of the ski hills, which I wrote on February 5th. Please correct it if you are familiar with French. My French is not good yet:
J'ai une idée de mettre des vent générateurs sur le sommet des centres de ski parce que souvent il vente très fort là . L'électrcité générée est utilizé pour l'ascenseurs.
(Corrigez les erreurs, SVP. Ça ne fait pas longtemps que j'apprends français.)
Mon ami a corrigé les fautes (Merci!):
J'ai eu une idée d'installer des éoliennes sur le somment des centres de ski car il vente très fort a ces endroits. L'électricité générée serait utilisées pour les remonte pente.
Friday, February 15, 2008
RSpec Stories
I like RSpec's new feature, RSpec Stories.
In the past, I saw Acceptance Test Cases written in plain text and the approach worked very well.
By the way, RSpec Stories is in English. And of course, all the programming languages use English for their keywords as far as I know. But I'm learning French now. And French speaking customers writing Stories in English doesn't seem to work well. And developers translating French to English introduces one more layer of indirection, which we want to avoid. I wonder if there is a solution to this problem. Maybe we can make a translator. It will be simple because it contains only RSpec stories keywords.
In the past, I saw Acceptance Test Cases written in plain text and the approach worked very well.
By the way, RSpec Stories is in English. And of course, all the programming languages use English for their keywords as far as I know. But I'm learning French now. And French speaking customers writing Stories in English doesn't seem to work well. And developers translating French to English introduces one more layer of indirection, which we want to avoid. I wonder if there is a solution to this problem. Maybe we can make a translator. It will be simple because it contains only RSpec stories keywords.
Monday, February 11, 2008
Experiment on Evolution
I have attended very interesting lecture at a local university.
I wish I had enough time to write down the verbs the speaker used to describe what three key figures in the lecture did.
But using my words instead, it was about - Darwin provoked the idea, Dallinger attempted to verify it experimentally, and D'Herelle established the way to experiment it.
Of course, not to mention, that uses life form whose reproduction cycle is very short so that you can observe its evolution.
D'Herelle is the start of Evolutionary medicine.
Evolutionary medicine is very interesting. Bacteriophage therapy makes sense though I acknowledge the points the speaker mentioned - it's alive so you don't necessarily know what would happen after the treatment is completed.
I wish I had enough time to write down the verbs the speaker used to describe what three key figures in the lecture did.
But using my words instead, it was about - Darwin provoked the idea, Dallinger attempted to verify it experimentally, and D'Herelle established the way to experiment it.
Of course, not to mention, that uses life form whose reproduction cycle is very short so that you can observe its evolution.
D'Herelle is the start of Evolutionary medicine.
Evolutionary medicine is very interesting. Bacteriophage therapy makes sense though I acknowledge the points the speaker mentioned - it's alive so you don't necessarily know what would happen after the treatment is completed.
Thursday, February 07, 2008
RSpec Rails screencast
"Story Runner top to bottom screencast"
It's very good and at the same time entertaining to follow as well.
It's very good and at the same time entertaining to follow as well.
Tuesday, February 05, 2008
Wind-powered generator on the top of the ski hills
Many times at the top of the ski hills and mountains, especially in the high mountains, wind blows very hard.
I have come up with the idea of putting a wind-powered generator on the top of a ski hill. It provides electricity for the lifts. And when the lifts are not used, the generated electricity can be put back to the power grid.
I have come up with the idea of putting a wind-powered generator on the top of a ski hill. It provides electricity for the lifts. And when the lifts are not used, the generated electricity can be put back to the power grid.
Friday, February 01, 2008
The Psychology of Risks
This is an article in "Communications of the ACM" magazine - January 2008 Volume 51, Number 1.
I just quote.
"The big difference seems to be this: In their personal lives, people tend to consciously and deliberately take risks - though often unaware of possibly serious consequences. When dealing with computer technology, people tend to take risks unconsciously and in some cases unwillingly."
I just quote.
"The big difference seems to be this: In their personal lives, people tend to consciously and deliberately take risks - though often unaware of possibly serious consequences. When dealing with computer technology, people tend to take risks unconsciously and in some cases unwillingly."
Tuesday, January 29, 2008
Kent Beck on Implementation Patterns
"Kent Beck on Implementation Patterns"
I want to be in the environment where people understand what Kent says in this interview, where I can talk about it and where we can thrive for better together.
I want to be in the environment where people understand what Kent says in this interview, where I can talk about it and where we can thrive for better together.
Sunday, January 27, 2008
I like Spec::Rails from a different perspective as well
I like Behaviour-Driven Development very much. And that's my primary reason why I like RSpec.
I have another perspective as well about why I like Spec::Rails (RSpec for Rails). The specifications of Views are completely isolated from the Controllers and vice versa. This makes isolating and finding a problem much easier.
Also with the built-in Mock framework, Controller specifications and View specifications become more like Unit Tests (or Unit Specifications, I should say).
With stories to verify the interactions between two components acting as integration test/acceptance test, this approach is much closer to an effective software development dealing with the reality of software development such as frequent changes.
I have another perspective as well about why I like Spec::Rails (RSpec for Rails). The specifications of Views are completely isolated from the Controllers and vice versa. This makes isolating and finding a problem much easier.
Also with the built-in Mock framework, Controller specifications and View specifications become more like Unit Tests (or Unit Specifications, I should say).
With stories to verify the interactions between two components acting as integration test/acceptance test, this approach is much closer to an effective software development dealing with the reality of software development such as frequent changes.
Saturday, January 19, 2008
Bio-diesel hybrid car
I was listening to a radio and it was saying that electric cars were coming out.
I always thought that the next car I would buy is a hybrid car. But after hearing it, I felt like getting electric car instead when it comes out.
Also I have been wondering if they can produce hybrid car using bio-diesel. That is much cleaner than gasoline hybrid car. The source of fuel is clean because it's a plant. And the fuel itself is cleaner.
I want to work on contributing for cleaner energy source.
I always thought that the next car I would buy is a hybrid car. But after hearing it, I felt like getting electric car instead when it comes out.
Also I have been wondering if they can produce hybrid car using bio-diesel. That is much cleaner than gasoline hybrid car. The source of fuel is clean because it's a plant. And the fuel itself is cleaner.
I want to work on contributing for cleaner energy source.
Thursday, January 10, 2008
Installing MySQL driver gem
I have upgraded MySQL from 5.0.27, which I installed about a year ago when I bought MacBook, to 5.0.45 yesterday. The reason is that I learned from a MySQL users group meeting that there are lots of important fixes in the versions above 5.0.30.
In Ruby on Rails 2.0, it is recommended to install MySQL driver gem because the one that comes with Rails is not for production use. The gem command is described in config/database.yml.
i.e. On Mac OS X 10.5 Leopard,
sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
Previously, installing MySQL driver gem had failed. I tried it again today now that I have the latest 5.0 version of MySQL. Then the installation was successful.
In Ruby on Rails 2.0, it is recommended to install MySQL driver gem because the one that comes with Rails is not for production use. The gem command is described in config/database.yml.
i.e. On Mac OS X 10.5 Leopard,
sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
Previously, installing MySQL driver gem had failed. I tried it again today now that I have the latest 5.0 version of MySQL. Then the installation was successful.
Monday, January 07, 2008
Ruby on Rails: Symbol#to_proc defined in ActiveSupport
I found it in a blog entry "An Introduction to Ruby's Enumerable Module"
It is interesting and I think I can describe it as very powerful.
It is interesting and I think I can describe it as very powerful.
Tuesday, January 01, 2008
Ruby on Rails 2.0: link_to for nested resources
If you specify nested resources in routes.rb such as
you have to specify a parameter for link_to like this:
The generated URL is like this:
Moreover, if @daily_content.entities is just an array, which happens to contain an object of type, Vocabulary, the following works as well:
Again the generated URL is same as above like:
map.resources :daily_contents do |daily_content|
daily_content.resources :vocabularies
end
you have to specify a parameter for link_to like this:
<% for vocabulary in @daily_content.vocabularies %>
..
<%= link_to 'Show', [@daily_content, vocabulary] %>
<% end %>
The generated URL is like this:
http://localhost:3000/daily_contents/5/vocabularies/2
Moreover, if @daily_content.entities is just an array, which happens to contain an object of type, Vocabulary, the following works as well:
<% for entity in @daily_content.entities %>
..
<%= link_to 'Show', [@daily_content, entity] %>
<% end %>
Again the generated URL is same as above like:
http://localhost:3000/daily_contents/5/vocabularies/2
Wednesday, December 26, 2007
Problem with installing Ruby 1.9 on Mac OS X 10.5 Leopard
I have tried to install Ruby 1.9 from tar ball. But so far, there is a problem and it's not successful.
I borrowed the ideas from the following sites:
"Building Ruby, Rails, Subversion, Mongrel, and MySQL on Mac OS X"
"Ruby on Rails install on 10.5 OS X"
"Trouble with Readline and Building Ruby 1.9"
(Also the same post under ruby-forum: "Trouble with Readline and Building Ruby 1.9")
Still Ruby make is failing with regard to readline.
By the way, I miss Linux package managers. It was easy to see which version of what is installed. MacPort is trying to achieve the same thing. But so far, it was not successful to install it. When it comes to package management, I think Linux is better.
I borrowed the ideas from the following sites:
"Building Ruby, Rails, Subversion, Mongrel, and MySQL on Mac OS X"
"Ruby on Rails install on 10.5 OS X"
"Trouble with Readline and Building Ruby 1.9"
(Also the same post under ruby-forum: "Trouble with Readline and Building Ruby 1.9")
Still Ruby make is failing with regard to readline.
By the way, I miss Linux package managers. It was easy to see which version of what is installed. MacPort is trying to achieve the same thing. But so far, it was not successful to install it. When it comes to package management, I think Linux is better.
Sunday, December 23, 2007
Location of Ruby gems for the preinstalled Ruby on Mac OS X 10.5 Leopard
It's /Library/Ruby/Gems/1.8/gems/
The preinstalled Ruby is /usr/bin/ruby (note: execute "which ruby" from command line), which is a symbolic link to
/System/Library/Frameworks/Ruby.framework/Versions/
Current/usr/bin/ruby
So you would think that the location of the gems is under
/System/Library/Frameworks/Ruby.framework/Versions/
Current/usr/lib/ruby/gems/1.8/gems
just like when you install Ruby manually.
But when I looked at the Rails gem under the directory, it was rails-1.2.3.
I performed a search for "rails" gem under each directory under the path as a root user but all the searches found only the same rails-1.2.3.
So finally I performed a search for the entire directory tree, i.e. executed
find / -name "rails" -print
as a root user. And here it is, it found
/Library/Ruby/Gems/1.8/gems/rails-2.0.1/bin/rails
By the way, as a side note, I wanted to see if "/Library/Ruby/Gems/1.8/gems/rails-2.0.1/bin/rails" is sym-linked from /usr/bin/rails (by executing "ls -alFh /usr/bin/rails"). But it isn't. /usr/bin/rails is not a symbolic link of anything. It's an executable file.
This whole thing is very confusing to me.
All I wanted to do was to look at the Rails 2.0.1 source code.
The preinstalled Ruby is /usr/bin/ruby (note: execute "which ruby" from command line), which is a symbolic link to
/System/Library/Frameworks/Ruby.framework/Versions/
Current/usr/bin/ruby
So you would think that the location of the gems is under
/System/Library/Frameworks/Ruby.framework/Versions/
Current/usr/lib/ruby/gems/1.8/gems
just like when you install Ruby manually.
But when I looked at the Rails gem under the directory, it was rails-1.2.3.
I performed a search for "rails" gem under each directory under the path as a root user but all the searches found only the same rails-1.2.3.
So finally I performed a search for the entire directory tree, i.e. executed
find / -name "rails" -print
as a root user. And here it is, it found
/Library/Ruby/Gems/1.8/gems/rails-2.0.1/bin/rails
By the way, as a side note, I wanted to see if "/Library/Ruby/Gems/1.8/gems/rails-2.0.1/bin/rails" is sym-linked from /usr/bin/rails (by executing "ls -alFh /usr/bin/rails"). But it isn't. /usr/bin/rails is not a symbolic link of anything. It's an executable file.
This whole thing is very confusing to me.
All I wanted to do was to look at the Rails 2.0.1 source code.
Thursday, December 20, 2007
Ruby on Rails 2.0 configuration files, etc.
I have read through the files in the Rails project generated with Ruby on Rails 2.0, such as the configuration files, etc. e.g. /config/boot.rb, /config/environment.rb.
I've found that they are more well-written and well-structured.
I've found that they are more well-written and well-structured.
Ruby gem install error with Mac OS X 10.5 Leopard
I attempted to install ruby-debug gem but it failed with a message:
ERROR: Error installing ruby-debug:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install ruby-debug can't find header files for ruby.
This was because the installed Mac OS X Xcode Tools was old, specifically, GCC was old. I had to install Xcode Tools 3.0, which is actually shipped with Mac OS X 10.5 Leopard DVD. You can also download it.
ERROR: Error installing ruby-debug:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install ruby-debug can't find header files for ruby.
This was because the installed Mac OS X Xcode Tools was old, specifically, GCC was old. I had to install Xcode Tools 3.0, which is actually shipped with Mac OS X 10.5 Leopard DVD. You can also download it.
Thursday, December 13, 2007
Switched to TextMate
As I updated to Ruby on Rails 2.0, I decided to try out TextMate.
After getting used to it after reading its documents, I came to like it because its Ruby and Ruby on Rails Bundles seem to have lots of good features.
But I didn't necessarily like its Subversion Bundle. I had to do "svn import" from the command line, delete the local Rails directory (of course, after backing it up), and check out the directory from the Subversion. Otherwise, there is no .svn folder. With Subversion (Eclipse Subversion Plugin), you don't have to delete the local directory. Maybe there is a better way to make this work in TextMate and I would like to know it.
After getting used to it after reading its documents, I came to like it because its Ruby and Ruby on Rails Bundles seem to have lots of good features.
But I didn't necessarily like its Subversion Bundle. I had to do "svn import" from the command line, delete the local Rails directory (of course, after backing it up), and check out the directory from the Subversion. Otherwise, there is no .svn folder. With Subversion (Eclipse Subversion Plugin), you don't have to delete the local directory. Maybe there is a better way to make this work in TextMate and I would like to know it.
Tuesday, December 11, 2007
Sunday, December 09, 2007
Updating to Ruby on Rails 2.0
Until today, I have been using Ruby I installed manually on /usr/local/ (/usr/local/bin/ruby) because that's how I installed it on Mac OS X 4 Tiger. When I purchased Mac OS X 5 Leopard several days after it was released, I noticed that Ruby was installed under /usr (/usr/bin/ruby) as a part of Mac OS X developer tools. But I kept my .profile with "export PATH=/usr/local/bin:/usr/local/sbin:$PATH" because I had lots of gems installed already under the Ruby under /usr/local (/usr/local/lib/ruby).
Today as a part of updating to Ruby on Rails 2.0, I switched to use the Ruby included with Mac OS X developer tools (under /usr). And updated Rails gem under that location (under /user):
1. Commented out "export PATH=/usr/local/bin:/usr/local/sbin:$PATH" in my .profile. Restarted the shell.
2. Executed "gem update rails".
Today as a part of updating to Ruby on Rails 2.0, I switched to use the Ruby included with Mac OS X developer tools (under /usr). And updated Rails gem under that location (under /user):
1. Commented out "export PATH=/usr/local/bin:/usr/local/sbin:$PATH" in my .profile. Restarted the shell.
2. Executed "gem update rails".
Tuesday, November 27, 2007
Uploading audio file and playing it on a web page using attachment_fu Ruby on Rails plugin
Basically used the information from "File Upload Fu" and "Demonstration of Different Ways to Play a Sound from a Web Page".
Uploaded audio file and stored it in file system just like image file using attachment_fu. Then in show.rhtml,
instead of:
<b>Audio:</b>
<%= link_to @vocabulary.public_filename %>
used:
<b>Audio:</b>
<embed src="<%=@vocabulary.public_filename %>" autostart="false" loop="false" height="20" width="200"></embed>
Of course, if there is a better way, I would like to know.
Uploaded audio file and stored it in file system just like image file using attachment_fu. Then in show.rhtml,
instead of:
<b>Audio:</b>
<%= link_to @vocabulary.public_filename %>
used:
<b>Audio:</b>
<embed src="<%=@vocabulary.public_filename %>" autostart="false" loop="false" height="20" width="200"></embed>
Of course, if there is a better way, I would like to know.
Monday, November 05, 2007
Ordering a service through a customer support by phone
I ordered satellite TV service by calling customer support by phone because I didn't have Internet access temporarily.
To make the story short, after all the communications, they put a wrong service and now I have to pay for the extra service I never requested for the next 30 days.
I am even more convinced that it's a better approach for a customer to order and select what he/she wants through web site.
Also I am even more a proponent of easy subscribe-unsubscribe model without long-term contract. There shouldn't be any 1-year contract or 2-year contract. The customer should be able to sign up anytime and cancel anytime without any penalty.
It is very unfair that the majority of my money has been lost throughout my life because I was charged for what I didn't ask for and what I was not supposed to be charged for.
I have lived both in a country with excellent customer support services and in countries/regions with customer support personnels doing whatever they feel like based on their emotion. I hope that the more web based approach would make this cultural difference irrelevant.
To make the story short, after all the communications, they put a wrong service and now I have to pay for the extra service I never requested for the next 30 days.
I am even more convinced that it's a better approach for a customer to order and select what he/she wants through web site.
Also I am even more a proponent of easy subscribe-unsubscribe model without long-term contract. There shouldn't be any 1-year contract or 2-year contract. The customer should be able to sign up anytime and cancel anytime without any penalty.
It is very unfair that the majority of my money has been lost throughout my life because I was charged for what I didn't ask for and what I was not supposed to be charged for.
I have lived both in a country with excellent customer support services and in countries/regions with customer support personnels doing whatever they feel like based on their emotion. I hope that the more web based approach would make this cultural difference irrelevant.
Saturday, October 27, 2007
OOPSLA 2007 - Thursday
The keynote speech was very good.
In the speech, there was a comment by John Vlissides saying that Patterns were used unexpected way. At that moment, I thought that maybe the reason why he had said to me at one OOPSLA that learning Refactoring to Patterns was better than learning Patterns straight.
One attendee said that "A developer" wanted to work with "A developer" or even a better developer so that he/she could learn from him/her. But "B developer" wanted to hire "C developer" because he/she wanted to work with a developer who was worse than him/her. A, B, C, and D means that A is the best and D is the worst. I agree with him.
And I want to work with a developer better than me and I love to develop a quality software, which means I have to improve my skills even more so that I can have a chance to work with "A developer".
In the speech, there was a comment by John Vlissides saying that Patterns were used unexpected way. At that moment, I thought that maybe the reason why he had said to me at one OOPSLA that learning Refactoring to Patterns was better than learning Patterns straight.
One attendee said that "A developer" wanted to work with "A developer" or even a better developer so that he/she could learn from him/her. But "B developer" wanted to hire "C developer" because he/she wanted to work with a developer who was worse than him/her. A, B, C, and D means that A is the best and D is the worst. I agree with him.
And I want to work with a developer better than me and I love to develop a quality software, which means I have to improve my skills even more so that I can have a chance to work with "A developer".
OOPSLA 2007 - Tuesday - 2
50-50 was hilarious. Even just attending this session only would make me feel that it was worth attending this year's OOPSLA.
Thursday, October 25, 2007
OOPSLA 2007 - Wednesday
Many big names from the past made keynote speeches. It was amazing.
Domain Driven Design Movie BOF (Birds of a Feather) was good. It was very clear about how Domain Driven Desisn progresses with developer-customer interaction. I wish they post the movie online.
Domain Driven Design Movie BOF (Birds of a Feather) was good. It was very clear about how Domain Driven Desisn progresses with developer-customer interaction. I wish they post the movie online.
Tuesday, October 23, 2007
OOPSLA 2007 - Tuesday
The opening Keynote Speech by Peter Turchi was very good. "Get lost" - and experience what you have never experienced before. I agree that's the key of OOPSLA. That's why I come to OOPSLA. And I have lived almost entire life with this joy of getting lost (encountering an unfamiliar thing).
The panel of "Celebrating 40 Years of Language Evolution: Simula 67 to the Present and Beyond" was educational to me. The languages are increasingly getting functional. And multiprocessor hardware is making concurrency the main issue of the coming future.
The panel of "Celebrating 40 Years of Language Evolution: Simula 67 to the Present and Beyond" was educational to me. The languages are increasingly getting functional. And multiprocessor hardware is making concurrency the main issue of the coming future.
Monday, October 22, 2007
OOPSLA 2007 - Dynamic Languages Symposium
Quickly, just my impression.
Last year, I got an impression that Dynamic Language camp and Static Language camp would never get along with each other. This year, found that there are some activities to take advantage of the good from both.
As usual, it's good to know and hear about something I have never known before. After all, that's why I come to OOPSLA.
I saw the actual OLPC XO during Dynamic Languages Symposium and Squeak Birds of Feathers session. Also link - XO Giving. It's exciting. I felt like getting one of those and play around with Squeak development environment in Etoy.
There is a Squeak book to download, announced at Squeak Birds of Feathers session.
Last year, I got an impression that Dynamic Language camp and Static Language camp would never get along with each other. This year, found that there are some activities to take advantage of the good from both.
As usual, it's good to know and hear about something I have never known before. After all, that's why I come to OOPSLA.
I saw the actual OLPC XO during Dynamic Languages Symposium and Squeak Birds of Feathers session. Also link - XO Giving. It's exciting. I felt like getting one of those and play around with Squeak development environment in Etoy.
There is a Squeak book to download, announced at Squeak Birds of Feathers session.
Sunday, October 21, 2007
OOPSLA 2007 remaining Podcasts
I have finished listening to the remaining OOPSLA 2007 Podcasts.
Unexpectedly, the Podcasts I wasn't expecting to learn from much for my purpose were very educational for me. "FindBugs" was interesting and I agree that it should be a part of continuous checking in - whenever a developer checks the code into the source control system, he/she runs FindBugs.
There seem to be lots to learn from ooPSLA this year.
I hope that it would be like what Linda Rising said in her Podcast about MiniPLoP - Don't criticize the author of the pattern by using the words such as "Your work is bad," instead, suggest what can be improved.
And I certainly don't expect a person in an important position to make a claim that some attendee is an idiot without even knowing the person or even talking to him/her even once. The comment should be scientific - based on the fact and evidence, not on personal emotion or cultural bias.
ooPSLA is a conference that we can demand such an integrity as a common sense.
Unexpectedly, the Podcasts I wasn't expecting to learn from much for my purpose were very educational for me. "FindBugs" was interesting and I agree that it should be a part of continuous checking in - whenever a developer checks the code into the source control system, he/she runs FindBugs.
There seem to be lots to learn from ooPSLA this year.
I hope that it would be like what Linda Rising said in her Podcast about MiniPLoP - Don't criticize the author of the pattern by using the words such as "Your work is bad," instead, suggest what can be improved.
And I certainly don't expect a person in an important position to make a claim that some attendee is an idiot without even knowing the person or even talking to him/her even once. The comment should be scientific - based on the fact and evidence, not on personal emotion or cultural bias.
ooPSLA is a conference that we can demand such an integrity as a common sense.
Saturday, October 20, 2007
OOPSLA 2007 Podcast
I have listened to some of OOPSLA 2007 Podcasts.
I enjoyed them very much.
Particularly, I enjoyed, "The Scala Experience", "Ruby", and "Unit Testing Patterns". I wish I would have a time to listen to "Domain-Specific Modeling" and "Aggressive Learning", too, which sound interesting.
I enjoyed them very much.
Particularly, I enjoyed, "The Scala Experience", "Ruby", and "Unit Testing Patterns". I wish I would have a time to listen to "Domain-Specific Modeling" and "Aggressive Learning", too, which sound interesting.
Tuesday, October 16, 2007
Green Recruiting
Many people seem to want to work for a company that is environmentally responsible. I'm glad to know that.
"What’s Your Green Recruiting Strategy?"
"Green is the Color of Successful Recruiting"
In the past, I was discriminated because I was trying to recycle materials. I hope that it will become a thing of the past.
By the way, sometimes in the past, I was socially discriminated by religious workers, even though it is a basic human rights violation. But they don't care or maybe they don't understand the concept of human rights. I hope the society becomes the one where nobody is discriminated when he/she acts based on the fact.
"What’s Your Green Recruiting Strategy?"
"Green is the Color of Successful Recruiting"
In the past, I was discriminated because I was trying to recycle materials. I hope that it will become a thing of the past.
By the way, sometimes in the past, I was socially discriminated by religious workers, even though it is a basic human rights violation. But they don't care or maybe they don't understand the concept of human rights. I hope the society becomes the one where nobody is discriminated when he/she acts based on the fact.
Monday, October 15, 2007
Improved Ruby Gems
Ruby Gems: new release and plans for inclusion in Ruby 1.9
RubyGems Beta 0.9.4.5
I have update to Ruby Gems 0.9.4.5 right after I've read the InfoQ article above.
$ sudo gem update --system --source http://segment7.net/
(sudo is for Mac OS X)
I'm getting back the mode to live on the Edge as I used to with Eclipse. I used to download every milestone as soon as it was released - this was influenced by my former colleague.
RubyGems Beta 0.9.4.5
I have update to Ruby Gems 0.9.4.5 right after I've read the InfoQ article above.
$ sudo gem update --system --source http://segment7.net/
(sudo is for Mac OS X)
I'm getting back the mode to live on the Edge as I used to with Eclipse. I used to download every milestone as soon as it was released - this was influenced by my former colleague.
Tuesday, October 09, 2007
Seats in buses and trains in South America are more comfortable
Seats in buses in South America are very comfortable. Especially, "Cama". Even "Semi-cama", which is not as good as "Cama", is very comfortable. Even the buses in less developed countries like Peru have comfortable seats. And the seat in a train in Chile was comfortable as well.
After I came back to North America, I found that the seats in buses and trains were very poor and uncomfortable. I can't believe that I had thought that they were comfortable before going to South America.
By the way, unrelated but I saw people making a call from cell phone in a running subway in Chile and I think Argentina, too. But in North America, there is no signal in subway.
After I came back to North America, I found that the seats in buses and trains were very poor and uncomfortable. I can't believe that I had thought that they were comfortable before going to South America.
By the way, unrelated but I saw people making a call from cell phone in a running subway in Chile and I think Argentina, too. But in North America, there is no signal in subway.
Ruby on Rails - ActiveScaffold
It's good to generate repeatedly used codes.
But ActiveScaffold is using configuration to set particular parameters or conditions. That reminded me of Java + XML, where XML configures the auto generated Java code. It seems to be "configuration over convention" instead of "convention over configuration". Going back to the bad approach. Only the good thing about ActiveScaffold's way is that it's done in Ruby language itself not external stuff like XML.
Isn't there a way to generate codes for controller and views in "Convention over Configuration"? I wonder.
--------------------
P.S.
I have wanted to mention this. So decided to add now.
ActiveScaffold is tying View and Controller together by generating them dynamically. Then, what's the point of Model-View-Controller separating View and Controller? The purpose of Model-View-Controller separating View from Controller is that View can be created/changed independently from Controller.
But ActiveScaffold is using configuration to set particular parameters or conditions. That reminded me of Java + XML, where XML configures the auto generated Java code. It seems to be "configuration over convention" instead of "convention over configuration". Going back to the bad approach. Only the good thing about ActiveScaffold's way is that it's done in Ruby language itself not external stuff like XML.
Isn't there a way to generate codes for controller and views in "Convention over Configuration"? I wonder.
--------------------
P.S.
I have wanted to mention this. So decided to add now.
ActiveScaffold is tying View and Controller together by generating them dynamically. Then, what's the point of Model-View-Controller separating View and Controller? The purpose of Model-View-Controller separating View from Controller is that View can be created/changed independently from Controller.
Wednesday, October 03, 2007
Rails: How to test
I came across Jay Fields' blog entry, "Rails: How we test".
I'm glad that I happened to find this article because it contains the ways to use mock object and to make rails unit test not to access database. I like the way of writing unit tests without accessing database by mocking database access. But I didn't know how to do that with Rails. And I wanted to follow the Rails convention because that's one of the strength of Rails. But now I can do whole a lot of better way of writing tests.
I'm glad that I happened to find this article because it contains the ways to use mock object and to make rails unit test not to access database. I like the way of writing unit tests without accessing database by mocking database access. But I didn't know how to do that with Rails. And I wanted to follow the Rails convention because that's one of the strength of Rails. But now I can do whole a lot of better way of writing tests.
Monday, September 24, 2007
Buy a Laptop for a Child, Get Another Laptop Free
Through ACM TechNews, I found this article. The full story is here.
And the name of the project is "One Laptop Per Child".
I wonder if Millennium Village project the non profit project I was contributing to is for will be utilizing this. If not, they may be able to get one to access the web site.
And the name of the project is "One Laptop Per Child".
I wonder if Millennium Village project the non profit project I was contributing to is for will be utilizing this. If not, they may be able to get one to access the web site.
Wednesday, September 19, 2007
Walk the walk - it's different
Deborah Hartmann is using Ron Jeffries' quote at the foot of her e-mail.
"My advice is to do it by the book,
get good at the practices,
then do as you will.
Many people want to skip to step three.
How do they know? " -- Ron Jeffries
I like it.
I don't like people who make a judgment of something they never practiced only by reading about it or even just by hearing about it. For example, I don't like people who criticize Agile software development practices simply because those practices sound unfamiliar to them.
"My advice is to do it by the book,
get good at the practices,
then do as you will.
Many people want to skip to step three.
How do they know? " -- Ron Jeffries
I like it.
I don't like people who make a judgment of something they never practiced only by reading about it or even just by hearing about it. For example, I don't like people who criticize Agile software development practices simply because those practices sound unfamiliar to them.
Monday, September 17, 2007
Back from South America
I've just posted a new blog.
It's good to have Internet access at hand with wide-range wifi, etc. That's a good thing about being back in North America.
South America was good.
I may write a summary of what was good there later on.
But I just write a few of them.
People in South America were very nice while some of the English speaking people from other parts of the world are just so full of themselves.
I found that people in Brazil, especially around Sao Paulo, were more open to different kind of people. - Before the trip, I thought that North America was the most diversified place in the world (in fact, that's why I decided to live in Canada). But it was not true. It was good to know that. Especially, religious people in English speaking countries are very closed minded to different kind of people.
It's good to have Internet access at hand with wide-range wifi, etc. That's a good thing about being back in North America.
South America was good.
I may write a summary of what was good there later on.
But I just write a few of them.
People in South America were very nice while some of the English speaking people from other parts of the world are just so full of themselves.
I found that people in Brazil, especially around Sao Paulo, were more open to different kind of people. - Before the trip, I thought that North America was the most diversified place in the world (in fact, that's why I decided to live in Canada). But it was not true. It was good to know that. Especially, religious people in English speaking countries are very closed minded to different kind of people.
Homer's Odyssey as an Agile Consultant
I've just watched the video of Jean Tabaka's presentation at Agile 2006 ("Homer's Odyssey or My Life as an Agile Consultant").
In one of the companies I worked for, I encountered many of the monsters she described. For example, Laestrygonian (Technical Lead Saboteur), The Siren (person who tells what Agile is and teaches wrong practices), and the control guy who says that it's not Agile unless everybody follows what he says.
My emotional feeling was that I felt relieved that somebody identified those problems. What this presentation means to me in practice is that I learned what to watch out and how to deal with them.
In one of the companies I worked for, I encountered many of the monsters she described. For example, Laestrygonian (Technical Lead Saboteur), The Siren (person who tells what Agile is and teaches wrong practices), and the control guy who says that it's not Agile unless everybody follows what he says.
My emotional feeling was that I felt relieved that somebody identified those problems. What this presentation means to me in practice is that I learned what to watch out and how to deal with them.
Saturday, July 28, 2007
Christopher Alexander's keynote speech at OOPSLA 1996
One of my acquaintances sent me this link to OOPSLA 1996 keynote speech - "The Origins of Pattern Theory - the Future of the Theory, And The Generation of a Living World by Christopher Alexander".
I'm on road so I just write my impression of reading it briefly. It is ironical that his good intension was misunderstood and misused. When did referring to his work start to prevent software developers from reacting to what's happening to the code at hand and from building software generatively, like in Agile way?
In the next last section of this blog, I just paste excerpts from his speech, which I found interesting.
--------
I don't know hardly anything about what all of you do.
I didn't really understand what had been going on, and that my work had somehow been useful to computer science.
When I faced the question of addressing you, I wondered what on earth I should talk about.
That local adaptation can happen successfully only if people (who are locally knowledgeable) do it for themselves.
one of the efforts of the pattern language was not merely to try and identify structural features which would make the environment positive or nurturing, but also to do it in a fashion which could be in everybody's hands, so that the whole thing would effectively then generate itself.
(Bear in mind, as you hear my comments, that they need to be taken with a grain of salt; I'm ignorant; I'm not in your field.)
We were able to judge patterns, and tried to judge them, according to the extent that when present in the environment we were confident that they really do make people more whole in themselves. Of course you may ask, How in the hell did you test for that? But that is too long a story which I cannot cover in this speech. The important point is that such testing was going on continuously.
We were looking for the extent to which, as a whole, a pattern language would produce a coherent entity.
(1) the moral capacity to produce a living structure and (2) the generativity of the thing,
It seemed to me that we had fallen far short of the mark that I had intended.
At about the same time I began to notice a deeper level of structure and a small number (fifteen) of geometric properties that appeared to exist recursively in space whenever buildings had life.
The comparable view, in software design, would tell you that a program which is objectively profound (elegant, efficient, effective and good as a program) would be the one which generates the most profound feeling of wholeness in an observer who looks at the code.
The important thing is that -- in architecture -- this is not merely a hunch but a testable empirical result. It means that the objects that are most profound functionally (when I say objects, I mean buildings, streets, door knobs, shelf, room, dome, bridge) the objects that are most profound functionally are the ones which also promote the greatest feeling in us.
If there really is a way of looking at structures which both deals with real functional structure in the ordinary technical and practical sense, and simultaneously has its roots in human feeling, there will be a very huge and positive step.
recursively
That is what happens in all the living structures we think of as nature. When you analyze carefully just what's going on and how things are happening in the natural world, this sort of structure preserving transformation tends to be what's going on most of the time. That is why, when nature is left alone, most of the time living structure is produced.
I have, for many years, thought that this could only be solved by a genetic approach -- an approach where deep structure, spread through society, creates and generates the right sort of structure, very much as genetic code creates and generates organisms and ecological systems -- indirectly, by letting loose life creating process.
If these software packages are life creating, and accepted, and widely enough spread throughout the world, there is a chance we might get a grip on this problem: provided that the software is freeing, liberating, allows each person individual control and decision making power to do the right thing, and to create living structure, locally, wherever they are.
the process by which one discusses these kind of things, shares ideas about them, gradually influences the way people are thinking so that gradually larger and larger percentages of bits of the environment might turn into living structure.
When I had the pleasure of beginning to meet some of the various folks who introduced themselves to me over the last year and a half from the software community, I began to be fascinated by the number of them that were closet architects. Greg Bryant who worked on the 486 chip, is really interested in ecology and is an editor of Rain, an ecological magazine. Bill Joy is writing about workstations in the concrete physical sense that is familiar as an architect. John Gage, chief scientific officer of Sun, is interested in neighborhood schools, and in the process by which people can repair their own physical neighborhoods by working together. Jim Coplien is dealing with social structures in human organizations. Mark Sewell from IBM wants to build houses. Dick Gabriel has as his deepest passion, the writing of poetry: another kind of art. I don't have a long enough list.
The new generative languages are dynamic and, like software, interact with context, to allow people to generate an infinite variety of possible results but, in this case, with a built-in guarantee of well-formed results.
When a paradigm change occurs, in a discipline, it is not always the members of the old profession, who take it to the next stage.
I want you to help me. I want you to realize that that problem of generating living structure is not being handled well by architectural planners or developers or construction people now, and the Earth is suffering because of it. I believe there may be no way that they are ever going to actually be able to do it, because the methods they use are not capable of it. For you it is different. The idea of generative process is natural to you. It forms the core of the computer science field. The methods that you have at your fingertips and deal with everyday in the normal course of software design are perfectly designed to do this. So, if only you have the interest, you do have the capacity and you do have the means.
What I am proposing here is something a little bit different from that. It is a view of programming as the natural genetic infrastructure of a living world which you/we are capable of creating, managing, making available, and which could then have the result that a living structure in our towns, houses, work places, cities, becomes an attainable thing.
I'm on road so I just write my impression of reading it briefly. It is ironical that his good intension was misunderstood and misused. When did referring to his work start to prevent software developers from reacting to what's happening to the code at hand and from building software generatively, like in Agile way?
In the next last section of this blog, I just paste excerpts from his speech, which I found interesting.
--------
I don't know hardly anything about what all of you do.
I didn't really understand what had been going on, and that my work had somehow been useful to computer science.
When I faced the question of addressing you, I wondered what on earth I should talk about.
That local adaptation can happen successfully only if people (who are locally knowledgeable) do it for themselves.
one of the efforts of the pattern language was not merely to try and identify structural features which would make the environment positive or nurturing, but also to do it in a fashion which could be in everybody's hands, so that the whole thing would effectively then generate itself.
(Bear in mind, as you hear my comments, that they need to be taken with a grain of salt; I'm ignorant; I'm not in your field.)
We were able to judge patterns, and tried to judge them, according to the extent that when present in the environment we were confident that they really do make people more whole in themselves. Of course you may ask, How in the hell did you test for that? But that is too long a story which I cannot cover in this speech. The important point is that such testing was going on continuously.
We were looking for the extent to which, as a whole, a pattern language would produce a coherent entity.
(1) the moral capacity to produce a living structure and (2) the generativity of the thing,
It seemed to me that we had fallen far short of the mark that I had intended.
At about the same time I began to notice a deeper level of structure and a small number (fifteen) of geometric properties that appeared to exist recursively in space whenever buildings had life.
The comparable view, in software design, would tell you that a program which is objectively profound (elegant, efficient, effective and good as a program) would be the one which generates the most profound feeling of wholeness in an observer who looks at the code.
The important thing is that -- in architecture -- this is not merely a hunch but a testable empirical result. It means that the objects that are most profound functionally (when I say objects, I mean buildings, streets, door knobs, shelf, room, dome, bridge) the objects that are most profound functionally are the ones which also promote the greatest feeling in us.
If there really is a way of looking at structures which both deals with real functional structure in the ordinary technical and practical sense, and simultaneously has its roots in human feeling, there will be a very huge and positive step.
recursively
That is what happens in all the living structures we think of as nature. When you analyze carefully just what's going on and how things are happening in the natural world, this sort of structure preserving transformation tends to be what's going on most of the time. That is why, when nature is left alone, most of the time living structure is produced.
I have, for many years, thought that this could only be solved by a genetic approach -- an approach where deep structure, spread through society, creates and generates the right sort of structure, very much as genetic code creates and generates organisms and ecological systems -- indirectly, by letting loose life creating process.
If these software packages are life creating, and accepted, and widely enough spread throughout the world, there is a chance we might get a grip on this problem: provided that the software is freeing, liberating, allows each person individual control and decision making power to do the right thing, and to create living structure, locally, wherever they are.
the process by which one discusses these kind of things, shares ideas about them, gradually influences the way people are thinking so that gradually larger and larger percentages of bits of the environment might turn into living structure.
When I had the pleasure of beginning to meet some of the various folks who introduced themselves to me over the last year and a half from the software community, I began to be fascinated by the number of them that were closet architects. Greg Bryant who worked on the 486 chip, is really interested in ecology and is an editor of Rain, an ecological magazine. Bill Joy is writing about workstations in the concrete physical sense that is familiar as an architect. John Gage, chief scientific officer of Sun, is interested in neighborhood schools, and in the process by which people can repair their own physical neighborhoods by working together. Jim Coplien is dealing with social structures in human organizations. Mark Sewell from IBM wants to build houses. Dick Gabriel has as his deepest passion, the writing of poetry: another kind of art. I don't have a long enough list.
The new generative languages are dynamic and, like software, interact with context, to allow people to generate an infinite variety of possible results but, in this case, with a built-in guarantee of well-formed results.
When a paradigm change occurs, in a discipline, it is not always the members of the old profession, who take it to the next stage.
I want you to help me. I want you to realize that that problem of generating living structure is not being handled well by architectural planners or developers or construction people now, and the Earth is suffering because of it. I believe there may be no way that they are ever going to actually be able to do it, because the methods they use are not capable of it. For you it is different. The idea of generative process is natural to you. It forms the core of the computer science field. The methods that you have at your fingertips and deal with everyday in the normal course of software design are perfectly designed to do this. So, if only you have the interest, you do have the capacity and you do have the means.
What I am proposing here is something a little bit different from that. It is a view of programming as the natural genetic infrastructure of a living world which you/we are capable of creating, managing, making available, and which could then have the result that a living structure in our towns, houses, work places, cities, becomes an attainable thing.
Thursday, June 21, 2007
¨The End of Poverty¨
I have just finished reading ¨The End of Poverty¨.
I think I need perseverance.
Often times, people prevent me from acting on good cause because of discrimination, etc. Sometimes that´s because I don´t believe in a religion some people believe in and they think that I should be punished.
But I need perseverance to keep on going.
I think I need perseverance.
Often times, people prevent me from acting on good cause because of discrimination, etc. Sometimes that´s because I don´t believe in a religion some people believe in and they think that I should be punished.
But I need perseverance to keep on going.
Sunday, May 27, 2007
Recycling in South America
I thought of this idea more than a month ago. But didn´t have a chance to write it.
While traveling in South America, you notice that there is no recycle bin and all the plastic bottles and metals are thrown away into garbage can.
I think that those materials can become resource for them. Instead of mining from the earth, they can collect those materials and reuse them. If you consider them as a resource, South America is abundant with free resources.
While traveling in South America, you notice that there is no recycle bin and all the plastic bottles and metals are thrown away into garbage can.
I think that those materials can become resource for them. Instead of mining from the earth, they can collect those materials and reuse them. If you consider them as a resource, South America is abundant with free resources.
Tuesday, April 17, 2007
View of Glaciar Perito Moreno from sky
I flew from Puerto Montt to Punta Arenas today and the plane flew over Glaciar Perito Moreno. It was magnificent. The Glaciar was huge. The very first time to see a glaciar in full scale.
I would recommend everybody to fly to Punta Arenas to enjoy the view of Glaciar from the sky.
P.S. It turned out that the glaciar on the photo was Glaciar Ipsala. I have photos of Glaciar Perito Moreno, too, and I will put it here when I have a time.
Tuesday, April 10, 2007
Chilian people are very kind
I have found that people in Chile are very kind.
When I am traveling around, they are very helpful and always respect me.
I am enjoying meeting people here.
When I am traveling around, they are very helpful and always respect me.
I am enjoying meeting people here.
Saturday, April 07, 2007
Valparaiso and Vina del Mar in Chile
Yesterday, I visited Valparaiso and Vina del Mar from Santiago in Chile.
On the bus, a local lady from Valparaiso kindly gave me information about Valparaiso.
I asked for a good seafood restaurant. And she recommended me Bar La Playa. It was a very good and unique place. People there were very nice. The waitress was very kind. She even let me go behind the counter and took a picture for me. It is not listed in South American Handbook - the guidebook I'm using. The price range is the middle range in that book, i.e. $6-11. Good food. It's located just west of Plaza Sotomayor. There is an entrance both on Cochrane and Serrano.
Speaking of what's new from the information on the guidebook, the train between Valparaiso and Vina del Mar is actually a modern Metro. You have to purchase a card for 500 pesos. Then you have to add money for the fair on the top of it.

Valparaiso

Entrance of Bar La Playa on Cochrane (Avenue?) in Valparaiso

Vina del Mar
On the bus, a local lady from Valparaiso kindly gave me information about Valparaiso.
I asked for a good seafood restaurant. And she recommended me Bar La Playa. It was a very good and unique place. People there were very nice. The waitress was very kind. She even let me go behind the counter and took a picture for me. It is not listed in South American Handbook - the guidebook I'm using. The price range is the middle range in that book, i.e. $6-11. Good food. It's located just west of Plaza Sotomayor. There is an entrance both on Cochrane and Serrano.
Speaking of what's new from the information on the guidebook, the train between Valparaiso and Vina del Mar is actually a modern Metro. You have to purchase a card for 500 pesos. Then you have to add money for the fair on the top of it.
Valparaiso
Entrance of Bar La Playa on Cochrane (Avenue?) in Valparaiso
Vina del Mar
Thursday, April 05, 2007
First Time South America
I have just arrived at Santiago in Chile yesterday morning.
This is my first time to South America.
So far, things are going smoothly.
I´m writing this blog at an Internet Cafe in downtown Santiago.
When I can connect my digital camera to a computer, I will try to post some photos here.
This is my first time to South America.
So far, things are going smoothly.
I´m writing this blog at an Internet Cafe in downtown Santiago.
When I can connect my digital camera to a computer, I will try to post some photos here.
Tuesday, March 27, 2007
InfoQ posted an article about a Ruby on Rails project similar to what I have been contributing to
"Ruby on Rails case study: ChangingThePresent.org"
I posted a reply introducing our Open Source Ruby on Rails project.
Well, that would reveal which project I have been working on, which is against the intension of this blog. In this blog, I'm trying to avoid revealing any project or individual so that I can express myself more freely and that I wouldn't offend anybody without intension by mistake. After all, naming somebody and blaming him/her explicitly doesn't help to solve a problem.
I posted a reply introducing our Open Source Ruby on Rails project.
Well, that would reveal which project I have been working on, which is against the intension of this blog. In this blog, I'm trying to avoid revealing any project or individual so that I can express myself more freely and that I wouldn't offend anybody without intension by mistake. After all, naming somebody and blaming him/her explicitly doesn't help to solve a problem.
Monday, March 26, 2007
Easy On, Easy Off - it's true
"Getting Real" says "Make signup and cancellation a painless process".
And I think that making cancellation a painless process is crucial.
It is important for your business.
I have recently encountered the situation that cancellation was painful by being refused to be given the necessary information.
All I wanted to do was to put my auto insurance on hold while I'm not driving my car for a few months. I never expected that the auto insurance agent would give me a hard time. He even diffused my question - do I have to visit the office to sign a document? He talked about different things and never answered my question. He never gave a clear answer about what happens to the money I already paid.
Then I was reminded of what "Getting Real" said. Making customer's life difficult is not a good business practice. I expect a painless cancellation process will become prevalent in the business in the coming future.
P.S.
As I wrote this blog, I was reminded of my visit to Arusha in Tanzania about 10 years ago. It was the base for Safari trip to Serengeti National Park. The moment I got off the bus, people crowded around me and all shouted at me insisting to join their Safari package. Because all were talking to me at the same time and didn't give me any time to even respond, all I did was to walk away into an accommodation. They might be desperate and were obviously new to capitalism. And I'm not judging their culture or anything. But it was pathetic.
And I think that making cancellation a painless process is crucial.
It is important for your business.
I have recently encountered the situation that cancellation was painful by being refused to be given the necessary information.
All I wanted to do was to put my auto insurance on hold while I'm not driving my car for a few months. I never expected that the auto insurance agent would give me a hard time. He even diffused my question - do I have to visit the office to sign a document? He talked about different things and never answered my question. He never gave a clear answer about what happens to the money I already paid.
Then I was reminded of what "Getting Real" said. Making customer's life difficult is not a good business practice. I expect a painless cancellation process will become prevalent in the business in the coming future.
P.S.
As I wrote this blog, I was reminded of my visit to Arusha in Tanzania about 10 years ago. It was the base for Safari trip to Serengeti National Park. The moment I got off the bus, people crowded around me and all shouted at me insisting to join their Safari package. Because all were talking to me at the same time and didn't give me any time to even respond, all I did was to walk away into an accommodation. They might be desperate and were obviously new to capitalism. And I'm not judging their culture or anything. But it was pathetic.
Sunday, March 25, 2007
Ruby on Rails production - just not to forget
Just in order not to forget, I just put a link here regarding migration.
"How to migrate databases in production environment"
"How to migrate databases in production environment"
Friday, March 23, 2007
RESTful Rails resources
One developer in the Open Source project I'm participating in posted links to RESTful Rails resources. I appreciate that he posted these links. I just paste them here so that I can access easily. They are all public site so should be OK to paste them here.
Getting started with RESTful rails
Nested CRUD resources in RAILS
Quick guide to the new scaffold_resource generator
Ruby on Rails: RESTful Routing Basics (slides)
Getting started with RESTful rails
Nested CRUD resources in RAILS
Quick guide to the new scaffold_resource generator
Ruby on Rails: RESTful Routing Basics (slides)
I use StoryBoard to plan my life, too
I use index cards on the wall or board to plan various errands just like you do in Agile software development. It is very effective. It motivated me to get the stories done. It gives me a sense of direction. And I feel good when stories are done.
InfoQ posted an article "Fun: Planning your Life with Index Cards" with the picture of Mike Mason's taskboard in his blog.
In my case, I put estimated time, too. Then I fit stories in the time available. That allows me which one has a higher priority and which one is non-essential so I can drop.
And after done, I put how long the story took. That gives me an instant retrospective that helps me to get better in what I do in my life.
InfoQ posted an article "Fun: Planning your Life with Index Cards" with the picture of Mike Mason's taskboard in his blog.
In my case, I put estimated time, too. Then I fit stories in the time available. That allows me which one has a higher priority and which one is non-essential so I can drop.
And after done, I put how long the story took. That gives me an instant retrospective that helps me to get better in what I do in my life.
Wednesday, March 21, 2007
"The End of Poverty" and "Integrated Community Development"
The coordinator of the non-profit organization I'm volunteering for kindly spent a time for me at a coffee shop today.
He mentioned the book by Jeffrey Sachs, "The End of Poverty". I bought the book right away. The back cover had a comment by Jared Diamond, the author of "Collapse", which I enjoyed reading (actually, listening to its audiobook).
Also he mentioned the concept of "Integrated Community Development".
I list the programs/organizations he mentioned:
- Millennium Promise
- Aga Khan Foundation
- Dhan Foundation
- Habitat for Humanity
- Opportunity International, also Opportunity International Canada
I am very excited.
He mentioned the book by Jeffrey Sachs, "The End of Poverty". I bought the book right away. The back cover had a comment by Jared Diamond, the author of "Collapse", which I enjoyed reading (actually, listening to its audiobook).
Also he mentioned the concept of "Integrated Community Development".
I list the programs/organizations he mentioned:
- Millennium Promise
- Aga Khan Foundation
- Dhan Foundation
- Habitat for Humanity
- Opportunity International, also Opportunity International Canada
I am very excited.
Saturday, March 17, 2007
Positive collaborative work at the current Open Source Rails project I'm participating in
Today, there was a first code review meeting at the Open Source Rails project I'm participating in. Before that, I wasn't necessarily fond of having a code review meeting without committing the code (of course, with tests) to RubyForge so that the project can progress based on the power of the collaboration of the community - I mean that's what's good about Open Source project. But the code review meeting turned out be quite good.
What I liked most was team members respected each other and each other's work regardless of the difference in the style of software development. It was a positive collaborative work.
What I liked most was team members respected each other and each other's work regardless of the difference in the style of software development. It was a positive collaborative work.
Thursday, March 15, 2007
Agile Estimating podcast
I listened to a podcast about Agile Estimating - an interview with Mike Cohn.
It was a fun to listen to.
They developed a web site for planning poker. It's written in Ruby on Rails. It's free to use. I'm going to try it out.
It was a fun to listen to.
They developed a web site for planning poker. It's written in Ruby on Rails. It's free to use. I'm going to try it out.
Wednesday, March 14, 2007
Database Refactoring
InfoQ posted a video of Scott Ambler's talk on Database Refactoring at Agile 2006.
I like the messages.
I like the messages.
Monday, March 12, 2007
A blog post about career in computer programming
I was looking at del.icio.us just to check out what's there. There was a post "Why a career in computer programming sucks". It was an interesting reading. And I think it hits the truth. His response to the comments was interesting, too, though I don't necessarily agree with everything he said in (4). It's true that it's a huge problem to integrate different technologies, but according to "The Wisdom of Crowds", variety and diversity produce a better product.
Your Code.. it's Alive..
My acquaintance sent me this Michael Feather's blog entry through Google Reader.
"Your Code.. it's Alive.."
I agree that code is alive.
I think that that's the reason why it's important to keep the code as simple as possible and to write a code only for a feature that is necessary at a time. And I think that it's important to write tests first to get reactions from the code.
"Your Code.. it's Alive.."
I agree that code is alive.
I think that that's the reason why it's important to keep the code as simple as possible and to write a code only for a feature that is necessary at a time. And I think that it's important to write tests first to get reactions from the code.
Saturday, March 10, 2007
Installing MacPorts on Mac OS X 10.4.8
Basically followed what's written in InstallingMacPorts.
But there were some things that didn't work.
So I write what was successful on my machine.
1. Install Xcode Tools.
From "Mac OS X Install Disk 1", select "Xcode Tools" -> click on "XcodeTools.mpkg".
Follow the installation window.
2. Install XWindows (X11).
From "Mac OS X Install Disk 1", click on "Optional Installs.mpkg".
Follow the installation window up to the step "Installation Type".
Under the right pane with the title "Custom Install on Macintosh HD", expand "Applications" -> check on "X11" -> click on "Install".
Follow the installation window until the end.
3. Set Shell environment.
As a root user (I think sudo would do, too), under its home folder(/var/root), add the followings to .profile file.
Save the file.
Execute "source ~/.profile".
As a root user (again I think sudo would do, too), add the following to /etc/X11/xinit/xinitrc.
4. Install MacPorts.
Download the latest MacPorts dmg file.
Click on the file to mount it.
Under the mounted directory, click on pkg file.
Follow the installation window.
5. Update MacPorts via selfupdate.
Execute "sudo port -d selfupdate".
But there were some things that didn't work.
So I write what was successful on my machine.
1. Install Xcode Tools.
From "Mac OS X Install Disk 1", select "Xcode Tools" -> click on "XcodeTools.mpkg".
Follow the installation window.
2. Install XWindows (X11).
From "Mac OS X Install Disk 1", click on "Optional Installs.mpkg".
Follow the installation window up to the step "Installation Type".
Under the right pane with the title "Custom Install on Macintosh HD", expand "Applications" -> check on "X11" -> click on "Install".
Follow the installation window until the end.
3. Set Shell environment.
As a root user (I think sudo would do, too), under its home folder(/var/root), add the followings to .profile file.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export DISPLAY=:0.0
export EDITOR=/usr/bin/vim
Save the file.
Execute "source ~/.profile".
As a root user (again I think sudo would do, too), add the following to /etc/X11/xinit/xinitrc.
source ~/.profile
4. Install MacPorts.
Download the latest MacPorts dmg file.
Click on the file to mount it.
Under the mounted directory, click on pkg file.
Follow the installation window.
5. Update MacPorts via selfupdate.
Execute "sudo port -d selfupdate".
Friday, March 09, 2007
Ruby programmers do it from within Ruby
From "Ruby Cookbook", Recipe 10.10 "Avoiding Boilerplate Code with Metaprogramming".
I think this would make a good bumper sticker, too.
I think this would make a good bumper sticker, too.
Thursday, March 08, 2007
Positive encounters
Being negative and critical is easy. When I read books/articles with the level equivalent to that of academic books, or when I do intense logical reasoning, I tend to be critical to what others do or how society is functioning, probably because my brain is required to distinguish various details.
At the same time, reading reading about biology, genetics, evolution, physics, psychology, etc. makes me realize how amazing it is that our body is even functioning cohesively which is based on the series of constant reactions (to change/environment) and their results. I cannot help thinking how precious each individual or each individual creature is. I want to be positive to everybody so that he/she can make the most out of what he/she has.
So I thought I start writing any small positive encounter in my blog as much as I can. By writing and making it public, I can have more balance in my view, especially when I'm doing critical thinkings most of the time, writing programs or learning new technologies, etc.
At the same time, reading reading about biology, genetics, evolution, physics, psychology, etc. makes me realize how amazing it is that our body is even functioning cohesively which is based on the series of constant reactions (to change/environment) and their results. I cannot help thinking how precious each individual or each individual creature is. I want to be positive to everybody so that he/she can make the most out of what he/she has.
So I thought I start writing any small positive encounter in my blog as much as I can. By writing and making it public, I can have more balance in my view, especially when I'm doing critical thinkings most of the time, writing programs or learning new technologies, etc.
Getting Real
About a month ago, a Ruby on Rails instructor/consultant gave me his copy of "Getting Real" from 37 Signals. I've been enjoying reading it. They and I share the same view.
Today, I've found that you can read it online ("Getting Real")
Today, I've found that you can read it online ("Getting Real")
Linux community is wonderful
I have just attended the local Linux Users Group.
They are very nice people. Every time I attend, I feel refreshed and motivated.
They are very nice people. Every time I attend, I feel refreshed and motivated.
Wednesday, March 07, 2007
Testing Web Applications with Selenium and Ruby
Bob Cotton from Rally made a talk about "Testing Web Applications with Selenium and Ruby" at the local Agile Methods Users Group.
It was very good. I liked Selenium IDE, which is Firefox Plugin, with which you can record and play back user actions. It generates Selenium HTML script. And what I liked most was that you can export to Java or Ruby code (or any language Selenium supports) in the format of TestCase like JUnit.
And I liked the way they used Ruby for their tool on the top of Selenium. Even though that second section of the talk was about their proprietary tool, I learned a lot about how Ruby is used. I liked the way they used Metaprogramming and block.
Reference: http://openqa.org, RSpec
It was very good. I liked Selenium IDE, which is Firefox Plugin, with which you can record and play back user actions. It generates Selenium HTML script. And what I liked most was that you can export to Java or Ruby code (or any language Selenium supports) in the format of TestCase like JUnit.
And I liked the way they used Ruby for their tool on the top of Selenium. Even though that second section of the talk was about their proprietary tool, I learned a lot about how Ruby is used. I liked the way they used Metaprogramming and block.
Reference: http://openqa.org, RSpec
Saturday, March 03, 2007
Some disappointment at the current Open Source Rails project I'm participating in
I'm involved in a local Open Source Rails project.
It's building a web site for people to donate money for development/aid projects in developing countries. The purpose is very motivating.
Since it's local, I have been attending their meetings every week.
There are some disappointments.
I just list them as they come up to my mind.
- A person is against writing functional tests and doesn't know what Continuous Integration is for. And he is warning that there will be a merging problem with confidence. -> Well, if there is a merging problem and a problem of dealing with it, that's because he doesn't write tests and that's because he doesn't know anything about Continuous Integration. Continuous Integration and running test automatically are for preventing such a merging problem.
- A person insists that if you design up front correctly, you don't have to change anything later. He says Refactoring is necessary only because architecture is not defined correctly at the beginning. But he is ignorant with Ruby on Rails built-in architecture. -> First of all, software development is a product development activity not manufacturing. And it is closer to scientific research in the sense that discovery is constantly made(See Mary Poppendieck's Lean Software Development.). Second of all, he is forcing his architecture as if it is the only one. There are many architectures for different purposes and different tools. And Ruby on Rails uses one of them. And all the rest of the team have understanding of it and are trying to follow it. He is the only one who is ignorant about it and believes that his architecture works for Ruby on Rails.
- Developers are expected to bring the code in their laptop to the next meeting. Committing the code to RubyForge is prohibited. -> That's not utilizing Open Source approach. When some of them were working on this project under SourceForge, one person (the same one as the first one above) was committing the code without running tests and the code was constantly broken. Now they are preventing developers from committing the code? Write tests, do Continuous Integration!
I wish I could speak up. But just like the consulting company I worked for before, which I wrote about several times, if I speak up and say the right thing when others are completely wrong, if they don't get it, they do anything to discredit me and socially destroy me by spreading bad rumors in this city. Unfortunately, there are many people in the city who take part in as their tools.
It is even a joke that a person in that company who is writing testing patterns book is criticizing me that I'm insisting on writing unit tests, using the excuse that unit testing is not necessary if testing doesn't fit the organization. (The claim that Agile should be adjusted to fit local environment is not an excuse to ignore software quality.)
So I learned that it is important to work for a project/organization/team that embrace what I'm into, namely, Agile software development. And it is better than persuading a team who doesn't embrace Agile software development.
And because last year in this project, there was an argument between me and the first person above about Test-Driven Development and idea of Continuous Integration, both of which he had no idea about, when I was invited again to the project about a month ago, I decided not to say anything because I thought it was not an environment that embraces Agile software development.
Luckily, there were at least two people who understand Agile software development. And until a few weeks ago, I was getting a better feeling about this project.
Now, I'm disappointed again.
And there are many things they are trying to solve that are already identified by Agile software development (, which even provides solutions already). Do I have to go through all the troubles and time until they rediscover the same solution on their own?
It's building a web site for people to donate money for development/aid projects in developing countries. The purpose is very motivating.
Since it's local, I have been attending their meetings every week.
There are some disappointments.
I just list them as they come up to my mind.
- A person is against writing functional tests and doesn't know what Continuous Integration is for. And he is warning that there will be a merging problem with confidence. -> Well, if there is a merging problem and a problem of dealing with it, that's because he doesn't write tests and that's because he doesn't know anything about Continuous Integration. Continuous Integration and running test automatically are for preventing such a merging problem.
- A person insists that if you design up front correctly, you don't have to change anything later. He says Refactoring is necessary only because architecture is not defined correctly at the beginning. But he is ignorant with Ruby on Rails built-in architecture. -> First of all, software development is a product development activity not manufacturing. And it is closer to scientific research in the sense that discovery is constantly made(See Mary Poppendieck's Lean Software Development.). Second of all, he is forcing his architecture as if it is the only one. There are many architectures for different purposes and different tools. And Ruby on Rails uses one of them. And all the rest of the team have understanding of it and are trying to follow it. He is the only one who is ignorant about it and believes that his architecture works for Ruby on Rails.
- Developers are expected to bring the code in their laptop to the next meeting. Committing the code to RubyForge is prohibited. -> That's not utilizing Open Source approach. When some of them were working on this project under SourceForge, one person (the same one as the first one above) was committing the code without running tests and the code was constantly broken. Now they are preventing developers from committing the code? Write tests, do Continuous Integration!
I wish I could speak up. But just like the consulting company I worked for before, which I wrote about several times, if I speak up and say the right thing when others are completely wrong, if they don't get it, they do anything to discredit me and socially destroy me by spreading bad rumors in this city. Unfortunately, there are many people in the city who take part in as their tools.
It is even a joke that a person in that company who is writing testing patterns book is criticizing me that I'm insisting on writing unit tests, using the excuse that unit testing is not necessary if testing doesn't fit the organization. (The claim that Agile should be adjusted to fit local environment is not an excuse to ignore software quality.)
So I learned that it is important to work for a project/organization/team that embrace what I'm into, namely, Agile software development. And it is better than persuading a team who doesn't embrace Agile software development.
And because last year in this project, there was an argument between me and the first person above about Test-Driven Development and idea of Continuous Integration, both of which he had no idea about, when I was invited again to the project about a month ago, I decided not to say anything because I thought it was not an environment that embraces Agile software development.
Luckily, there were at least two people who understand Agile software development. And until a few weeks ago, I was getting a better feeling about this project.
Now, I'm disappointed again.
And there are many things they are trying to solve that are already identified by Agile software development (, which even provides solutions already). Do I have to go through all the troubles and time until they rediscover the same solution on their own?
New Continuous Integration server - CruiseControl.rb
CruiseControl.rb. It's very nice.
And it's based on Ruby on Rails.
Reading its code is a fun, too.
I heard that the version 1 would be released soon.
And it's based on Ruby on Rails.
Reading its code is a fun, too.
I heard that the version 1 would be released soon.
Thursday, March 01, 2007
Allowing Remote Login with SSH on Mac OS X
Sounds silly but took a while to figure out how to allow SSH access on Mac OS X.
I expected that it would act the similar way as in Linux.
But it was different, at least from user interface.
Just to remember for myself, this is what I did:
"System Preferences" -> "Sharing" -> "Services" -> Check on "Remote Login"
Also activated Firewall:
"System Preferences" -> "Sharing" -> "Firewall" -> Click on "Start" button
The main problem is that Google search doesn't provide the answer.
When I search for an answer for Linux related question, Google search usually gives me a very good hit. But that is not the case for Mac OS X.
I expected that it would act the similar way as in Linux.
But it was different, at least from user interface.
Just to remember for myself, this is what I did:
"System Preferences" -> "Sharing" -> "Services" -> Check on "Remote Login"
Also activated Firewall:
"System Preferences" -> "Sharing" -> "Firewall" -> Click on "Start" button
The main problem is that Google search doesn't provide the answer.
When I search for an answer for Linux related question, Google search usually gives me a very good hit. But that is not the case for Mac OS X.
Sunday, February 18, 2007
Super Developer as recruiters said
At one user group meeting, recruiters said that companies are asking for so-called Super Developer, who can use e.g. Java, PHP as needed.
At that time, I thought that it is difficult to be such a developer unless you are in an Agile software development environment, especially, Extreme Programming using Pair Programming.
In Extreme Programming, developers work on different tasks, e.g. front-end, server-side, database, environment settings, switching to work on different tasks often. But if you work in non-Agile environment, you are only assigned to one task, such as front-end GUI development and you never have a chance to even look at the code for the rest of the system.
One recruiter said that you need to be able to work on both Agile and non-Agile environment. Of course, she is just a recruiter and doesn't know what is actually involved in software development. But you can't ask a developer to be a Super Developer while you are demanding him/her to work in non-Agile environment.
Also, I thought that they are missing that each language has its pitfalls. How can one person know the pitfalls when he/she is working on many languages for a short period of time each? What I observed from those developers is that they tended to use wrong solution for each language because they didn't know that there is a better proper well-established solution in a particular language because he/she hadn't had enough time to learn about them.
I also think that it may be an organizational problem in the companies that they demand Super Developer. Aren't they using improper stale technologies instead of improving to use better technologies that have learned from the mistakes made by other technologies in the past? If that's the case, even if the companies bring Super Developer, he/she cannot solve the fundamental problem and as he/she works in such an environment, he/she eventually stops being Super Developer because he/she is constrained to use only the technologies the companies force.
Instead, I agree with what Scott W. Ambler said in his essay on Generalizing Specialists.
At that time, I thought that it is difficult to be such a developer unless you are in an Agile software development environment, especially, Extreme Programming using Pair Programming.
In Extreme Programming, developers work on different tasks, e.g. front-end, server-side, database, environment settings, switching to work on different tasks often. But if you work in non-Agile environment, you are only assigned to one task, such as front-end GUI development and you never have a chance to even look at the code for the rest of the system.
One recruiter said that you need to be able to work on both Agile and non-Agile environment. Of course, she is just a recruiter and doesn't know what is actually involved in software development. But you can't ask a developer to be a Super Developer while you are demanding him/her to work in non-Agile environment.
Also, I thought that they are missing that each language has its pitfalls. How can one person know the pitfalls when he/she is working on many languages for a short period of time each? What I observed from those developers is that they tended to use wrong solution for each language because they didn't know that there is a better proper well-established solution in a particular language because he/she hadn't had enough time to learn about them.
I also think that it may be an organizational problem in the companies that they demand Super Developer. Aren't they using improper stale technologies instead of improving to use better technologies that have learned from the mistakes made by other technologies in the past? If that's the case, even if the companies bring Super Developer, he/she cannot solve the fundamental problem and as he/she works in such an environment, he/she eventually stops being Super Developer because he/she is constrained to use only the technologies the companies force.
Instead, I agree with what Scott W. Ambler said in his essay on Generalizing Specialists.
Friday, February 16, 2007
Set up Pound to use HTTPS with Mongrel
I wanted to use HTTPS and followed what is written in Pound Best Practice Deployment and Pound Installation mostly. Also Think Again! >> Mongrel is useful.
Briefly, the following is what I did:
1. Install Pound
$./configure --prefix=/usr/local
$ make
$ sudo make install
2. Update mongrel to 1.0.1 (because I had one older one)
$ gem update mongrel
3. Install mongrel_cluster gem
$ gem install mongrel_cluster
4. Configure Pound
4-1. Created pound.cfg under /user/local/etc.
4-2. Filled the pound.cfg with the following content:
4-3. Generated test certificate
$ openssl req -x509 -newkey rsa:1024 -keyout test.pem -out test.pem -days -nodes
5. Configure Mongrel Cluster and start Mongrel with Cluster
$ cd railsapp
$ mongrel_rails cluster::configure -p 8000 -N 1 (I set the number of clusters to be 1.)
$ mongrel_rails cluster::start
6. Start Pound
$ sudo pound -f /usr/local/etc/pound.cfg
Note:
The following command shows Help for Mongrel (e.g. "mongrel_rails cluster::stop" to stop Mongrel with Cluster):
$ mongrel_rails help
Briefly, the following is what I did:
1. Install Pound
$./configure --prefix=/usr/local
$ make
$ sudo make install
2. Update mongrel to 1.0.1 (because I had one older one)
$ gem update mongrel
3. Install mongrel_cluster gem
$ gem install mongrel_cluster
4. Configure Pound
4-1. Created pound.cfg under /user/local/etc.
4-2. Filled the pound.cfg with the following content:
ListenHTTP
Address 0.0.0.0
Port 80
Service
BackEnd
Address 127.0.0.1
Port 8000
End
End
End
ListenHTTPS
Address 0.0.0.0
Port 443
Cert "/usr/local/etc/test.pem"
# pass along https hint
AddHeader "X-Forwarded-Proto: https"
HeadRemove "X-Forwarded-Proto"
Service
BackEnd
Address 127.0.0.1
Port 8000
End
End
End
4-3. Generated test certificate
$ openssl req -x509 -newkey rsa:1024 -keyout test.pem -out test.pem -days -nodes
5. Configure Mongrel Cluster and start Mongrel with Cluster
$ cd railsapp
$ mongrel_rails cluster::configure -p 8000 -N 1 (I set the number of clusters to be 1.)
$ mongrel_rails cluster::start
6. Start Pound
$ sudo pound -f /usr/local/etc/pound.cfg
Note:
The following command shows Help for Mongrel (e.g. "mongrel_rails cluster::stop" to stop Mongrel with Cluster):
$ mongrel_rails help
Tuesday, February 06, 2007
Product development, not project
Inspired by "Implementing Lean Software Development" , I like the term, "product development".
Friday, February 02, 2007
Uncle Bob's blog about Specs vs. Tests
Specs vs. Tests.
I like RSpec myself and Behavior-Driven Development in general.
But never thought of it in the way Uncle Bob described.
Also the comments to the blog by Michael Feathers and others are interesting.
Interesting reading.
I just wish I could work with developers like them.
I like RSpec myself and Behavior-Driven Development in general.
But never thought of it in the way Uncle Bob described.
Also the comments to the blog by Michael Feathers and others are interesting.
Interesting reading.
I just wish I could work with developers like them.
Wednesday, January 24, 2007
I thought using Mac was easier than Linux...
I was just trying to add a group, which is a very easy thing to do in Linux, especially when using GUI.
But it turned out that it is such a pain to do so with Mac OS X. Maybe it's because I'm new to it and not familiar with it. But I wonder if it is because of OS X or FreeBSD.
Also I found that copying and pasting an application on Desktop actually copies the entire application to the Desktop folder instead of creating a short cut on it like in Linux. So I opened a terminal window and created symbolic link inside the Desktop folder. But I wonder if general Mac users would do that or even know what symbolic link is.
It seems that I have a lot to learn. Despite of it, I'm enjoying using Mac. It's just that so far, Ubuntu is much easier to use for me.
But it turned out that it is such a pain to do so with Mac OS X. Maybe it's because I'm new to it and not familiar with it. But I wonder if it is because of OS X or FreeBSD.
Also I found that copying and pasting an application on Desktop actually copies the entire application to the Desktop folder instead of creating a short cut on it like in Linux. So I opened a terminal window and created symbolic link inside the Desktop folder. But I wonder if general Mac users would do that or even know what symbolic link is.
It seems that I have a lot to learn. Despite of it, I'm enjoying using Mac. It's just that so far, Ubuntu is much easier to use for me.
Monday, January 15, 2007
Installed Ruby on Rails and Subversion on MacBook
Locomotive didn't work well or I don't know enough about it. Also I couldn't use Eclipse with it.
So I installed Ruby on Rails and all the dependencies from command line, including compiling Ruby from src.
Certainly my experience of installing it from command line on Ubuntu in order to install the latest one instead of the older one installed by packaging tool helped me.
Also installed Subversion server.
The steps I had to take reminded me of what I had to do when I installed it on Ubuntu.
But this time, I installed everything under /usr/local instead of using the packaged ones for the depending libraries. So it involved more.
Those libraries are in addition to what is written in Dan Benjamin's blog.
But I liked the process because it was Unix/Linux-like. Of course, it is Unix.
The steps I took for Subversion installation are as follows:
1. Install Apache Portable Runtime.
1-1. Download src.(http://apr.apache.org/download.cgi)
1-2. ./configure --prefix=/usr/local
1-3. make
1-4. sudo make install
2. Install Apache Portable Runtime Utility.
2-1. Download src. (http://apr.apache.org/download.cgi)
2-2. ./configure --prefix=/usr/local --with-apr=/usr/local/
2-3. make
2-4. sudo make install
3. Install WebDAV neon.
3-1. Download src. (http://www.webdav.org/neon/neon-0.25.5.tar.gz)
3-2. ./configure --prefix=/usr/local --with-openssl --with-ssl
3-3. make
3-4. sudo make install
4. Install Apache to eliminate warning during ./configure for subversion.
4-1. Download src. (http://httpd.apache.org/download.cgi)
4-2. ./configure --prefix=/usr/local --enable-module=so
4-3. make
4-4. sudo make install
5. Install Apache Portable Runtime iconv.
5-1. Download src. (http://apr.apache.org/download.cgi)
5-2. ./configure --prefix=/usr/local --with-apr=/usr/local/
5-3. sudo make install
6. Install Subversion.
6-1. Download src.
6-2. ./configure --prefix=/usr/local --with-openssl --with-ssl --with-zlib --with-apxs
6-3. make
6-4. sudo make install
So I installed Ruby on Rails and all the dependencies from command line, including compiling Ruby from src.
Certainly my experience of installing it from command line on Ubuntu in order to install the latest one instead of the older one installed by packaging tool helped me.
Also installed Subversion server.
The steps I had to take reminded me of what I had to do when I installed it on Ubuntu.
But this time, I installed everything under /usr/local instead of using the packaged ones for the depending libraries. So it involved more.
Those libraries are in addition to what is written in Dan Benjamin's blog.
But I liked the process because it was Unix/Linux-like. Of course, it is Unix.
The steps I took for Subversion installation are as follows:
1. Install Apache Portable Runtime.
1-1. Download src.(http://apr.apache.org/download.cgi)
1-2. ./configure --prefix=/usr/local
1-3. make
1-4. sudo make install
2. Install Apache Portable Runtime Utility.
2-1. Download src. (http://apr.apache.org/download.cgi)
2-2. ./configure --prefix=/usr/local --with-apr=/usr/local/
2-3. make
2-4. sudo make install
3. Install WebDAV neon.
3-1. Download src. (http://www.webdav.org/neon/neon-0.25.5.tar.gz)
3-2. ./configure --prefix=/usr/local --with-openssl --with-ssl
3-3. make
3-4. sudo make install
4. Install Apache to eliminate warning during ./configure for subversion.
4-1. Download src. (http://httpd.apache.org/download.cgi)
4-2. ./configure --prefix=/usr/local --enable-module=so
4-3. make
4-4. sudo make install
5. Install Apache Portable Runtime iconv.
5-1. Download src. (http://apr.apache.org/download.cgi)
5-2. ./configure --prefix=/usr/local --with-apr=/usr/local/
5-3. sudo make install
6. Install Subversion.
6-1. Download src.
6-2. ./configure --prefix=/usr/local --with-openssl --with-ssl --with-zlib --with-apxs
6-3. make
6-4. sudo make install
Sunday, January 14, 2007
I've got MacBook!
I have just got a MacBook two days ago.
I'm enjoying using it.
Since I like Ubuntu, I installed it on VMware Fusion (Mac version of VMware) on it.
I still have a lot to learn about MacBook. It's different from Linux and what I'm not familiar with is how to manage applications, which you can do with apt-get, yum, etc. on Linux. Also the directory structure itself.
The next thing I do is to set up Ruby on Rails on it.
Well, I kept the promise to get one with a speaker at No Fluff Just Stuff conference last September. Of course, many other people recommended, too.
I'm enjoying using it.
Since I like Ubuntu, I installed it on VMware Fusion (Mac version of VMware) on it.
I still have a lot to learn about MacBook. It's different from Linux and what I'm not familiar with is how to manage applications, which you can do with apt-get, yum, etc. on Linux. Also the directory structure itself.
The next thing I do is to set up Ruby on Rails on it.
Well, I kept the promise to get one with a speaker at No Fluff Just Stuff conference last September. Of course, many other people recommended, too.
Tuesday, January 09, 2007
James Bach's talk: The Unbearable Lightness of Model-Based Testing
There was a talk by James Bach this evening.
The talk itself was OK. But the Question and Answer session was very interesting. Many good points and interesting concepts. "The Law of Leaky Abstractions", Pair Testing, Blink Testing (which is based on the functionality of a certain region of frontal cortex), etc.
From his past presentation, I knew that his background was from exploratory, more like hacking style. With that knowledge in mind, what he said today had good points.
The talk itself was OK. But the Question and Answer session was very interesting. Many good points and interesting concepts. "The Law of Leaky Abstractions", Pair Testing, Blink Testing (which is based on the functionality of a certain region of frontal cortex), etc.
From his past presentation, I knew that his background was from exploratory, more like hacking style. With that knowledge in mind, what he said today had good points.
Thursday, January 04, 2007
Most problems come from what is not written in specification
I spent the New Year's Eve at a small town and had a chance to have a dinner with someone who owns a software business.
He mentioned that most of the problems come from what is not written in the specification. And that big companies deal with it by making smaller contracting companies work long-hour over-time, which I think is terrible.
He was not familiar with Agile software development.
I mentioned that the essence of Agile software development is to accept the reality of what actually happens in software development and to deal with it. What those big companies are doing is completely wrong.
It seems that people who are not familiar with Agile software development is also noticing what it is identifying.
I felt that more people are in the same page with us.
Anyway, I enjoyed the conversation with him.
He mentioned that most of the problems come from what is not written in the specification. And that big companies deal with it by making smaller contracting companies work long-hour over-time, which I think is terrible.
He was not familiar with Agile software development.
I mentioned that the essence of Agile software development is to accept the reality of what actually happens in software development and to deal with it. What those big companies are doing is completely wrong.
It seems that people who are not familiar with Agile software development is also noticing what it is identifying.
I felt that more people are in the same page with us.
Anyway, I enjoyed the conversation with him.
Subscribe to:
Posts (Atom)