JavaScriptでN進数変換しようとしたら、不思議な振る舞いに出会った
追記
[0-9]\.[0-9]*
だと、少数点として扱われて
[0-9]\s+\.
だと、ドット演算子として扱われるからか
SyntaxErrorのところは、数字もしくは空白文字が来るべき箇所に、その他の文字が来たからエラー吐いてるのね。
あと
7['toString'](2)
これもあったな。
なにこれ
7.toString(2) // SyntaxError 7 .toString(2) // 111 7 .toString(2) // 111 7. toString(2) // SyntaxError 7 . toString(2) // 111 var n = 7; n.toString(2) // 111 new Number(7).toSring(2) // 111 Number(7).toSring(2) // 111 7..toString(2) // 111 7 ..toString(2) // SyntaxError 7. .toString(2) // 111 7.. toString(2) // 111 7.0.toString(2) // 111
範囲選択内のリンクを開く
プログラムのリハビリ中。
一瞬、for文の書き方忘れて焦った。。
document.addEventListener('DOMContentLoaded', function() { document.body.addEventListener('mouseup', function() { var selection = window.getSelection(); if (selection.rangeCount < 1) { return; } var anchorList = selection.getRangeAt(0).cloneContents().querySelectorAll('a'); for (var i = 0, l = anchorList.length; i < l; i++) { window.open(anchorList[i].href); } }, false); }, false);
諸君、私は奈々様が好きだ
諸君、私は奈々様が好きだ
諸君、私は奈々様が好きだ
諸君、私は奈々様が大好きだ
POWER GATEが好きだ
innocent starterが好きだ
ETERNAL BLAZEが好きだ
残光のガイアが好きだ
Silent Bibleが好きだ
新宿コマ劇場で
さいたまスーパーアリーナで
日本武道館で
横浜アリーナで
西武ドームで
この地上に存在するありとあらゆる奈々様が大好きだ
PVが好きだ
「Astrogation」のPVでウィンクされた時など心がおどる
ラジオが好きだ
副ヘッドが罰ゲームを受けた時など胸がすくような気持ちだった
ライブが好きだ
深愛のアコースティックバージョンなど感動すらおぼえる
DISCOTHEQUEのイントロが流れた時などもうたまらない
ETERNAL BLAZEで会場がオレンジに染まるのは最高だ
以前はCDランキングで紹介時間短かったのに
特集が組まれた時など絶頂すら覚える
アンチに滅茶苦茶にされるのが好きだ
歌詞が厨二病だと言われるのはとてもとても悲しいものだ
ジャニーズファンの物量に押し潰されて殲滅されるのが好きだ
ジャニーズに1位を持ってかれるのは屈辱の極みだ
諸君 私は奈々様を 挑戦者である様な奈々様を望んでいる
諸君 私に付き従う奈々様好きの諸君 君たちは一体何を望んでいる?
更なる奈々様を望むか
糞の様な奈々様を望むか?
歌唱力の限りを尽くし 番組企画の素人集団を下す 女神のようなのような奈々様を望むか?
奈々様!! 奈々様!! 奈々様!!
よろしい ならば奈々様だ
だが、オリコンで万年2位に耐え続けて来た我々には
ただの奈々様ではもはや足りない!!
大奈々様を!! 一心不乱の大奈々様を!!
我々はわずかに小数
ジャニーズファンに比べれば物の数ではない
だが諸君は一騎当千の団員だと私は信じている
ならば我らは諸君と私で総兵力100万と1人のFC集団となる
我らを忘却の彼方へと追いやり、過去の栄光にすがっている連中を叩きのめそう
髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう
連中にPHANTOM MINDSがオリコン・週間シングルチャートで週間1位を獲得したことを思い出させてやる
連中に紅白での深愛を思い出させてやる
奈々様には奴らの哲学では思いもよらないカレーがある事を思い出させてやる
1000人の団員の集団で 世界を七色で埋め尽くしてやる
目標 ロンドン
スマイルギャング作戦 状況を開始せよ
征くぞ 諸君
Vimana使ってみた、、い
Vim script manager「Vimana」が便利すぎる。
を見てインストールしてみました。
# git clone git://github.com/c9s/Vimana # cd Vimana # perl Makefile.PL # make
で、makeファイルねーよと言われてしまった。
id:mattn さんからのアドバイスで、incディレクトリを消したら、Module::AutoInstallが無いと怒られてしまった。
id:TakiTake incディレクトリを消してperl Makefile.PLすると行けたりもします。
git cloneからやり直そうとしたら、現在(2010/02/04 12:10) github落ちてるみたい。
CPANからのインストールを試みるも失敗。
こっちも、makeファイル無いってエラーなのか?
# cpan Vimana
CPAN: Storable loaded ok (v2.21) Going to read '/root/.cpan/Metadata' Database was generated on Wed, 03 Feb 2010 22:45:58 GMT CPAN: YAML loaded ok (v0.71) Going to read 120 yaml files from /root/.cpan/build/ CPAN: Time::HiRes loaded ok (v1.9719) ......DONE Restored the state of 1 (in 5.8001 secs) Running install for module 'Vimana' Running make for C/CO/CORNELIUS/Vimana-2010.03419.tar.gz Prepending /root/.cpan/build/App-Context-0.967-85imJq/blib/arch /root/.cpan/build/App-Context-0.967-85imJq/blib/lib to PERL5LIB for 'get' Has already been unwrapped into directory /root/.cpan/build/Vimana-2010.03419-cfAjBm Prepending /root/.cpan/build/App-Context-0.967-85imJq/blib/arch /root/.cpan/build/App-Context-0.967-85imJq/blib/lib to PERL5LIB for 'make' Has already been made Prepending /root/.cpan/build/App-Context-0.967-85imJq/blib/arch /root/.cpan/build/App-Context-0.967-85imJq/blib/lib to PERL5LIB for 'test' Running make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/00-commands.t t/00-install.t t/00-load.t t/00-path.t t/00-update.t t/01-package.t t/01-record.t t/accessor.t t/installer-makefile-2.t t/installer-makefile-3.t t/installer-makefile.t t/00-commands.t ........... ok t/00-install.t ............ ok t/00-load.t ............... 1/6 # Testing Vimana 2010.03419, Perl 5.010000, /usr/bin/perl t/00-load.t ............... ok t/00-path.t ............... ok t/00-update.t ............. ok t/01-package.t ............ 1/9 # basic # directory detection t/01-package.t ............ 6/9 # makefile # metafile t/01-package.t ............ ok t/01-record.t ............. ok t/accessor.t .............. ok t/installer-makefile-2.t .. 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. # Failed test at t/installer-makefile-2.t line 22. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile-2.t line 24 # Looks like you failed 1 test of 2. t/installer-makefile-2.t .. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests t/installer-makefile-3.t .. 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile-3.t line 24 t/installer-makefile-3.t .. ok t/installer-makefile.t .... 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. # Failed test at t/installer-makefile.t line 20. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile.t line 22 # Looks like you failed 1 test of 2. t/installer-makefile.t .... Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests Test Summary Report ------------------- t/installer-makefile-2.t (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 t/installer-makefile.t (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 Files=11, Tests=70, 7 wallclock secs ( 0.23 usr 0.08 sys + 3.12 cusr 1.27 csys = 4.70 CPU) Result: FAIL Failed 2/11 test programs. 2/70 subtests failed. make: *** [test_dynamic] エラー 1 CORNELIUS/Vimana-2010.03419.tar.gz /usr/bin/make test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports CORNELIUS/Vimana-2010.03419.tar.gz Running make install make test had returned bad status, won't install without force
インストール手前で停滞中です。
誰か原因分かりますか?
追記
足りないモジュールをインストールして、incディレクトリを削除したら
# perl Makefile.PL
include /root/repos/Vimana/inc/Module/Install.pm include inc/Module/Install/Metadata.pm include inc/Module/Install/Base.pm include inc/Module/Install/Scripts.pm include inc/Module/Install/Makefile.pm include inc/Module/Install/Include.pm include inc/Module/Install/AutoInstall.pm include inc/Module/AutoInstall.pm *** Module::AutoInstall version 1.03 *** Checking for Perl dependencies... [Core Features] - App::CLI ...loaded. (0.08 >= 0.08) - Archive::Any ...loaded. (0.0932) - DateTime ...loaded. (0.53) - Exporter::Lite ...loaded. (0.02) - File::Path ...loaded. (2.08 >= 2.07) - File::Spec ...loaded. (3.31) - File::Type ...loaded. (0.22) - Getopt::Long ...loaded. (2.38) - LWP::Simple ...loaded. (5.827) - LWP::UserAgent ...loaded. (5.834) - Test::More ...loaded. (0.94) - URI ...loaded. (1.52 >= 1.37) - YAML ...loaded. (0.71) - Digest::MD5 ...loaded. (2.39) - JSON ...loaded. (2.17) *** Module::AutoInstall configuration finished. Vim found: ---------- VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Mar 27 2009 08:42:32) 適用済パッチ: 1-148 Modified by <bugzilla@redhat.com> ---------- include inc/Module/Install/WriteAll.pm include inc/Module/Install/Win32.pm include inc/Module/Install/Can.pm include inc/Module/Install/Fetch.pm Checking if your kit is complete... Warning: the following files are missing in your kit: META.yml Please inform the author. Writing Makefile for Vimana Writing META.yml
無事Makefileが作成されました。
makeも成功して、意気揚々とmake testしたら、
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/00-commands.t t/00-install.t t/00-load.t t/00-path.t t/00-update.t t/01-package.t t/01-record.t t/accessor.t t/installer-makefile-2.t t/installer-makefile-3.t t/installer-makefile.t t/text.t t/00-commands.t ........... ok t/00-install.t ............ ok t/00-load.t ............... 3/6 # Testing Vimana 2010.03419, Perl 5.010000, /usr/bin/perl t/00-load.t ............... ok t/00-path.t ............... ok t/00-update.t ............. ok t/01-package.t ............ 1/9 # basic # directory detection t/01-package.t ............ 6/9 # makefile # metafile t/01-package.t ............ ok t/01-record.t ............. ok t/accessor.t .............. ok t/installer-makefile-2.t .. 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. # Failed test at t/installer-makefile-2.t line 22. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile-2.t line 24 # Looks like you failed 1 test of 2. t/installer-makefile-2.t .. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests t/installer-makefile-3.t .. 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile-3.t line 24 t/installer-makefile-3.t .. ok t/installer-makefile.t .... 1/2 make[1]: *** ターゲット `install' を make するルールがありません. 中止. # Failed test at t/installer-makefile.t line 20. cannot remove path when cwd is /tmp/test for /tmp/test: at t/installer-makefile.t line 22 # Looks like you failed 1 test of 2. t/installer-makefile.t .... Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests t/text.t .................. ok Test Summary Report ------------------- t/installer-makefile-2.t (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 t/installer-makefile.t (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 Files=12, Tests=72, 9 wallclock secs ( 0.49 usr 0.00 sys + 4.49 cusr 1.28 csys = 6.26 CPU) Result: FAIL Failed 2/12 test programs. 2/72 subtests failed. make: *** [test_dynamic] エラー 255
OTL
Symfonyで環境の違いを考慮した設定方法
symfonyのインストールディレクトリが違う
三項演算子なりswich文なりで、パスを動的に書き換える。
ヒットする可能性が高い順に調べることで、比較回数を減らすよう考慮すべし。
web/index.php
<?php $path = is_file('/usr/local/share/pear/symfony/autoload/sfCoreAutoload.class.php') ? '/usr/local/share/pear/symfony/autoload/sfCoreAutoload.class.php' : '/usr/share/pear/symfony/autoload/sfCoreAutoload.class.php'; require_once $path; sfCoreAutoload::register(); class ProjectConfiguration extends sfProjectConfiguration { public function setup() { // for compatibility / remove and enable only the plugins you want $this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin')); } }
cookieのパス
factories.ymlで設定可能ですが、factries.yml読み込み時にはRequestオブジェクトがまだ作成されていないので正規表現で動的に作成しました。正規表現は sfWebRequest.class.php の getRelativeUrlRoot メソッドから拝借。
apps/frontend/config/factories.yml
all: storage: class: sfSessionStorage param: session_name: symfony session_cookie_path: <?php echo preg_replace('#/[^/]+\.php5?$#', '', $_SERVER['SCRIPT_NAME']).'/' ?>
その他
databases.yml や .htaccess は変更なしで使えるようテスト環境、本番環境で揃えた方が楽。無理な場合は、バージョン管理やrsync対象から外す。その代わり、databases.yml.sample .htaccess.sample というファイルを用意しておき、リネーム(.sample削る)して環境に応じて編集するようにすれば1から記述する手間が多少減る。
.gitignore
Git用にこんな設定にしてます。
*.swp cache/ data/ log/ config/databases.yml web/.htaccess
init.sh
.gitignoreの対になるシェルスクリプトとしてこんなの作りました。
#!/bin/sh mkdir -p cache data/fixtures data/sql log chmod 777 cache log cp config/databases.yml.sample config/databases.yml cp web/.htaccess.sample web/.htaccess
git clone してきた後に
$ ./init.sh
することで、必要なディレクトリを生成します。
hoge.cssをhoge.css?20100110にするタスク作った
なぜクエリー文字列を付加するのか
せっかくCSSやJSを変更しても、ブラウザのキャッシュが残っていて変更が反映されない場合があります。そんなときによく使われるテクニックが、ファイル名の後ろにクエリー文字として更新時間を追加するというものです。こうすることで、ブラウザのキャッシュからではなく、更新後のファイルを読み込ませることが可能になります。
でも
変更するたびにview.ymlを書き換えるのはめんどくさい。ということでタスク化してみました。
使い方
$ symfony view:modified-time
このタスクを実行することで、タスクが自動的にview.ymlを探し出しCSSとJSファイル名の後ろに更新時間を付加します。あと、オプションとして、更新時間のフォーマットとYAMLファイルの出力形式を変更できます。
コード
<?php /** * Add modified time to CSS and JS files * * For example * - stylesheets: [common] * + stylesheets: [common.css?20100105] */ class viewModifiedtimeTask extends sfBaseTask { protected $format = '', // date format $ext = ''; // file extension protected function configure() { $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'), new sfCommandOption('format', null, sfCommandOption::PARAMETER_REQUIRED, 'The date format', 'Ymd'), new sfCommandOption('inline', null, sfCommandOption::PARAMETER_REQUIRED, 'The level where you switch to inline YAML', 2) )); $this->namespace = 'view'; $this->name = 'modified-time'; $this->briefDescription = 'Add modified time to CSS and JS files'; $this->detailedDescription = <<<EOF The [view:update-time|INFO] task does things. Call it with: [php symfony view:modified-time|INFO] EOF; } protected function execute($arguments = array(), $options = array()) { $this->format = $options['format']; $files = sfFinder::type('file')->name('view.yml')->in('.'); foreach ($files as $file) { $configuration = sfYaml::load($file); foreach ($configuration as $view_name => $c) { if (isset($c['stylesheets'])) { $this->ext = 'css'; $configuration[$view_name]['stylesheets'] = array_map(array($this, 'addModifiedTime'), $c['stylesheets']); } if (isset($c['javascripts'])) { $this->ext = 'js'; $configuration[$view_name]['javascripts'] = array_map(array($this, 'addModifiedTime'), $c['javascripts']); } } file_put_contents($file, sfYaml::dump($configuration, $options['inline'])); } } protected function addModifiedTime($source) { if (false !== strpos($source, '*')) { return $source; } if (false !== $pos = strpos($source, '?')) { // remove query string $source = substr($source, 0, $pos); } if (false === strpos(basename($source), '.')) { // add file extension $source .= '.'.$this->ext; } $path = sprintf('%s/%s/%s', sfConfig::get('sf_web_dir'), $this->ext, preg_replace('/^-/', '', $source)); $modified_time = date($this->format, filemtime($path)); return $source.'?'.$modified_time; } }
imagesファルダ下にあるfavicon.icoを参照させる方法
apacheのエラーログ見たら、File does not exist favicon.icoの嵐で参ったよ。
早速favicon.icoを作成して設置しました。