[Linux]CentOS 5.3/5.4のsudoコマンドが曲者。

Written by uechoco 1月 11

CentOS 5.3以降で、sudoコマンドのバージョンが新しくなり、sudoコマンド自体や、今まで使えていたsudoを含むスクリプトなどが使えなくなってしまうケースが出てきました。私も同様の現象にはまりました。私の場合は、スクリプト内で使用しているsudo付のコマンドでPATHが通らなくなってしまったという現象です。

今は以下のURLなどを参考に解決し、今まで通りの運用をしています。

記憶の片隅にでも覚えておいてもらえると役に立ったりするときがくるかもしれません。

[雑記]HDD 1.5TBが1万円切りました

Written by uechoco 1月 02

MacのTimeMachine用のHDDを、今使っている320GBのものから新調しようと思って、新しいのを買いに行きました。1GBあたりの値段がお手頃なのが、今は1.5TBのSATA HDDですね。なんと1.5TBで1万円を切っていました。びっくりです。一応WD15EARSを狙っていたのですが、売り切れていたので、旧モデルのWD15EADSを購入しました。まぁバックアップ用のHDDなので容量さえあればいいです。

少し前まではHitachi Deskstarシリーズをよく買っていたのですが、最近はWestern DigitalのEADS/EARSシリーズを買うようになりました。なんとなく後者のほうが安くて性能がいい感じがしています。

そういえば、昔NAS欲しいって思ってたけど、NAS市場は最近どうなんでしょう?

[mac]WindowsでMac用外部HDD(GPT保護パーティション)を初期化する

Written by uechoco 12月 31

MacのTimeMachineのバックアップに使用していたHDDを、Windows XP用のバックアップHDDに変えようと思って、Windowsにつなげて、ディスクの管理ツールでフォーマットしようとしたところ、GPT保護パーティションという表示になっていて、何も操作を受け付けないようになっていました。

以下の2つのサイトを参考に、Windows XPのコマンドラインアプリケーションのdiskpartツールを使って、Windows XPで使えるHDDとして初期化してみました。

以下がdiskpartツールのログです。

TEXT:
  1. Microsoft Windows XP [Version 5.1.2600]
  2. (C) Copyright 1985-2001 Microsoft Corp.
  3.  
  4. C:\Documents and Settings\hogehoge>diskpart
  5.  
  6. Microsoft DiskPart version 5.1.3565
  7.  
  8. Copyright (C) 1999-2003 Microsoft Corporation.
  9. コンピュータ: hogehogepc
  10.  
  11. DISKPART> list disk
  12.  
  13. Disk ###  Status           Size     Free     Dyn  Gpt
  14. --------  ---------------  -------  -------  ---  ---
  15. Disk 0    オンライン        466 GB      0 B
  16. Disk 1    オンライン        298 GB      0 B
  17. Disk 2    オンライン        298 GB      0 B
  18.  
  19. DISKPART> select disk=1
  20.  
  21. ディスク 1 が現在選択されているディスクです。
  22.  
  23. DISKPART> detail disk
  24.  
  25. Hitachi HDT725032VLA360
  26. ディスク ID: 02AB02AB
  27. 種類       : IDE
  28. バス       : 3
  29. ターゲット : 0
  30. LUN ID     : 0
  31.  
  32. Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  33. ----------  --- -----------  ----  ----------  -------  ---------  --------
  34. Volume 7    H                NTFS  Partition    146 GB  正常
  35. Volume 8    I                NTFS  Partition     83 GB  正常
  36. Volume 9    J                NTFS  Partition     69 GB  正常
  37.  
  38. DISKPART> select disk=2
  39.  
  40. ディスク 2 が現在選択されているディスクです。
  41.  
  42. DISKPART> detail disk
  43.  
  44. Hitachi HDT725032VLA360 USB Device
  45. ディスク ID: B07D94E2
  46. 種類       : USB
  47. バス       : 0
  48. ターゲット : 0
  49. LUN ID     : 0
  50.  
  51. ボリュームがありません。
  52.  
  53. DISKPART> clean
  54.  
  55. DiskPart はディスクを正常にクリーンな状態にしました。
  56.  
  57. DISKPART> exit
  58.  
  59. DiskPart を終了しています...

実行後、初期化が可能なディスクになっていました。

[php]86400

Written by uechoco 12月 21

86400って聞いて、すぐに何の数字か当てられる人は、一般の人にはなかなか居ないかもしれない。

ただ、プログラマーならこの数字は暗記しておくべきだと思う。256って数字を区切りがいいと思うように、86400もプログラマーにとっては神聖な数字だと感じてほしい。

ちなみに86400ってのは、1日の秒数ね。24[h] × 60[m/h] × 60[s/m] = 86400[s]

例えば、「3日前までのデータを取得する」プログラムなら以下のようなイメージ。

PHP:
  1. $base_time = time() - 86400 * 3;
  2.   $sql = "SELECT * FROM hoge WHERE created_unixtime>= {$base_time}";

ポイントとしては、「86400*3」をそのまま計算せずに残しておくこと。「time() - 259200」じゃパッと見でよくわからないが、「time() - 86400 * 3」ならパッと見で3日前だとわかる。どうしても計算したいならコメントで「// 86400 * 3」とでも残しておくといい。

とはいっても人の好みかもね。

[symfony]app:routesコマンド

Written by uechoco 12月 21

Jobeet(Practical symfony)の5日目にあった、ルートのデバッグをするためのコマンドが、app:routesコマンドです。

./symfony app:routes application [name]

試しにJobeetの5日目の状態で「./symfony app:routes frontend」をたたくとこんな感じです。

TEXT:
  1. $ ./symfony app:routes frontend
  2. >> app       Current routes for application "frontend"
  3. Name          Method Pattern
  4. job           GET    /job.:sf_format
  5. job_new       GET    /job/new.:sf_format
  6. job_create    POST   /job.:sf_format
  7. job_edit      GET    /job/:id/edit.:sf_format
  8. job_update    PUT    /job/:id.:sf_format
  9. job_delete    DELETE /job/:id.:sf_format
  10. job_show      GET    /job/:id.:sf_format
  11. job_show_user GET    /job/:company_slug/:location_slug/:id/:position_slug
  12. homepage      ANY    /
  13. default_index ANY    /:module
  14. default       ANY    /:module/:action/*

お決まりのdefaultルートに対して、「./symfony app:routes frontend default」をたたくとこんな感じです。

TEXT:
  1. $ ./symfony app:routes frontend default
  2. >> app       Route "default" for application "frontend"
  3. Name         default
  4. Pattern      /:module/:action/*
  5. Class        sfRoute
  6. Defaults    
  7. Requirements action: '[^/\\.]+'
  8.              module: '[^/\\.]+'
  9. Options      cache: NULL
  10.              context: array ()
  11.              debug: true
  12.              default_action: 'index'
  13.              default_module: 'default'
  14.              extra_parameters_as_query_string: true
  15.              generate_shortest_url: true
  16.              lazy_routes_deserialize: false
  17.              load_configuration: false
  18.              logging: false
  19.              lookup_cache_dedicated_keys: false
  20.              segment_separators: array (0 => '/',1 => '.',)
  21.              segment_separators_regex: '(?:/|\\.)'
  22.              suffix: ''
  23.              text_regex: '.+?'
  24.              variable_content_regex: '[^/\\.]+'
  25.              variable_prefix_regex: '(?:\\:)'
  26.              variable_prefixes: array (0 => ':',)
  27.              variable_regex: '[\\w\\d_]+'
  28. Regex        #^
  29.              /(?P<module>[^/\.]+)
  30.              /(?P<action>[^/\.]+)
  31.              (?:(?:/(?P<_star>.*))?
  32.              )?
  33.              $#x
  34. Tokens       separator  array (0 => '/',1 => NULL,)
  35.              variable   array (0 => ':module',1 => 'module',)
  36.              separator  array (0 => '/',1 => NULL,)
  37.              variable   array (0 => ':action',1 => 'action',)
  38.              separator  array (0 => '/',1 => NULL,)
  39.              text       array (0 => '*',1 => NULL,)

そしてsfPropelRouteCollectionによる自動生成ルートの1つに対して「./symfony app:routes frontend job_edit」をたたくとこんな感じです。

TEXT:
  1. $ ./symfony app:routes frontend job_edit
  2. >> app       Route "job_edit" for application "frontend"
  3. Name         job_edit
  4. Pattern      /job/:id/edit.:sf_format
  5. Class        sfPropelRoute
  6. Defaults     action: 'edit'
  7.              module: 'job'
  8.              sf_format: 'html'
  9. Requirements id: '\\d+'
  10.              sf_format: '[^/\\.]+'
  11.              sf_method: array (0 => 'get',)
  12. Options      cache: NULL
  13.              context: array ()
  14.              debug: true
  15.              default_action: 'index'
  16.              default_module: 'default'
  17.              extra_parameters_as_query_string: true
  18.              generate_shortest_url: true
  19.              lazy_routes_deserialize: false
  20.              load_configuration: false
  21.              logging: false
  22.              lookup_cache_dedicated_keys: false
  23.              method: NULL
  24.              model: 'JobeetJobPeer'
  25.              object_model: 'JobeetJob'
  26.              segment_separators: array (0 => '/',1 => '.',)
  27.              segment_separators_regex: '(?:/|\\.)'
  28.              suffix: ''
  29.              text_regex: '.+?'
  30.              type: 'object'
  31.              variable_content_regex: '[^/\\.]+'
  32.              variable_prefix_regex: '(?:\\:)'
  33.              variable_prefixes: array (0 => ':',)
  34.              variable_regex: '[\\w\\d_]+'
  35. Regex        #^
  36.              /job
  37.              /(?P<id>\d+)
  38.              /edit
  39.              (?:\.(?P<sf_format>[^/\.]+)
  40.              )?
  41.              $#x
  42. Tokens       separator  array (0 => '/',1 => NULL,)
  43.              text       array (0 => 'job',1 => NULL,)
  44.              separator  array (0 => '/',1 => NULL,)
  45.              variable   array (0 => ':id',1 => 'id',)
  46.              separator  array (0 => '/',1 => NULL,)
  47.              text       array (0 => 'edit',1 => NULL,)
  48.              separator  array (0 => '.',1 => NULL,)
  49.              variable   array (0 => ':sf_format',1 => 'sf_format',)

あまりに細かすぎて謎な感じですが、私が使うとしたら、詳細表示の末尾のTokensセクションにて、セパレータ文字が有効かどうかを確認するくらいでしょうか。以前セパレータに「_」を使ったらセパレータとして認識されなかったことがあったので、悩んだ末に「.」に変更したのですが、もしかしたらそこで使えたのかもしれません。