[Python][PsychoPy]パラメータチェック
課題開始時に使うパラメータチェック。
実験情報ダイアログに入力された値を取得し、空文字でないことを確認する。
Codeコンポーネントの[Begin Experiment]タブに記述する。
inputId = expInfo["id"] if "" == inputId: logging.log(level=logging.WARN, msg="Invalid Parameter for id") core.quit() # #処理 #
[PHP]配列取得後のインデックス指定でエラー
PHP 5.1.6 の場合、配列取得後に続けてインデックス指定をするとエラーになる。
<?php echo getVal()[0]; //←エラー発生 function getVal() { $ret = array(); $ret[0] = 'zero'; return $ret; } ?>
Parse error: syntax error, unexpected '[', expecting ',' or ';' in /var/www/html/〜〜〜
この場合、一度変数に格納してからアクセスする必要がある。
<?php $ar = getVal(); echo $ar[0]; //←これはOK function getVal() { $ret = array(); $ret[0] = 'zero'; return $ret; } ?>
なお、PHP 5.3.28 では前者の方法もOK。
[JavaScript][jQuery]非同期処理の処理順を担保する
JavaScriptにおいて、非同期処理の処理順を担保したい場合。
例えば以下の処理では、タイトル文字列を取得することができない。
(HTMLの内容を取得する非同期処理完了前に、$('title').text() がコールされる)
<script type="text/javascript"> $(function(){ loadPage(); getTitle(); }); function loadPage() { $('body').load( ''http://www6.plala.or.jp/private-hp/samuraidamasii/'' ); } function getTitle() { console.log($('title').text()); //←タイトル表示できない setTimeout(function() { console.log($('title').text()); //←(内容取得後であれば)タイトル表示できる }, 3000); } </script>
非同期処理においても、完了後に次の処理を開始するよう Deferred を使用する。
<script type="text/javascript"> $(function(){ //loadPage(); //getTitle(); loadPage().done(getTitle); }); function loadPage() { //$('body').load( // ''http://www6.plala.or.jp/private-hp/samuraidamasii/'' //); var d = $.Deferred(); $('body').load( 'http://www6.plala.or.jp/private-hp/samuraidamasii/', null, d.resolve //コールバック関数 ); return d.promise(); } function getTitle() { console.log($('title').text()); } </script>
$('body').load() 時に
XMLHttpRequest cannot load 〜〜〜
のエラーが発生する場合は、こちらの記事を参照。
[JavaScript][Chrome]ローカルホストから他ドメインにアクセスできない時の対処法 - サブノート
[PHP][CakePHP]テーブルのカラム変更が反映されない
テーブルのカラムを追加したが、Insertできない事態が発生した。
原因は app/tmp/cache/models 内の cake_models_xxx_yyy が残っていたため。
ファイルを削除すればキャッシュが消えて、変更が無事反映された
[PHP]ファイルオープン時はエラーチェックを行う
ファイル読み書きの際は fopen() を使う。
「ファイルがない」「権限がない」等のエラー時に FALSE を返すので、チェックをしていないとその後の処理で
Warning: fgetcsv() expects parameter 1 to be resource, boolean given in [ファイルパス] on line [行数]
等々のエラーが発生する。
下記のようなエラーチェックは必須。
<?php /** CSVファイルの内容を取得 **/ public function loadData($filename) { $fp = fopen($filename, "r"); if($fp === FALSE) { //エラー throw new Exception('Error: Failed to open file (' . filename . ')'); } //CSVの内容を取得 while (($data = fgetcsv($fp, 0, ",")) !== FALSE) { $ret[] = $data; } fclose($fp); return $ret; } ?>