2008年11月30日日曜日

gem install mysql エラー CentOS

CentOS5.2の話

 gem install mysql -- --with-mysql-config=/usr/bin/mysql_config

これでうまくいきやしたぜ兄貴!

2008年11月28日金曜日

15分でAjaxブログを作る方法

という釣り

Rails2(.2らしいDHHのTwitter参照)でブログを作る方法をRyan Batesさんがスクリーンキャストで紹介しています。Creating a weblog in 15 minutes with Rails 2
Atom(RSS)も一瞬でやってくれてる辺りがすげー。

とにかく見てみた方がいいよ

Functional Testもやってますが、部分テンプレート、Railsのデバッグ方法やら、基礎的なところをやってくれてます。説明も操作も速いので一時停止したりして実際に同じ作業をした方がいいかもしれませんね。ショートカットキーを押した時は右上に一瞬表示されるので、そちらも参照に(Macユーザにしか理解できないかも?)。自分でも忘れていたことを思い出したのでやる気が出て来た。とりあえずMVCを知らない人は一回Railsやってみたら?と思います。MVCだけでは当然足りないのでヘルパというのが普通あるんですが。MVCHとは言わないんですよね。ちょっと不思議。Hの存在を知らなかった時はMでもVでもCでもどれでもない関数やらはどこに定義すればいいんだと悩んだ時がありました。Railsの構造を見れば、よく理解できると思います。

注意

初めてWebアプリを作る人は、Basic認証についてちゃんと知っておいた方がいいです。Basic認証だけではセキュリティ的にはヌルい。IDもパスワードも平文でやり取りされるので、盗聴されればアウトですね。SSLの場合は違いますが。認証にはプラグインを使う方がいいと思います。

CSRF対策も何気にされてる

Railsのいいところ。form_forでフォームを作成すると<input name="authenticity_token" type="hidden" value="81e17c6cd94d89d8bf61c111d75a41cd27de0768" />のようなものが。

セッションはクッキーに保存しちゃう仕様

おそらくアクセス数が多いサイトを考慮してこういう仕様のフレームワークがあるんだと(CodeIgniterもその一つ)勝手に思ってるんですが、知っとかないと怖いと思うので一応。

Railsは大規模開発に向くのか

これは絶対Yesではないです。Railsはスペックを食う。レールから外れた事をすると急に難しくなる。などがあげられます。Enjoy!

2008年11月26日水曜日

createElementしたものもjQueryオブジェクトにしちゃう方法

すごく簡単

var ele = $(document.createElement('div'));

//jQueryだけでやりたいなら
var ele = $('<div>');
//とか
var ele = $('<div class="text-left">');

2008年11月16日日曜日

MacでEXIF情報を見る

EXIFとは

jpegファイルなんかにくっ付いてる撮影日などの情報です。

Leopardのプレビューで見れる

プレビューで写真を開いて、インスペクタを表示し、詳細情報の中にexifのタブがあるのでそれをクリックして表示できます。ただしexif情報が無いファイルもありますので。

知り合いっぽい人が写真に写っていたので、撮影日で可能性を探ろうとしたのですが、exif情報は添付されてませんでした。残念。

2008年11月15日土曜日

Python メソッド一覧、メソッド列挙?

dirを使う

import os
dir(os)
a = dir(os)
len(a)
for x in a:
  print x

これだけだと名前しか分からないけど、何も手がかりが無いよりかはモチベーションを維持できまっせ

2008年11月10日月曜日

2008年11月5日水曜日

RubyでFizzBuzz

遊びでやってみた

(1..100).each{ |i| p "#{i}:" + (i%15!=0 ? i%5!=0 ? i%3!=0 ? i.to_s : "fizz" : "buzz" : "fizzbuzz") }
"1:1"
"2:2"
"3:fizz"
"4:4"
"5:buzz"
"6:fizz"
"7:7"
"8:8"
"9:fizz"
"10:buzz"
"11:11"
"12:fizz"
"13:13"
"14:14"
"15:fizzbuzz"
"16:16"
"17:17"
"18:fizz"
"19:19"
"20:buzz"
"21:fizz"
"22:22"
"23:23"
"24:fizz"
"25:buzz"
"26:26"
"27:fizz"
"28:28"
"29:29"
"30:fizzbuzz"
"31:31"
"32:32"
"33:fizz"
"34:34"
"35:buzz"
"36:fizz"
"37:37"
"38:38"
"39:fizz"
"40:buzz"
"41:41"
"42:fizz"
"43:43"
"44:44"
"45:fizzbuzz"
"46:46"
"47:47"
"48:fizz"
"49:49"
"50:buzz"
"51:fizz"
"52:52"
"53:53"
"54:fizz"
"55:buzz"
"56:56"
"57:fizz"
"58:58"
"59:59"
"60:fizzbuzz"
"61:61"
"62:62"
"63:fizz"
"64:64"
"65:buzz"
"66:fizz"
"67:67"
"68:68"
"69:fizz"
"70:buzz"
"71:71"
"72:fizz"
"73:73"
"74:74"
"75:fizzbuzz"
"76:76"
"77:77"
"78:fizz"
"79:79"
"80:buzz"
"81:fizz"
"82:82"
"83:83"
"84:fizz"
"85:buzz"
"86:86"
"87:fizz"
"88:88"
"89:89"
"90:fizzbuzz"
"91:91"
"92:92"
"93:fizz"
"94:94"
"95:buzz"
"96:fizz"
"97:97"
"98:98"
"99:fizz"
"100:buzz"

Railsをターミナルからテストする

irbいいね!

自分で書いたクラスの動作のテストをその場でやりたい時がありますよね。Railsでやる場合は、ruby script/console上から操作すると簡単に動作確認が出来ます。

モデル Developerの例

ruby script/console
d = Developer.new
d.name = "Dopin"
d.password = "ppp"
d.save
=> #true
d = Developer.find_by_bame("Dopin")
d

プライベートメソッドは__send__を使う

プライベートメソッドは直接呼び出せないので、__send__(:メソッド名[,引数])を使う。

2008年10月30日木曜日

TextMate Bundle アップデート

Subversionでアップデートできますよ

cd /Applications/TextMate.app/Contents/SharedSupport/Bundles
svn co http://macromates.com/svn/Bundles/trunk/Bundles/GetBundle.tmbundle/
TextMateを起動(再起動)してBundleのGet Bundleからインストールやアップデートをかけられます

2008年10月22日水曜日

Objective-Cのコメントの書き方

Cと一緒

んなことたぁ分かってます

ドキュメント自動生成ツール

やっぱJavaDocのようなものは便利なわけで、Objective-CというかCocoaでもできないかなぁと探してます。以下はObjective-C対応のもの

  • HeaderDoc Appleのオープンソース。 多言語対応。
  • Doxygen 多言語対応
  • nudoc Objective-CとNuという言語に対応?

他にもKDocや、ドキュメントジェネレーターツールならDoxygenのサイトにもたくさん載ってるけど、まずは一番気になるHeaderDocを試してからだな。DoxygenはHTMLテンプレートを自由に変更できるなら見た目をもっと綺麗にして使いたいと、思った事を...すまないと思う!(ジャックバウアー)。

HeaderDoc8がサポートする言語

  1. Bourne shell (and Korn and Bourne Again)
  2. C Headers
  3. C source code
  4. C shell
  5. C++ headers
  6. Java
  7. JavaScript
  8. Mach MIG definitions
  9. Objective C/C++ headers
  10. Pascal
  11. Perl
  12. PHP

ADCがHeaderDocを使ってドキュメントを作成しているのなら、Cocoaアプリのクラスリファレンスは統一感が出るから使かおう。まだどんなアプリを作るかは考えてないけどw

追記:HeaderDocを試してみた

Xcodeのウィンドウとヘルプの間にある変なマークからHeaderDocを挿入するスクリプトがあるので試してみた。出力された例をSafariで確認できた。フレームで2つに別けられ、左がTOC(Table of contents)がコンテンツという感じだけど、APIリファレンスのようなデザインではない。配色は落ち着いてていい感じ。まだ試してないけど、他のクラスへのリンクとか、各ファイルの一覧とかは作成されるのかなぁ?。CSSはtoc.htmlにまとめて書かれていたり、spanのstyle属性でフォントが指定されている。テンプレートがあるならAPIリファレンスっぽいデザインに変えるのはCSSだけでもできそうな感じはするけど、提供されてるかは調べてない。日本語は普通に表示された。

Cocoaでテーブルを表示する時

NSTableDataSource

ADC:NSTableDataSource Protocol Reference
Interface Builder上で配置したテーブルビューを利用するには、NSTableDataSourceという決まり事を守る必要がある(protocol)。実際には2つの必須インスタンスメソッドを実装すればいい。

  1. 行数を返すnumberOfRowsInTableView
  2. 指定した行のオブジェクトを返すtableView

追記

CocoaのDelegationも参照

2008年10月21日火曜日

Objective-Cに文字列結合演算子はない

そいつは面倒だ... でも仕方が無い。NSStringは変更不可能なので、NSMutableStringを使った方が結合は楽かも。

NSMutableString* string = [NSMutableString string];
[string appendString:@"I"];
[string appendString:@" am"];
[string appendString:@" a Mac.\n"];

C言語でオレオレ型

//緯度経度用の構造体を使う場合
struct laglng {
   float lat,
   float lng
}
struct latlng point;
point.lat = 31.11f;
point.lng = 128.1344f;

//型を作ってしまう
typedef struct {
   float lat,
   float lng
} latlng;

latlng point;
point.lat = 31.11f;
point.lng = 128.1344f;
知らない事を知るのは楽しい

Cocoaのマルチバイト文字列

@""はNSStringのインスタンス

But,@"日本語"とはできない。

NSString* jpString;
jpString = [NSString stringWithCString:"日本語"
     encoding:NSUTF8StringEncoding];
とする。使いづらっ!ローカリゼーションの機能もあるけど、日本語をばりばり使う場合ってこれしかないのかなぁ...

日本語関連定数

  • ASCII : NSASCIIStringEncoding
  • Shift_JIS : NSShiftJISStringEncoding
  • EUC-JP : NSJapaneseEUCStringEncoding
  • UTF-8 : NSUTF8StringEncoding
  • UTF-16 : NSUnicodeStringEncoding

2008年10月10日金曜日

sshでMercurialをする時に最初に躓くところ

こんなエラーが出る

hg clone ssh://dopin@dopinsxanadu.com/hg/dev/
remote: abort: There is no Mercurial repository here (.hg not found)!
abort: no suitable response from remote hg!

確実に.hgは存在するのに!と思っていました。がしかし、これ、/hg/devは/hg/devではなく、$HOME/hg/devを指すようです。オイラが意図していたところにアクセスするには

hg clone ssh://dopin@dopinsxanadu.com//hg/dev/
と、もう一つスラッシュをつけてやらんないかんようでした。なるほどね。

2008年10月3日金曜日

Javaのプライベート変数にアクセス

将来の自分用に?メモ。あまりJavaをやる気はないけれど。 Javaは接着剤つけてねじ止めされてるような感じですね。ちょっと手間です。
String str = "string";
Field fld = str.getClass().getDeclaredField("value");
fld.setAccessible(true);
System.out.println(fld.get(str));
リフレクションを使ってプライベート変数を参照。

Pythonのプライベート変数にアクセス

Pythonのアクセス権で、privateにしたいものは最初に__(アンダーバーを2つ)付けて命名する。他の言語ではアンダーバー1つというコーディング規約があると思うけど、Pythonでは__がプライベート宣言になるので、言語レベルで命名規約になってます。

PHP出身のミーはプライベート変数にはアクセスできないと思い込んでました(PHPでもやり方があるかもしれないけど。PHP5以降の話ね。PHP5より以前はアクセス権なんてないから)。でもPythonはアクセスできるようです。

電化製品でいうと、使用者が触っていい部分(ボタンとか)がpublicで、触ると感電したりして危ないから隠されている部分がprivateだと考えると分かりやすいです。 Pythonはprivateな部分を金庫に保管するようなほど堅牢な作りはしていません。不慮の事故を避けるためにプライベート変数があるためで、確信犯的にプライベート変数にアクセスできるようになっているとマニュアルに書いてあります。 Pythonマニュアル 9.6プライベート変数 プライベート変数にアクセスする場合は自己責任でという感じですね。

プライベート変数に実際にアクセスしてみる。

_クラス名__プライベート変数
例: private
class Foo:
  def __init__(self):
    self.__privateVar = "How could you!!";
  def __privateMethod(self):
    print "Don't touch me";

if __name__ == '__main__':
  f = Foo();
  f._Foo__privateMethod();
  print f._Foo__privateVar;
#実行結果
Don't touch me
How could you!!

2008年10月2日木曜日

Macでバックスラッシュを入力する方法

普通に正規表現で¥dとかやっても全然マッチしなかったので、よそからバックスラッシュをコピペしたら動きました... キーボードで入力する方法
alt(option) + ¥

2008年9月19日金曜日

-webkit-border-radius

-webkit-border-radius -moz-border-radius

Webkit系(Safari、Chrome)とGecko系(Firefox)で角丸をCSSだけで実装できるのは以前にちょっとだけ触れました。(CSSでdivの両側に画像を使うとか)

何がいいかと言うと、リキッドデザインで楽できること。

ドキュメント

  1. MDC(Mozilla):-moz-border-radius
  2. ADC(Apple):Supported CSS Properties(ADCの方はページ先でCTRL( or Command) + Fで単語検索して下さい!)

Firefoxではこんな風に書いて角丸を指定できます。

div.kakumaru{
  -moz-border-radius:10px; /* 4つの角を角丸に */
  -moz-border-radius-topright:10px;    /* 右上だけ角丸 */
  -moz-border-radius-topleft-10px;     /* 左上だけ角丸 */
  -moz-border-radius-bottomright:10px; /* 右下だけ角丸 */
  -moz-border-radius-bottomleft-:10px; /* 左下だけ角丸 */

Safari

div.kakumaru{
  -webkit-border-radius:10px;
  -webkit-border-top-left-radius:10px;    /* 左上だけ角丸 */
  -webkit-border-top-right-radius:10px;   /* 右上だけ角丸 */
  -webkit-border-bottom-left-radius:10px; /* 左下だけ角丸 */
  -webkit-border-bottom-right-radius:10px;/* 右下だけ角丸 */
}

SafariとFirefoxで書き方が若干違うので注意です

こうしたらだめよん

-webkit-border-radius-topleft:10px;
-webkit-border-radius-topright:10px;
-webkit-border-radius-bottomleft:10px;
-webkit-border-radius-bottomright:10px;
mozillaはradiusが先webkitはradiusが後で間にハイフンが入ることに注意!

[追記] ちなみにOperaは現在は実装されてないようです。SVGでやる方法もある見たいですが、CSSだけのテクニックではないので省きます。IEも同様にVMLと独自拡張のbehaviorでhtcファイルを読み込ませて対応するようです。JavaScriptではNifty ConersやjQuery Cornerなどがあります。これ以外の方法で角丸を再現する場合、無駄なdivや無駄なspanタグを書くはめになると思います。htcもsvgもそうだけど、角丸の仕事はCSSに任せられる日が早く来てほしい。各ベンダーの接頭辞が消える日が...

追記 2009/02/23/

サンプル追加

jQuery UIもIEは角丸じゃなくなる~


<div style="border:solid 1px #999; -moz-border-radius:10px; -opera-border-radius:10px; -webkit-border-radius:10px; border-radius:10px">
  <p>jQuery UIもIEは角丸じゃなくなる~</p>
</div>

IEのhtcでやる方法だと、周りに銀色っぽい変な線が絶対表示されて変になります

2008年9月17日水曜日

CSSでdivの両側に画像を使うとか

CSS3にはimage-borderというのがある。これがめっさ便利なんですが、まだCSS3のどのモジュールも勧告に至っていないのが現状で、さっさとしろW3C!という感じです。

W3Cの今の感じだと、Fireworksのナインスライス的なものをCSSで簡単に再現できる。 すでにSafariが実験的に-webkit-border-imageとして実装している。ちょっと違うけど、でもこれマジで便利です。

例えば、右、左下、下に影をつけるドロップシャドウの画像をborderに使いたい場合はこんな感じ。(よく理解できてないので勉強中)

ソース

こんな画像を用意して


こんな風に書いてみる

#CSS
#container{
  -webkit-border-image: url(img/box_shadow.gif)  8 15 15 10 / 12px round round;
}
<div id="container">
  <p>バルト(力士)の日本語は聞き取りにくい</p>
</div>

実行例(Safari3 on Macで確認済み)

バルト(力士)の日本語は聞き取りにくい

補足

-moz-border-imageというのもあるらしいけど、Firefox3.1からの実装らしいです。まだリリースされてません。でも書き方はwebkitと同じなようです。

これでwidthやheightを指定したり、可変なリキッドデザインにしても綺麗に表示されます。

残念ながら、同じWebkitのChromeでSafariできちんと表示されるページを見てみたんですが、ちょっと崩れるみたいですねぇ。んー

全てのブラウザがborder-imageを早く実装する日を夢見て。
ちなみに角丸を施すには、-webkit-border-radius-moz-border-radiusが使えます☆

2008年9月15日月曜日

Macで隠しファイルを表示非表示

過去に投稿したような記憶もあるけれど、たぶん書いてないのでメモ代わりに載せときます。 ターミナルで表示する時にTRUE、非表示の時にFALSEにすればOKです。
defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder #Finderを殺して蘇生w
たったこれだけの操作だけど、面倒だからFinderにボタンを追加して簡単に切り替えられるようにしたいけど、そういうことってできるのかな?

2008年9月11日木曜日

Pythonのここが好き

KISS(Keep It Simple Stupid)なところ I wanna rock n roll all night n party every day! (n = and)

別に元祖ビジュアル系が好きなわけじゃないよ。

Pythonのここが好きパート2!

京都風に言うとなんかやらしんどすぅ

おPython(パイソン)はん もう少し意図的に発音するとおっPythonはん

もみもみしてええんでっしゃろか?

Pythonのここが好きパート3!

辞書を書くのが楽
#PHP
$dic = array( 'Math' => 80, 'Japanese' => 70);

#Python
dic = { 'Math':80, 'Japanese':70}
dic = { u'数学':80, u'国語':70}

JSONっぽいですね。=>ってタイプするのがめんどくさい。ちなみに辞書はPHPでいう連想配列のことです。

Pythonのここが好きパート4!

asでリネームできる
import VeryVeryVeryLongLongLongNameModule as M
これで普通ならVeryVeryVeryLongLongLongNameModule.method()とするところを、M.method();と書ける。同じ事を他の言語でやろうと思えばできるけど、最初から言語にその概念があるかないかは結構大きい。PHPのフレームワークはhtmlspecialchars関数をhにリネームしてるのがありますね。Railsのパクりです。でも多用する関数は短い方が良いと思います。あとfunctionもdefがいいな〜>PHP

Pythonのここが嫌い!

ニシキヘビ... ヤギを丸呑みにしてる写真とかが検索でひっかかってくる。俗語がアレ。三項演算が微妙。式 ? 真:偽の表現がいいなぁ。

ぶっちゃけほとんどPythonには触れてないけど。ファイル名は"おっ.py"

2008年9月10日水曜日

jQueryのここが好き

Prototypeもいいけれど、You jQuery使っちゃいなよ! jQueryには使えるベーシックフィルタというのが用意されとります。 例えばテーブルで偶数の行だけ背景色を変える場合こう
$("tr:even").css("background-color", "#ffffff");
奇数なら:odd Formで選択されているものを取る時は:selectedなど いろいろありまっせ。 詳しくはマニュアルのSelectorsを参照して下さい。それぞれシンプルで分かりやすいサンプルコードが載ってます。 アニメーションエフェクトも最初からあるんで便利です。

2008年8月29日金曜日

Redmine0.8のパンくず機能を使ってみた

Subversionのtrunkをチェックアウトしているので以下の手順で簡単にできた
cd <Redmineのディレクトリへ移動>
svn update
rake db:migrate RAILS_ENV=production
chown -R apache:apache ./
◆使い方◆ Wikiの子ページにしたいところへ行き「名前の変更」をクリックしparent pageのところに親ページの名前を入れる ページ一覧でも親子関係が分かるようになっていてこれは便利だと思った ◆マクロ◆ 子ページをリスト表示するマクロ
{{child_pages}}
これで子ページのリストがWiki上に表示されます。 大きなプロジェクトほどこういった機能がある方が便利だぬ

2008年8月6日水曜日

JavaScript returns

JavaScriptでもやってみた。JavaScriptってreturn省略可能じゃなかったっけ FF3のFirebugのコンソールで実験しました
function f1(){ return a = 2; }
function f2(){
        var a = 1;
        var b = 2;
        return a+b;
}
function f3(){ return '0' || 'a'; }
function f4(){ return 'end'; }

alert( f1() ); # 2
alert( f2() ); # 3
alert( f3() ); # 0
alert( f4() ); # end

Python returns

Pythonでもやってみた
def f1():
        a = 2
        return a
def f2():
        a,b = 2,3
        return a + b

def f3():
        return "0" or "a"

def f4():
        return "end"

print f1(),f2(),f3(),f4(),"\n"
#結果 2 5 0 end

Perl returns

Perlでもやってみた
use strict;
use warnings;

sub f1 { $a =2 }
sub f2 { ($a,$b) = (2,3); $a + $b }
sub f3 { "0" || "a" }
sub f4 { "end" }

print f1,f2,f3,f4,"\n"
#結果 2 5 a end 

Ruby returns

Rubyでもやってみた
def f1
        a = 2
end

def f2
        a,b = 2,3
        a + b
end

def f3
        "0" || "a"
end

def f4
        "end"
end

puts f1,f2,f3,f4
#結果 2 5 0 end

PHP returns

どうでもいい実験をしてみた。この結果はあなたの予想の通りでしょうか。
function f1(){ return $a = 2; }
function f2(){
        $a = 1;
        $b = 2;
        return $a+$b;
}
function f3(){ return '0' || 'a'; }
function f4(){ return 'end'; }

echo f1(),"\n"; # 2
echo f2(),"\n"; # 3
echo f3(),"\n"; # 1
echo f4(),"\n"; # end

2008年7月26日土曜日

PHPでオブジェクトのメソッド一覧を取得する方法

JavaScriptではfor inで取れますが、PHPではget_class_methods関数を使うことでできます。ただしpublicメソッドのみ。ちなみにpublicプロパティを取得するにはget_object_vars関数を使います。

サンプルコードと結果

<?php
class Foo
{
   function __constructor () { return 0; }
   public function add( $a, $b )
   {
       return $a + $b;
   }

   
   private function _privateMethod()
   {
        return -1;
   }

   public static function isPostcode ( $postcode )
   {
       return preg_match( '/^\d{3}-\d{4}$/', $postcode ) ? true : false;
   }
}

$methods = get_class_methods( new Foo() );
foreach( $methods as $method_name ) {
    echo $method_name,"\n";
}
#結果
__constructor
add
isPostcode

こういうことする手間自体が無駄なので、PHP Docでクラスのマニュアルは作成しておくのがベストだと思います。

2008年7月21日月曜日

MySQLでユーザを作成と権限の設定

今回はmy_databaseの全てのテーブルの全ての権限をdopinにあげる例です。dopinのパスワードも設定します。
create database my_database;
grant all on my_database.*  to dopin@localhost identified by '[パスワード]';
現在サイト構築を手伝ってくれているzeroさんに教えていただきました。

VirtualHostでPHPを無効にする方法

RedmineのレポジトリブラウザでPHPのファイルだけnot found or unable to statのようなエラーが表示されて困っておりましたので、以下の部分をhttpd.confに追加したらうまく動くようになりました。
php_flag engine off

CentOS5でタイムゾーンを再設定

Slicehostでサーバを借りると、タイムゾーンが日本時間からして13時間遅れになってます。なので、東京時間(JST)に変えちゃいましょう。
cp -p /etc/localtime /etc/localtime.old #怖い方は昔のファイルを取っておきましょう
cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dateコマンドで時刻を確認してみて下さい。

2008年7月19日土曜日

IEのTabキーのonkey(press|up)が取れない件

use MC_Hammer::You_cant_touch_this; # as BGM
use 有名人::DAIGO # to break the ice
確かに、tabで次の要素に行く時に変な時があった気がする・・・。サジェストとか作ってた時。 元記事はこちら bug 249 - you can't press Tab in IE and capture ie 実際に試せるので元記事を見てみて下さい。このブログは必須購読です!

2008年7月18日金曜日

Table mysql.host doesnt exist

Table 'mysql.host' doesn't exist

MySQLをインストールする際にこんなエラーが出ました。おそらく以前yumでインストールしてて、そのまま放置した後、最新版を落とせる別のレポジトリからmysqlをアップデートしたせいで、設定ファイルの競合が起きたようです。

yum remove mysql*
をした後でも/usr/bin/mysqlが残っていたので、/usr/bin/の下のmysqlで始まるファイルを全て削除してから、再度yumでmysqlをインストールし直したらうまくいくようになりました。

I encountered this error as installing MySQL5 via yum. I installed MySQL5 before and did nothing and after I added a new yum repository that you can get latest packages, I upgraded mysql with the repository but it made a conflict of my.cnf. So I did "yum remove mysql*" but /usr/bin/mysql was remained installed. I removed files which had name beginning with mysql in /usr/bin directory and reinstalled mysql via yum again. And finally, That made it! Hope everything works fine!!

CentOS5.2にMySQL5をインストール

バージョンはMySQL5.0.45です。
yum install mysql mysql-server mysql-devel php-mysql
起動
mysqld_safe &
または
/etc/init.d/mysqld start
この時エラーが起きる人は(mysql.hostが無いとか)、一旦yumからmysqlを消し、さらに/usr/bin/mysqlなどが残っていないか調べ、それも消してから再度インストールするとうまく行くようです。ここではまったw 設定
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): #mysql rootのパスワードを入力
#何も設定していなければそのままEnter

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y #rootパスワードを設定する Y=はい n=いいえ Enter!
New password: #mysql rootユーザのパスワードを設定

Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

#匿名ユーザの削除
Remove anonymous users? [Y/n] Y
ormally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

#リモートからrootでログインできなくする(通常rootはlocalhostからだけ)
Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

#testデータベースの削除
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

#privilege(特権?)テーブルの最読み込み
Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

#インストール完了!
実際に使ってみる
mysql -u root -p 
#rootのパスワードを入力
後はユーザの追加とかですね。そのままrootで使うのは避けましょう!

Redmine0.8の注目の新機能

詳細はRoadmap::0.8で見れます。Featuresが機能です。 個人的に注目しているもの ・Emailからチケット作成が可能プライベートチケットウィキページの階層化とパンくず ・添付ファイルの差分ビューワ ・リマインダーグローバルウィキウィキページのロック機能 他にもユーザグループなど新機能のチケットがたくさんありますが、実際に実装されるかは分かりません(笑

2008年7月14日月曜日

PHPUnit入門

技評にそういう連載がありました。PHPUnit入門 PHPでクラスを書いた時は、PHPUnitのようなツールでテストした方が良いです。PHPUnitの場合、テスト用クラスを書くため、テストした内容が明確に残ります。また、テスト中にバグを発見した際に、再度そのプログラムを利用してテストできるため、テストフェーズの時間を短縮することができます。 テストを真面目にやればやるほど、テストにうんざりします。テストされてないライブラリは叩かれます(たぶん)。 今日か明日にはPHPでクラスを作る予定なので、それと同時にPHPUnitも導入しようと思います。

vsftpd ルートディレクトリ 変更

OS:CentOS 5.2 vsftpd: 2.0.3 ユーザ毎に/home/xxx/public_htmlとする場合はvsftpd.confにlocal_root=public.htmlと書くだけですが、ホームディレクトリ以外にするにはどうするか? user_conf_dirを設定し、そこにユーザ毎の設定を書けばOKです。 ユーザfooの場合の設定
vi /etc/vsftpd/vsftpd.conf
以下の一文を追記
user_conf_dir=/etc/vsftpd/user_conf

ディレクトリを作成
mkdir /etc/vsftpd/user_conf
fooの設定ファイルを作成しルートディレクトリを指定する
vi /etc/vsftpd/user_conf/foo
local_root=/var/www/html
参考:http://www.eqg.org/taiki/vsftpd.shtml

2008年7月13日日曜日

Redmine0.8のメール設定

Redmine0.8からだと思いますが、それまではconfig/environment.rbにSMTPの設定を記述するのが、config/email.ymlに変更されたようです。email.yml.exampleがあるのでそれをコピーして使用してみました。
cp config/email.yml.example config/email.yml
vi config/email.yml

# Outgoing email settings

production:
delivery_method: :smtp
smtp_settings:
  address: 127.0.0.1
  port: 25
  domain: somenet.foo
 # authentication: :login
 # user_name: redmine@somenet.foo
 # password: redmine

development:
delivery_method: :smtp
smtp_settings:
  address: 127.0.0.1
  port: 25
  domain: somenet.foo
  #authentication: :login
  #user_name: redmine@somenet.foo
  #password: redmine
servide httpd restart
これで届くようになりました。Yahooメールで受信するとタイトルが文字化けする...(-_-#)

CentOS5.2にPostfix2.3.3をインストール

パッケージインストール
yum install postfix
yum install system-switch-mail # MTAをSendmailから切り替えるもの
system-switch-mail
#MTAの選択画面が出るのでPostfixを選ぶ
#postfixが自動起動されるようになる
設定
vi /etc/postfix/main.cf
myhostname=<ホスト名>
mydomain=<ドメイン名>
inet_interface=localhost #このままでは外部からのメールが受信できないので$myhostnameなどを追加する
mynetworks_style=host #ローカルだけ信頼

service postfix restart

vsftp 500 OOPS: SSL: cannot load RSA key

vsftpdでSSLを有効にする際に証明書と鍵の設定が必要になる
rsa_cert_file=/etc/vsftpd/oreore.crt
ここで注意なのが、ここで指定するファイルにはcrtとkeyの両方が書かれていないと、cannot load RSA keyとかcannot load public key とかcannot load private keyと出る。confに鍵ファイルの指定用のもあればいいのにと思うけど・・・ないっぽい。どれも中身はテキストファイルなのでくっつけて一つのファイルにして使えばいい。 ちなみに、自己署名証明書作成は以下のコマンドで簡単に作成できる(CentOS5.2)
cd /etc/pki/tls/certs
make <今回作る証明書のファイル名>.crt
入力が要求されるパスワードは覚えておく必要があるのでメモっておいた方が良い。後は管理者の情報(住所や連絡先email)が入力するように画面に表示されるので、それに従って入力するだけ(全部で7つほど)

2008年7月12日土曜日

ApacheがPHPとかOSの情報を密かにもらす件

httpd.confにこんな設定が有る
ServerTokens
これの設定次第ではOSのバージョンやPHPやモジュールのバージョンをHTTPレスポンスヘッダ内に含めて返すので、コメントアウトしておく方が無難です。 追記: コメントアウトではだめなようですw ServerTokens Prod でApahceを使っていること以外の情報は送信されなります この設定もお忘れなく
ServerSignature Off

2008年7月8日火曜日

CentOS5にSubversionレポジトリサーバを構築

apache2とsubversion1.4でいきます。OSはCentOS5.2 まずはyum
# yum install subversion
# yum install mod_dav_svn
レポジトリ用のフォルダを準備しそこにレポジトリを作成
# cd ~
mkdir repos
svnadmin create /home/<ユーザ>/repos/
svn mkdir file://localhost/home/<ユーザ名>/repos/trunk -m "create"
svn mkdir file://localhost/home/<ユーザ名>/repos/branches -m "create"
svn mkdir file://localhost/home/<ユーザ名>/repos/tags -m "create"
trunk ... 主開発レポジトリ branches ... 枝レポジトリ(各プロジェクト用とかの、いずれtrunkに結合) tags ... バージョン毎にソースを保管しておくためのレポジトリ httpd.confに設定
<Location /svn/svn>
    DAV svn
    SVNPath /home/<ユーザ>/repos
    AuthzSVNAccessFile /home/<ユーザ>/repos/conf/authz

    # 認証したユーザだけアクセス可能にする(Basic認証)
    Require valid-user
    AuthType Basic
    AuthName "None can pass!"
    AuthUserFile /home/<ユーザ>/repos/.htpasswd
  #SSLでアクセスするようにする
    SSLRequireSSL
</Location>
repos/conf/authzの設定
#グループの設定 グループ名 = ユーザ[,ユーザ]
[groups]
developers = harry, sally
#管理者
manager = dopin
[/]
# rはreadable wはwritable
#すべての人が読み込み可能にする
* = r
[repos:/trunk]
@developers = rw
[repos:/branches]
@manager = rw
[sample:/tags]
@manager = rw
htpasswdを設定する
htpasswd -c /home/<ユーザ>/repos/.htpasswd harry
htpasswd /home/<ユーザ>/repos/.htpasswd sally
所有者をapacheに変更
chown -R apache:apache /home/<ユーザ>/repos/
Apacheの再起動
service httpd restart
終わり。

Redmineで管理者がパスワードを忘れた場合

Redmine2とRails3なやり方

この記事にリンクされている方がいたのと、最近同じ対応をしたのでやり方を書いておきます。


cd /path/to/redmine # Redmineディレクトリに異動
rails c # Railsコンソールを起動(必要に応じてRAILS_ENV=production)
user = User.where(login: 'admin').first # adminは管理者のログインアカウントに置き換える
user.password = '新しいパスワード'
user.save # falseが返ってくる場合はuser.errorsで内容を確認してください


以下は古い内容です


しかもメールでのパスワードの再発行ができないときたら・・・。 SQLiteを使っていて、SSHなどコマンドラインから操作できるのが条件ですが、ログインしてredmineのデータベースファイルを開く
sqlite3 redmine.db
sqlite> .header ON
 これでカラム名を表示するようになる
sqlite> SELECT * FROM users;
 ユーザ一覧が表示される
 その中から自分のIDを見つけパスワード(hashed_password)をUPDATEで書き換える。パスワードはsha1の計算値
sqlite> UPDATE users SET hashed_password = "16進数40桁"
sqlite> WHERE id = 自分のID番号;
sqlite>.exit
パスワードを忘れたら焦りますね。^^;

PHPで携帯のGPSを取り扱うライブラリ

PEAR::Packages::Net_UserAgent_Mobile_GPS(英語) GPS PEARライブラリ / Net_UserAgent_Mobile_GPS(日本語)

サンプルコード

require 'Net/UserAgent/Mobile/GPS.php';

try {
    $g = Net_UserAgent_Mobile_GPS::factory();
} catch (Net_UserAgent_Mobile_GPS_Exception $e) {
    var_dump($e->getMessage());
    exit();
}

$url = "http://test.com";
$str = 'GPS.TEST';
$glink = $g->getGPSLink($url, $str);

print('<pre>');
var_dump($glink);
print('</pre>');

try catchは例外(Exception)と呼ばれるものでPHP5から導入されました。catchは複数指定できますが、今回のサンプルコードはNet_UserAgent_Mobile_GPS_Exceptionが投げられた時(throw)に対応するものですね。例外について詳しくはマニュアルの例外を参照して下さい。

携帯のGPSを利用しようと考えていたところなので渡りに船ですが、他にもライブラリがないか探してみようと思います。

2008年7月7日月曜日

CentOS5.2 Apache2 + SSL

Apache2にSSLを入れる
# yum install openssl
# yum install mod_ssl
SSL証明書の作成
パスワードを設定するように要求されます。すぐに使うので覚えておいて下さい。
# openssl genrsa -des3 -out /etc/httpd/conf/ca.key -rand /var/log/messages 1024
# openssl req -new -key /etc/httpd/conf/ca.key -out /etc/httpd/conf/ca.csr
  先ほどのパスワードを入力し、国名にJPなど情報を入力する
# cd /etc/httpd/conf
自己証明しちゃう(普通はCSRファイルをVeriSignなどのぼったくり機関に申請します)
# openssl x509 -req -in ca.csr -signkey ca.key -out server.crt

httpd.confの該当する場所に追記
SSLEngine on
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ca.key

# service httpd start #またはrestart?
challenge passwordを入力してapacheが起動したらhttpsでアクセスしてみて下さい

no such file to load -- sqlite3

OS:CentOS 5.2 rake db:migrateでno such file to load -- sqlite3と出る。 yum install sqliteなんてしてもだめ 正解は
yum install sqlite-devel
gem install sqlite3-ruby
sqlite-develを入れていないとsqlite3-rubyを入れる時点でchecking for sqlite3.h... no というエラーが発生する そして再度,rake db:migrateをするとno such file to load -- sqlite3/databaseというエラーgが。locate database.rbをするとパーミッションのotherのところがwritableだけになってる。いや、ライブラリが読み込めないってありえない・・・
chmod 644 database.rb
chmod 644 translator.rb
これでうまく行きました

rootに昇格できるユーザを限定する

CentOS 5.2の設定です。 rootに昇格できるユーザを追記する(例:dopin)
# vi /etc/group
wheel:x:10:root,dopin
設定を有効にする
# vi /etc/pam.d/su
# Uncomment the following line to require a user to be in the "wheel" group.
と書いてあるのでコメントアウトをはずす
auth  required pam_wheel.so use_uid
# vi /etc/login.defs
SU_WHEEL_ONLY yes #を追記
これでdopin以外のユーザがsuを実行しても拒否されます。

SSHでrootの直接ログインを無効にする

sshでroot@server.comですぐにログインできる状態はセキュリティ上よくありません。一般ユーザを作成し、そちらからログインし、rootになれるようにした方がセキュリティが向上します。ついでにパスワード無しでログインできるユーザも禁止します。念のためsshは2つウィンドウを開いておき、万が一の時のために片方をrootでログインしたままにしておく方が良いです。 設定方法は
# vi /etc/ssh/sshd_config
#PermitRootLogin yes を PermitRootLogin no
#PermitEmptyPasswords no を PermitEmptyPasswords no
に変更します
#を外し、noにしているところがポイントです。sshdを再起動し反映します。
# /etc/init.d/sshd restart
実際にrootでログインしようとしても、Permission Deniedが返されるようになります。一般ユーザからrootに変わるにはsuコマンドを実行します。

SlicehostにPassengerをインストール

CentOS5.2環境です(追記:2009/02/27)

Ubuntu8.04にインストールされていた方から本記事にリンクがありましたので、Ubuntu8.04をお使いの方は、眠れない夜に書くブログ様の「SlicehostにPassengerをインストールで引っかかった。」を参照してください。

Phusion Passenger ( mod_rails )はRuby On RailsをApacheモジュールとして動作させるものです。mongrelなどよりインストールが簡単です。
# gem install passenger
うまく行かない時は
# gem prinstine --all
をしてみてから再度実行して下さい。 Passengerインストール
passenger-install-apache2-module
インストール時に足りないパッケージがあると、それをインストールするように言われます。ご自分の環境に合わせて指示通りに行ってみて下さい。yum install httpdをしてもApache2がnot foundになる場合、
# yum install apr-devel
で解決するかもしれません。(今回ここではまりましたw) Passengerのインストールが終わると、最後にhttpd.confの設定サンプルが表示されます。それをhttpd.confに書き込んで下さい.
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.1/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.1
PassengerRuby /usr/local/bin/ruby
DocumentRootはRailsアプリのpublicディレクトリにしておく。

2008年7月6日日曜日

SlicehostにRuby On Railsをインストールする

gem install rails --include-dependencies
これだけでは使えないので、mod_rails(passenger)を入れてapache経由で使えるようにします。Apacheとpassengerのインストールは次回

SlicehostにRubyGemsをインストール

追記: このzlibのエラーは1.8.7を最初にインストールしたのが原因のようですw 1.8.6では必要ない作業です OSはCentOS5.2です。そのまま入れようとしたらzlibのエラーが起きまいした
# ruby setup.rb
./lib/rubygems/spec_fetcher.rb:1:in `require': no such file to load -- zlib (LoadError)
 from ./lib/rubygems/spec_fetcher.rb:1
 from ./lib/rubygems/source_index.rb:10:in `require'
 from ./lib/rubygems/source_index.rb:10
 from ./lib/rubygems.rb:767:in `require'
 from ./lib/rubygems.rb:767
 from setup.rb:22:in `require'
 from setup.rb:22
めげずにインストールします!( yumでzlibを入れる
# yum install zlib-devel
zlib-1.2.3-3がインストールされる rubyを解凍したディレクトリに移動しext/zlibに行き、zlibの設定
# cd /tmp/ruby/ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
# make
# make install
RubyGemsをRubyForge::RubyGemsからダウンロードしインストールする
# cd /tmp
# wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
# tar zxf rubygems-1.2.0
# cd rubygems-1.2.0
# ruby setup.rb
ちなみにyumでrubygemsをインストールしたい場合は、yumのextra reposにあるようです。そっちの方が楽かも。

SlicehostにRubyをインストール

Railsを使うので今回は1.8.7を入れました。こんなんでいいのかな・・・ 追記: だめみたいw Railsをちゃんと動かしたい方は1.8.6が良いようです。 wget部分のURLをに変更して下さいw
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
# yum install gcc
# yum install make
# cd /tmp
# wget ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz
# tar zxf stable-snapshot.tar.gz
# cd ruby
# ./configure
# make
# make install

Slicehostにapache + subversion環境構築

まずはyumでインストール
# yum install httpd
# yum install subversion
# yum install mod_dav_svn
apache2.2.3、subversion1.4.2がインストールされました とりあえず、httpで繋がるか確認する。httpd.conf最下部に以下のように記述
<VirtualHost www.mydomain.com:80>
    ServerName www.mydomain.com #取得したドメインを記述
    DocumentRoot /var/www/html
</VirtualHost>
いい加減なので後でちゃんと修正して下さいw
service httpd start
これでhttp経由でapacheの画面が見れればOK 続く...

2008年7月4日金曜日

Redmine Wiki 画像のリサイズ機能を実装

RedmineでWikiに画像を貼付けると、画像のサイズのまま表示されて不便でしたが、その問題が対応されたようです。おそらくバージョン0.8からの実装になるので、0.7-stableでは無理かな・・・ マージされるといいですが 関連チケット:#949 Wikiに以下のように書いてサイズを指定します。
!{width:300px}image.png!
ちなみに、リサイズされた画像の原寸表示などのリンクは貼られません。ちょっと不親切かな。

2008年7月3日木曜日

Perlの||で関数のデフォルト値

Perlの $foo = a || b; 的なので、||がどういう感じで演算されるのか気になったのでちょっと書いてみた ちなみにPHPの||はBooleanを返すので、こういった書き方はしません。 Perlはtrueとかfalseが予約語にないんだねー。知らなかった。 スカラー変数だけじゃなく、@や%も今度テストしますw こうやってブログに書く事で自分の記憶を助けているだけですw
#!/usr/local/bin/perl
use strict;
use warnings;

sub test{
 my $foo = shift || 'default';
 $foo .= "\n";
}

undef $a;
print test(1);  # 1
print test(""); # default
print test(0);  # default
print test($a); # default

2008年4月18日金曜日

ファイルをダウンロードさせる方法

ブラウザのファイルの保存のダイアログを開いてファイルを保存してもらいたい時

Content-Dispositionを使う

http://www.studyinghttp.net/header#Content-Disposition

非標準ヘッダですが、それはCookieに関しても同じ(元々NetScapeの独自拡張)で、Content-Dispositionについてもサポートしているブラウザは多く、デファクトスタンダードのようです。

他にはContent-Typeの指定によるやり方もあるようです

  • Content-Type:application/download (あまり良くない?)
  • Content-Type:application/x-download (x-をつけた方が良いらしい)
  • Content-Type:application/x-msdownload (IE用 .exeファイルなど)
  • Content-Type:application/x-up-download (UPブラウザ用)
  • Content-type; application/octet-stream

PHPならheader関数を使う

2008年3月21日金曜日

HTML要素の高さoffsetHeight

alert(div.height) なんてやっても、heightをちゃんと設定してないと空が表示される でも、確実に今表示されてるdivはheightを持ってるはずだ!!と思って 頑張ってググった結果、offsetHeightがそれでした ちょっとサイト名が分からなかったので、リンクだけ。 offsetHeight これも技評のポケリファには載ってなかった 全部網羅してるような本ほしい

2008年3月14日金曜日

IE innerHTML 未知の実行時エラー

PrototypeのElement.update()で要素の中にHTMLを入れられるのを知って試してみたら 「未知の実行時エラーが発生しました」みたいなエラーが… 原因を調べたら、タグの書き方を間違ってました <p></p>の中に<p>を入れようとしていた 文法エラーやね。 てかIEって文法チェックが走るんだった… #FireFoxでは動いた

2008年3月7日金曜日

IEのHR(水平線)のスタイル

検索してたら・・・ retujyou.com様IEでは hr タグの border を消せない。そもそも hr はタダの水平線だったがありました デザインかっこいいな~☆ てか枠線は消せないのか・・・ ブーブー

2008年3月4日火曜日

安いSSL

会社の人に教えていただいたのでメモメモ。家で調べよう♪