▼ 改行しないスペース CTRL + SHIFT + スペースで挿入される、行末等で前後の文字列が改行して分割されないようにする為のスペースの代替文字。前後の文字列が長いと、結構異常な配置となる ※ この状態から、 ※ この状態に ABCDEFGHIJKLMN と abcdefghijklmn が常に同じ行になるように配置されます 改行しないハイフン( CTRL + SHIFT + _ ) というのもあります。 ▼ 傍点 日本語で文字の強調を行うときに、親文字の脇または上下に付加する点のこと。 ▼ 書式の連続貼り付け 通常だと、クリックする事で選択されている部分の書式をコピーして貼り付けモードになりますが、貼り付けれるのは一度きり。ダブルクリックする事によって、コピーした後の貼り付け操作を何度でも実行できるようになります。 ▼ 表の一つのセルだけ幅を変更する セルを選択しないと、上下のセルの幅が連動して変更されてしまいますが、セルの左側で斜め上矢印にカーソルが変化したところでクリックすると、セルが選択され、その後左右にドラッグするとそこだけが左右に移動します。 関連する記事 Word 2010 で『中抜き』の代替え
2013年11月29日
Office Word の 『何だそれ???』
PHP : 日本語を使った変数( 特殊文字列で変数 ) / 変数名を文字列として扱う
そのような需要が無かったので気付かなかったのですが、JSON 文字列を OBJECT に変換すると、日付フォーマットがプロパティで指定されていたので、PHP で参照する方法を調べたところ、json_decode のページのサンプルコードにそれがありました。 print $obj->{'foo-bar'}; // 12345 もともと、PHP では、$GLOBALS で、変数名を文字列として与えて参照できるのでこういう事なのだろうとテストをしてみました。 ( 可変変数に文字列定数を使う )
<? $var_name = array( "睦月", "如月", "弥生", "卯月", "皐月", "水無月", "文月", "葉月", "長月", "神無月", "霜月", "師走" ); for( $i = 0; $i < count($var_name); $i++ ) { ${$var_name[$i]} = $i+1; } print ${"睦月"} . "<br>"; print ${"如月"} . "<br>"; print ${"弥生"} . "<br>"; print ${"卯月"} . "<br>"; print ${"皐月"} . "<br>"; print ${"水無月"} . "<br>"; print ${"文月"} . "<br>"; print ${"葉月"} . "<br>"; print ${"長月"} . "<br>"; print ${"神無月"} . "<br>"; print ${"霜月"} . "<br>"; print ${"師走"} . "<br>"; ${"表示"} = "SHIFT_JIS テスト"; ${"山 田 太 郎"} = "スペースを含む"; ${"2010/10/28"} = "日付"; print "${"表示"}<br>"; print "${"山 田 太 郎"}<br>"; print "{${"2010/10/28"}}<br>"; // 以下可変変数の説明 $a = "hello"; $$a = 'world'; echo "$a ${$a}" . "<br>"; echo "$a $hello" . "<br>"; print ${"hello"} . "<br>"; // この部分追加(特殊文字変数に使用可能) print ${$a} . "<br>"; print $hello . "<br>"; ?>
関連する記事 PHP : 可変変数を使用した特殊文字列による変数と JSON との関係
2013年11月28日
PHP の簡易ログとしては file_put_contents が使われますが、表現方法をいろいろテストして行くと、PHP のバージョンを 5.4.0 以上にして json_encode を使いたくなります。
PHP の 5.4.0 以降では、json_encode の第二引数にフラグを設定して、とても便利で見やすい文字列が作成できます。JSON_PRETTY_PRINT (integer) 返される結果の書式を、スペースを使って整えます。 JSON_UNESCAPED_SLASHES (integer) / をエスケープしません。 JSON_UNESCAPED_UNICODE (integer) マルチバイト Unicode 文字をそのままの形式で扱います (デフォルトでは \uXXXX にエスケープします)。一応、マイナーバージョンをチェックして、使え無いバージョンの場合は第二引数を使わない処理にしています。テストに使っている配列は、$_SERVER( 連想配列 ) と get_declared_classes() で出力される通常配列です。単純にログにキーが必要な場合は当然 print_r( 内容, true ) が良いと思いますが、json_encode で出力される文字列は、さらにシンプルで他への転用にも便利です。特に、単純配列の場合は、json_encode では 内容のみとなっていてより見やすくなっています。 後からの使い道にっては、implode("\n",$target) も使い勝手が良いかもしれません。
<?php function log_test( $target, $file_name ) { $vm = explode( ".", PHP_VERSION ); $vm = $vm[1] + 0; // 結果を見るテストなので、6つだけ取り出す $target = array_slice($target, 0, 6 ); file_put_contents( $file_name, $target, FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); file_put_contents( $file_name, implode("\n",$target), FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); file_put_contents( $file_name, print_r($target,true), FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); if ( $vm >= 4 ) { file_put_contents( $file_name, json_encode($target,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), FILE_APPEND ); } else { file_put_contents( $file_name, json_encode($target), FILE_APPEND ); } file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); } $file_target = "log.txt"; // クリア file_put_contents( $file_target, "" ); log_test($_SERVER,"log.txt"); log_test(get_declared_classes(),"log.txt"); ?> <pre><?= file_get_contents("log.txt") ?></pre> OK
▼ 出力結果
200/usr/local/bin:/usr/bin:/bin/home/winofsql/wwwtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8gzip,deflate,sdchja,en-US;q=0.8,en;q=0.6 ------------------------ 200 /usr/local/bin:/usr/bin:/bin /home/winofsql/www text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 gzip,deflate,sdch ja,en-US;q=0.8,en;q=0.6 ------------------------ Array ( [REDIRECT_STATUS] => 200 [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/winofsql/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch [HTTP_ACCEPT_LANGUAGE] => ja,en-US;q=0.8,en;q=0.6 ) ------------------------ { "REDIRECT_STATUS": "200", "PATH": "/usr/local/bin:/usr/bin:/bin", "DOCUMENT_ROOT": "/home/winofsql/www", "HTTP_ACCEPT": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "HTTP_ACCEPT_ENCODING": "gzip,deflate,sdch", "HTTP_ACCEPT_LANGUAGE": "ja,en-US;q=0.8,en;q=0.6" } ------------------------ stdClassExceptionErrorExceptionClosureDateTimeDateTimeZone ------------------------ stdClass Exception ErrorException Closure DateTime DateTimeZone ------------------------ Array ( [0] => stdClass [1] => Exception [2] => ErrorException [3] => Closure [4] => DateTime [5] => DateTimeZone ) ------------------------ [ "stdClass", "Exception", "ErrorException", "Closure", "DateTime", "DateTimeZone" ] ------------------------ OK
この処理では、file_put_contents で出力した内容を file_get_contents でページに読み込んでいますが、このままでは実用で使えません。このような手法を実際のページで使う為には、出力ファイルはセッション単位で作成する必要がありますし、不要になった時( 一定時間経過後等 )の削除方法をシステム的に実装しなければなりません。
file_get_contents(HTTP ラッパー)を使ったWEBアクセスのhttpヘッダを取得する / $http_response_header という特別な変数
$http_response_header という特別な変数に配列として格納されます。関数内で HTTP ラッパー が使用された場合は、ローカルスコープとなり、$http_response_header は、関数内でのみ有効ですが、global で宣言すると外部からも参照可能になります。
<?php function get_contents_1() { file_get_contents("http://winofsql.jp/toolbox.gif"); var_dump($http_response_header); } get_contents_1(); var_dump($http_response_header); function get_contents_2() { global $http_response_header; file_get_contents("http://winofsql.jp/toolbox.gif"); var_dump($http_response_header); } get_contents_2(); var_dump($http_response_header); ?>
以下が実行結果ですが、一回目のセットで、関数外から参照した場合は NULL となっています。
array(9) { [0]=> string(15) "HTTP/1.1 200 OK" [1]=> string(35) "Date: Wed, 27 Nov 2013 16:36:58 GMT" [2]=> string(58) "Server: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e" [3]=> string(44) "Last-Modified: Wed, 09 Feb 2011 12:41:58 GMT" [4]=> string(19) "ETag: "88-4d528b96"" [5]=> string(20) "Accept-Ranges: bytes" [6]=> string(19) "Content-Length: 136" [7]=> string(17) "Connection: close" [8]=> string(23) "Content-Type: image/gif" } NULL array(9) { [0]=> string(15) "HTTP/1.1 200 OK" [1]=> string(35) "Date: Wed, 27 Nov 2013 16:36:58 GMT" [2]=> string(58) "Server: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e" [3]=> string(44) "Last-Modified: Wed, 09 Feb 2011 12:41:58 GMT" [4]=> string(19) "ETag: "88-4d528b96"" [5]=> string(20) "Accept-Ranges: bytes" [6]=> string(19) "Content-Length: 136" [7]=> string(17) "Connection: close" [8]=> string(23) "Content-Type: image/gif" } array(9) { [0]=> string(15) "HTTP/1.1 200 OK" [1]=> string(35) "Date: Wed, 27 Nov 2013 16:36:58 GMT" [2]=> string(58) "Server: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e" [3]=> string(44) "Last-Modified: Wed, 09 Feb 2011 12:41:58 GMT" [4]=> string(19) "ETag: "88-4d528b96"" [5]=> string(20) "Accept-Ranges: bytes" [6]=> string(19) "Content-Length: 136" [7]=> string(17) "Connection: close" [8]=> string(23) "Content-Type: image/gif" }
ただ、この場合取得する事のできる最大値は 1024 のようです。
2013年11月22日
Windows7 用の IE11 がリリースされて、めでたく『WebGL』が使えるようになりました。
Windows7 用 IE11 Google Chrome と比べて完全というわけには行きませんでしたが、ほぼ Three.js のサンプルはなんとか動くようではあります。 リンク先は、少し大きめの幅で動かしています 以下は IFRAME です。テクスチャ画像を自サイトに置く都合でこのようになっています。
<script type="text/javascript" src="http://lightbox.in.coocan.jp/three/three.min57.js"></script> <script type="text/javascript" src="http://lightbox.in.coocan.jp/three/OrbitControls.js"></script> <script type="text/javascript" src="http://lightbox.in.coocan.jp/three/user_three.js"></script><div id="three_area" style='width:600px;height:400px;border: solid #000000 1px;'></div> <script> var cameraCube, sceneCube; var w = 600; var h = 400; try { // カメラ作成 USER.camera = new THREE.PerspectiveCamera( 70, w / h, 1, 10000 ); USER.camera.position.set( 0, 0, 1 ); USER.camera2 = new THREE.PerspectiveCamera( 50, w / h, 1, 500 ); USER.camera2.position.z = 0; // シーン作成 USER.scene = new THREE.Scene(); USER.scene2 = new THREE.Scene(); // テクスチャの準備 var path = "../threeimg/SwedishRoyalCastle/"; var format = '.jpg'; var urls = [ path + 'px' + format, path + 'nx' + format, path + 'py' + format, path + 'ny' + format, path + 'pz' + format, path + 'nz' + format ]; // テクスチャの実装 mesh = USER.meshPanorama(urls); USER.scene2.add( mesh ); // レンダラー作成 USER.renderer = new THREE.WebGLRenderer(); USER.renderer.setSize( w, h ); // 表示エリア設定 document.getElementById("three_area").appendChild( USER.renderer.domElement ); // コントロール作成 USER.orbit(); USER.controls.autoRotate = true; USER.controls.autoRotateSpeed = 0.5; //default 2.0 // アニメーション開始 USER.animate(); } catch(e) { document.getElementById("three_area").innerHTML = "WebGL が使用できません"; document.getElementById("three_area").style.height = "80px"; } // オーバーライド USER.animate = function () { requestAnimationFrame( USER.animate ); USER.camera2.rotation.copy( USER.camera.rotation ); USER.camera2.position.copy( USER.camera.position ); USER.controls.update(); USER.renderer.render( USER.scene2, USER.camera2 ); } </script>
やっとこれで、Three.js のコンテンツを作成する事ができます。( IE11 への移行はまだまだでしょうけれど ) インストールでは再起動が必要になります F12 の開発者ツールの UI が大きく変わっています 特に、IE のバージョン違いの動作確認をする場所は画像の位置となります 関連する他のデモページ Three.js : WebGL Cube テクスチャパノラマ背景の画像配置が解る表示 Three.js : Creative Commons の equirectangular パノラマ画像( WebGL ) Three.js : webgl_materials_cubemap_dynamic2(球テクスチャでパノラマ背景) の簡易化
2013年11月21日
プレゼンテーション用のズームソフト「梨ズーム」
Windows7 では「StretchBltを使用する」にすれば軽快に使えます。 Windows8 では、StretchBlt を使用しなければ、多少のもたつきを感じはしますが、十分使えます。 このソフトは、拡大鏡のようにデスクトップ内の一つのウインドウとして拡大したものを表示するのでは無く、デスクトップ全体に指定倍率で一気に表示変換するというもので、そのまま操作ができる為、操作の説明にとても適しています。また、プレゼン中にキー操作一つで特定部分の拡大ができるのでとても使いやすいものです。 ▼ デスクトップ全体に4倍表示 以前、XP で QZoom というソフトを使っていましたが、Windows7 でカクカクとして全く使える状態では無かったので、他を探していた時に Windows7 でのレビュー記事をみつけました。それによると、「Program Files」内に置いて、StretchBlt を有効にすると使えるとあったので試してみると使えました。 StretchBlt は、Windows Vista 以降でのみ使用でき、XP ではグレー表示で使え無くなっています。この StretchBlt を有効にしないで Windows7 で実行すると、QZoomと同じくカクカクしていました。ですから、これでたぶん問題無いのだろうと思います。 実行すると、最初に設定ダイアログが表示され、最初に閉じた時に設定ファイルを作成します。以降は設定ダイアログは表示されないので、タスクバーのアイコンを右クリックして、メニューから設定を選択します。 設定ファイルのあるフォルダを開くスクリプトはこちらからダウンロードできます。 設定は自由ですが、ホットキーとして 1、2、3、4 倍を設定しておけば当面問題は無いと思います。終了も必要なので、CTRL+Q で設定しました。 テンキーの該当数字にその倍率を設定しています。ホットキー入力フィールドにカーソルを置いて、使いたいキーを押すと設定が表示されますので、設定ボタンを押します。これらは、設定ファイルに保存されますから、それを USB 等に入れて行き先の設定ファイルと交換すれば、慣れたキーですぐ使えるようになります( 元のファイルはリネームして保存しておけばいいです )
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。 Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。 また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。 ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです 対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。 ※ エキスパートモードで表示しています アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります<% if:page_name eq 'archive' -%> アーカイブページでのみ表示される内容 <% /if %> <% if:page_name eq 'category' -%> カテゴリページでのみ表示される内容 <% /if %> <% if:page_name eq 'tag' -%> タグページでのみ表示される内容 <% /if %>この記述は、以下の場所で使用します
|