2010-09-24

How to Setup Ubuntu Server on Rackspace




Rackspace上にUbuntuサーバを作る度に、iptables設定やssh portの番号を変更するやり方を忘れてしまい、右往左往してしまうので、ちょっと今回のサーバ立て直しを機にメモをしときます。もし同じような境遇の人がいたら参考にしてください。

The following instructions are my memos for initial setup Ubuntu 10.04 server on Rackspace. After initializing, I often change my port number, because servers on Rackspace are often attacked by the port scan, so I recommend to change your port no. as soon as possible after your initializations.


Setup Ubuntu Server
================
0. Any information on Ubuntu 10.04 Server can be found in the following page.
http://cloudservers.rackspacecloud.com/index.php/Ubuntu_10.04_LTS_(Lucid)

1. Follow the articles to setup.
http://cloudservers.rackspacecloud.com/index.php/Ubuntu_-_Setup

2. Change your port number to make your server secure.
# emacs /etc/ssh/sshd_config

     # What ports, IPs and protocols we listen for
     #Port 22     <--- Comment out
     Port 12345 <--- Change port number as you wish

# /etc/init.d/ssh restart
# iptables -I INPUT -p tcp -m tcp --dport 12345 --syn -j ACCEPT
# /etc/init.d/ssh restart
# iptables-save > /etc/iptables.rules

3. Try to login the server from your computer.

$ ssh -p 12345 YOUR_UBUNTU_SERVER

If you can login your server, it's done.
Your server is now able to avoid from the port scan attack



Option: For Printing Japanese
=========================
$ apt-get install language-pack-ja
$ dpkg-reconfigure locales
$ update-locale LANG=ja_JP.UTF-8

Option: Print error message in English

# echo 'export LC_MESSAGES="en_US.UTF-8"' >> ~/.profile


References:
1. LANDISK HACKING DIARY
2. Ubuntuでロケール(ja_JP.eucjp)追加, なんとなくメモ

2010-09-19

アカウント名変更のお知らせ




twitterではちょろっとつぶやきましたが、次の理由から、アカウント名、およびそれに伴うURL名等を一斉に変更しました。

- 1. yasu_ninety9って読み方が分かりづらい。-> 覚えにくい
- 2. そもそも文字列が長い。-> twitterだと致命的
- 3. 日本語で4文字だと覚えやすい、らしい。(友人談)

お手数をおかけしてしまい申し訳ありませんが、もしリンクなど張っていた場合は、再度張り直して頂けると幸いです。なお、主な変更点は次の通りです。

- Twitter: @yasu_ninety9 -> @yasulab
- Web: http://www.arukou.sakura.ne.jp/yasulab/ -> http://www.yasulab.com/
- Blog: http://yasu1987.blogspot.com/ -> http://yasulab.blogspot.com/



留学生活も、もうそろそろで1ヶ月。ぼちぼち授業および課題の内容も高度になってきました。”徹夜なんて絶対したくない”と頑なに決意したものの、意外と慣れればどうにかなるもんです。いや、それでも出来ればしたくないものですが。

唯一の心のよりどころである少年ジャンプも、アメリカだと月刊少年ジャンプになるらしく、しかもブリーチとかNarutoとか一部の漫画しか載っていない。当然セリフは英語で、しかも価格は日本の2倍以上。これなんてイジメorz。マンガオンラインのさらなる発展を心から心から応援しています。

2010-09-09

OAuth on Simple Twitter Bot




僕は直前になるまで、というか、実際に仕様変更されるまで気付かなかったわけですが、今月の頭からTwitterのBasic認証が使えなくなったそうですね。従って、Basic認証を用いてTwitterのAPIを使用しているBot達は、仕様変更の日を境に、屍と化してしまっているそうです。

僕が作ったtango! botなども同様に、Basic認証を利用していたので、屍と化してしまいました。ですが、tango! botにザオリクを唱えて欲しい(?)というご要望に応えまして、先週末にOAuth認証システムを実装しました。

で、せっかく実装したので、Simple Twitter Botを例にとって僕の実装例を次の場所に置いておきます。参考になるかどうかは甚だ疑問ではありますが、もし何かの参考になれたら幸いです。



*main.py(要約)
#!/usr/bin/env python
#! -*- coding: utf-8 -*-

from appengine_twitter import AppEngineTwitter
from basehandler import BaseHandler, h
import twitter
import sys, os, pickle
from oauthtwitter import *

# User Setting and Run Twitter Bot
#debug_flag = True
debug_flag = False
MAX_LEN = 140
SEARCH_TERM = u'"hogehoge" OR foobar'
CONSUMER_KEY    = "???"
CONSUMER_SECRET = "???"
KEY_FILE_API    = "api_key.dat"
KEY_FILE_TWITTER = "twitter_key.dat"
BOT_USERNAME = "YOUR_BOT_NAME"
BOT_PASSWORD = "???"

def oauth_twitter():
   access_token = pickle.load(file(KEY_FILE_API))
   return OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
                                                                      
# twitter.Api.__init__ method for override.
def twitter_api_init_gae(self,
                       username=None,
                       password=None,
                       input_encoding=None,
                       request_headers=None):
   import urllib2
   from twitter import Api
   self._cache = None

   self._urllib = urllib2
   self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT
   self._InitializeRequestHeaders(request_headers)
   self._InitializeUserAgent()
   self._InitializeDefaultParameters()
   self._input_encoding = input_encoding
   self.SetCredentials(username, password)

def run(name, pswd, search_term):
   acc_token = pickle.load(file(KEY_FILE_API))
   gae_twitter = AppEngineTwitter()   
   gae_twitter.set_oauth(CONSUMER_KEY,
                         CONSUMER_SECRET,
                         acc_token.key,
                         acc_token.secret)

   results = gae_twitter.search(search_term.encode('utf8'), {'rpp': 20})
   api = oauth_twitter() 
   escape_user_list = []
   escape_user_list.append(name)
   
   # Get most corrently tweeted tweet
   status = api.GetUserTimeline()
   
   for s in status:
      if s.text.startswith("RT"):
         recent_tweet = s.text
         break
      else:
         print "The following tweet would be posted by hand, so skipped it."
         print "Tweet: " + s.text.encode('utf8')
         print
      
   print "Recent Tweet: "+recent_tweet.encode('utf8')
   print

   # Search Most Recent Tweet
   results.reverse()
   flag_enable = 0
   for i,result in enumerate(results):
      rt = "RT [at]" + result['from_user']  + " " + result['text']
      rt_len = len(rt)
      
      if flag_enable:
         print "I am going to tweet the tweet above."
         """
         Retweet and exit
         """
         print "I have re-tweeted: "+rt.encode('utf8')
         print "Result of my re-tweeting: " + str(gae_twitter.update(rt.encode('utf8')))
         exit()
               
      if recent_tweet.replace("@", "[at]") == rt.replace("@", "[at]"):
         flag_enable = 1

   if flag_enable:
      print "There are no tweet found that I should tweet."
      exit()
   print
   print "There are no tweets recently tweeted, so tweet the oldest tweet."
   print

   for i,result in enumerate(results):  
      rt = "RT [at]" + result['from_user']  + " " + result['text']  
      rt_len = len(rt)

      print "I am going to tweet the tweet above."
      """
      Retweet and exit
      """
      print "I have tweeted: "+rt.encode('utf8')
      print "Result of my re-tweeting: " + str(gae_twitter.update(rt.encode('utf8')))
      exit()

# overriding API __init__
twitter.Api.__init__ = twitter_api_init_gae

# Start to run
run(BOT_USERNAME, BOT_PASSWORD, SEARCH_TERM)




*使い方(READMEから一部引用)
This bot runs in the following ways.

1. Search tweets using 'search_term' in Twitter.

2. Re-tweet the tweets.


HOW TO SETUP:
1. Register your OAuth client on Twitter
URL: http://twitter.com/oauth_clients
* you MUST choose 'client' for Simple Twitter Bot.

2. Run 'python register_pin.py' and
use CONSUMER_KEY and CONSUMER_SECRET you got from the registeration.

3. Change setting variables(e.g. CONSUMER_KEY, CONSUMER_SECRET) in main.py

4. Run Google App Engine dev_server and visit the following URL
URL: http://localhost:8080/cron/update
* If you finish all of your setting, set debug_flag in main.py off.

5. Done!

Enjoy developing your own twitter bot!

*他、ソースコード一式

*使ったもの
- App Engine Twitter
- python-twitter
- oauth-python-twitter
- Google App Engine

*参考にさせて頂いたサイト

2010-09-01

Background ver. 03







そろそろプロフィールが古くなってきたので更新。


----------------------------- 
Index 
・今 
・学部時代にやってきたこと 
・身を置いている所 
・目標 
・成果 
・告知 
・その他 
----------------------------- 
※2010年09月01日更新 


【今】 
・VMMでOSを並列に動かしたときに発生するLock-holder Preemptionについて研究中. 
・Monmouth College, Illinois, USに留学中. CS+Designの授業を取って創造力を研磨中. 
・航空業界におけるITベンチャー企業を発起中. 


【学部時代にやってきたこと】 
『IAESTE国際インターンシップ』 
2009年度のIAESTE派遣生として, チェコ共和国のプラハで2ヶ月間働いてきました. 現地の会社でやっていたことは, "Alvila"というOpen Source Softwareプロジェクトの立ち上げです. 詳細は下記のURLを御参考に. また, 現地での就労以外にも, 世界中の技術系の学生とフットサルしたり, カヌーしたり, 政治の議論したり, パブに行ったりと, 池に入ったり, 古城の屋上で寝たりなどなど, かなり面白い生活が送れました. おかげさまで, 世界中どこいっても(特に, EUあたりなら)宿代が浮かせることが出来そう. ああ, あと, 正直ね, ドイツ人はかわいいと思うんだよ. http://yasulab.blogspot.com/2009/10/alvila-opensource-software-project.html 

『自作OSの制作』 
企画:yasu_ninety9 
開発:yasu_ninety9 
広報:yasu_ninety9 
オレオレ詐欺です。昨今、一部の人たちに大変有名な、はりぼてOSの拡張を行いました。目的は、自作OS入門の読者向けに拡張例を提示することで、これから拡張する人を応援すること。ひいては、OS学習者および開発者が増えることを期待しています。したがって、ただ拡張結果を配布するだけではなく、「どうやって拡張したのか?」「どういった開発計画を立てたのか?」といったドキュメントも多くは配布しています。詳細は下記URLにて公開中。 http://www.arukou.sakura.ne.jp/yasulab/os/ 

『Web Applicationの開発&発表@Yahoo! Japan』 
僕とイギリス留学中の友達を中核にして、コツコツ開発してきたweb application ”tango!”をyahoo! Japanで発表しました。僕ら以外にも、色々な方々が開発およびデザインに参加してくれました。手伝ってくれた皆Thanks!しかしながら、結果から言えばyahoo! japanでの発表では入賞できませんでした。原因は明らかに僕のプレゼン力不足。生まれてきてごめんなs(ry。いやいや、でも"tango!"はまだまだ発展途上ッスよ!プレゼンの失敗など次で挽回すれば良いのさ!Googleさんが提供するGWT on GAEという素晴らしい開発環境も整ったことだし、tango!もこの流れに便乗して進化する次第であります! 
本家:http://www.arukou.sakura.ne.jp/yasulab/tango/ (準備中) 
Twitter: http://twitter.com/tango_bot 
* tango! on Twitterの方が現在盛り上がっています。 

『TOSHIBA summer internship(R&D), 予備校@AGOS』 
夏といえばsummer internshipの季節!2008年度の夏も例外なく就業してきました。 
平日:TOSHIBAのsolution部門で新技術の調査・開発。 
週末:予備校@AGOSでTOEFLのR/LとWritingの勉強 + そこそこ重いassignments / week。 
結論:死亡フラグ。 

『Berlitz pronounciationの修了』 
得たモノ:何度発音のテストをしても講師には"Almost"と言われ続けることに対する忍耐力。 
分かったこと:素直にアメリカ語学留学しとけばよかったorz。一人でひたすら勉強するのは自分の性に合わないらしい。 

『早大山岳アルコウ会HP & データベース"WAK DB"の作成』 
joomlaとDBQで作りました。CMSだと制作が楽!2008年4月現在、β版のため、正式な運用には至っていないけど、1,2年後には立派なDBになっていて欲しいな。 
WAK database(仮) http://www.arukou.sakura.ne.jp/component/option,com_dbquery/Itemid,28/ 

『アジア大学ビジネスアイデアコンテスト』 
2007年3月に北京大学で行なわれた 
"2007 KT&G Asian Students' Venture Forum 
-Business Idea Contest-"に第3位入賞。チームメンバーは当時全員1年生。何故かみんな怒Sか度Mな人だった。そんな両極端な6人で結成されたチームの成果。みんな凄い奴らだ。同期だし、俺も負けてらんないわ。あと、シンガポール人は頭良すぎ! http://asiansvf.com/ 

『第1回 日韓学生未来会議 企画・運営・指揮』 
2007年2月の大企画。途中から組織に加わったんだけど、なんか気付いたら色々やってました。人生初の大企画&運営でした。今は他の事をやっていて、あまり顔を出せないけど、今の自分が積極的に行動できるのは、この会議をやり通したからなんだろうな、と思う。後輩達が受け継いで繋いでいく第2回以降の会議にwktk。 http://www.jksff.org/ 

『フランス語学留学』 
2007年2月からフランスでフランス語勉強してました。フランス蝶最高!でもフライト時間長すぎだよワトソン君!今でもフランス語は大好きだし、もっと使えるようになりたいけど、最近は英語に若干浮気気味だったり。とりあえず、パリ近郊はお腹いっぱいだから南仏に行ってみたい! 

『Internship -擬似プロジェクト-』 
2007年9月に大阪まで行ってシステム開発の擬似プロジェクトに挑戦した。擬似プロジェクトでは、2年生のくせに何故か3,4年生のメンバー率いて頑張っとりました。最後まで自分のことを上級生だと思ってた人は数知れず。年齢詐称乙。しかし、結果は惨敗。工程管理とスケジュール管理でヘマを犯しました。おかげでシステム設計書とマニュアルが納品できなかった。すごく・・・悔しいです・・・。が、学んだことも多い。とりあえず、中小SIerでは働きたくないな、と思いました。 

『南アルプス縦走』 
2007年8月、頼れるメンバーと南アルプスの上から下まで長期縦走しました。でも2006年8月も南アルプスを上から下まで長期縦走してたから、実は今回で2回目。ただし、今回はスタート地点が北岳→仙丈ケ岳に、ゴール地点が椹島→畑薙ダムにグレードアップしており、距離と山中拍数が結構伸びてます。結果的には、泊数は12泊13日ぐらいだったかな(多分)。予備日も使う予定だったんだけど、メンバーの体力が皆キモ過ぎるレベルで結局一日も停滞しなかった。あ~、でも最近は山に登ってないな。おかげさまでメトボリックなお腹と化しました。 


【身を置いてる所】 
日韓「JKSFF」執行部広報OB 
山岳「早大山岳アルコウ会」 
BC「ドリーマーズ」 
FC「FCアトレティコ・ラッセーラ」創設者&幹事 
地域「地域スポネット『すぱんく』」スタッフ 
BC「『すぱんく』スポーツ開放」管理人代理 
BC「clubジョーダイ君」 
英語サークル「WRESS」 


【でっかい目標】 
・ネオNEET 

【最近の大目標】 
・TOEFL ibt 100点以上。 
・GRE ???点以上(未定)。 
・留学先でReferenceを貰えるだけの功績を残すこと。 

【他最近の目標】 
・英語で不自由なくdiscussion出来る 
・GPAをもっと高くする 

【最近の成果】 
・サーバ構築が出来るようになったような気がする。 
・WindowsからLinuxへ移行。が、その後Macに心変わり 
・基本情報技術者合格 

----- 以下、壮大な蛇足 ----- 

【告知1】 
現在FC『アトレティコ・ラッセーラ』の代表やっとります。入部からマッチメイク、宣伝・告知等など興味がありましたらお気軽にお尋ね下さい。 
HP→http://www.geocities.jp/atletico_l/ 
Mixi→http://mixi.jp/view_community.pl?id=1946980 
SNS→http://soccersns.jp/team/1884/ 


【告知2】 
『北区立赤羽中学校体育館バスケット開放参加者募集』 
現在、東京都北区立赤羽中学校体育館の夜間バスケット開放を行っております。で、僕がその管理人だったりします。 

興味のある方はコチラ↓。 
質問等は僕に直接メッセージでも可。 

「赤羽中学校バスケットボール開放」 http://mixi.jp/view_community.pl?id=1947170 


【告知3】 
『地域スポネット「すぱんく」の参加者募集』 
僕の地元である東京都北区には「すぱんく」という地域スポーツネットワークの団体があります。「すぱんく」では学校や公立の施設を利用して、住民の皆様に文化的な活動や健康的なスポーツ活動を楽しんでいただく「場」を提供しています。 

現在はサッカー、フットサル、バスケットボール、バトミントン、卓球、ダンスなどの種目を取り扱っているので、興味のある方、体を動かしてみたいと思っている方、是非お気軽にお尋ねください。 

公式web→http://www.web-spank.com/ 
Mixi→http://mixi.jp/view_community.pl?id=1942881 



【趣味】 
自分が聴いてる曲の紹介とか音楽観とか色々書いてあります。まぁどんな曲を聴いてるかってのは参加してるコミュニティ見てくれても分かうわ何するんだやm… 

あと、音ゲー全般(特にドラムマニア)が得意だったりします。 


【生息地】 
『Cafe Miyama』 
十中八九来ればいます。教科書やらPCやらプリントやら色んなものを散らかして勉強してます。そんな明らかに邪魔でしかない僕にも優しいMiyamaの店員には、きっとインテルはいってるに違いない。 


【注意】 
ログイン時間が『5分以内』になっていることが多いと思いますが、それは暇なんじゃなくて忙しい最中でもMixiを見るという心の余裕を常に持たせて、自分n(ry 


【思考回路】 
好奇心>>>>>(越えられない壁)>>>>>羞恥心


【座右の銘】 
    かけてよし! 
     (゚Д゚ ):. _  
    r'⌒と、j   ヽ 
    ノ ,.ィ'  `ヽ. / 
  /       i!./ 
 (_,.         // 
 く.,_`^''ー-、_,,..ノ/ 
    

  かぶってよし! 
    /(*゚Д゚)  
    / :::У~ヽ 
   (__ノ、__) 


  まるまってよし! 
     '⌒⌒'⌒ヽ   
   (゚Д゚* ),__) 


    お布団サイコー!! 
      ( ゚∀゚ ):. _  
     r'⌒と、j   ヽ 
    ノ ,.ィ'  `ヽ. / 
   /       i!./ 
    (_,.         // 
  く.,_`^''ー-、_,,..ノ/ 



どうみてもモフモフです。 
本当にありがとうございました。