SQLの窓

2013年11月29日


Office Word の 『何だそれ???』

▼ 改行しないスペース

CTRL + SHIFT + スペースで挿入される、行末等で前後の文字列が改行して分割されないようにする為のスペースの代替文字。前後の文字列が長いと、結構異常な配置となる

※ この状態から、

※ この状態に

ABCDEFGHIJKLMN と abcdefghijklmn が常に同じ行になるように配置されます

改行しないハイフン( CTRL + SHIFT + _ ) というのもあります。




▼ 傍点

日本語で文字の強調を行うときに、親文字の脇または上下に付加する点のこと。






▼ 書式の連続貼り付け



通常だと、クリックする事で選択されている部分の書式をコピーして貼り付けモードになりますが、貼り付けれるのは一度きり。ダブルクリックする事によって、コピーした後の貼り付け操作を何度でも実行できるようになります。


▼ 表の一つのセルだけ幅を変更する



セルを選択しないと、上下のセルの幅が連動して変更されてしまいますが、セルの左側で斜め上矢印にカーソルが変化したところでクリックすると、セルが選択され、その後左右にドラッグするとそこだけが左右に移動します。



関連する記事

Word 2010 で『中抜き』の代替え



posted by lightbox at 2013-11-29 20:23 | Microsoft Office | このブログの読者になる | 更新情報をチェックする

DOM ノードのドラッグ: Internet Explorer 11 では、要素ウィンドウで要素をドラッグできます

IE11 の 開発者ツールは全く違うものに見える UI に変わりました。



使って見ると解りますが、他のブラウザの良かったところを素直に取り込んでいるようにも見えます。

今回、この機能で気がついたのですが、Google Chrome も同じ機能を持っていました。



CSS でリアルタイムに変更できる上に、レイアウトも変更できます。ただ、今回テストしていて、CSS のキャラクタセットと HTML のキャラクタセットが違うものだと、IE11 では化けて表示されました。Google Chrome は @charset が無くても正しく表示されていましたが、IE11 では @charset が必要でした。

さらに、IE11 が @charset でキャラクタセットを参考にするのは、右サイドに表示される CSS の詳細エリアであり、そこから参照できる CSS 本体は化けたままでした。さすが IE ・・・・。バグで自己主張するのはいいかげんにやめて欲しいです。






posted by lightbox at 2013-11-29 18:13 | IE | このブログの読者になる | 更新情報をチェックする

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 との関係  


タグ:PHP 変数
posted by lightbox at 2013-11-29 09:09 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

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 でページに読み込んでいますが、このままでは実用で使えません。このような手法を実際のページで使う為には、出力ファイルはセッション単位で作成する必要がありますし、不要になった時( 一定時間経過後等 )の削除方法をシステム的に実装しなければなりません。



タグ:JSON PHP
posted by lightbox at 2013-11-28 19:04 | PHP | このブログの読者になる | 更新情報をチェックする

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 のようです。




posted by lightbox at 2013-11-28 01:45 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2013年11月26日


Twitter の検索結果の JSONのフォーマット を PHP の クラスを使って出力(エミュレート)する

ある機械部品やソフトウェアを動作させるのに、オリジナルのシステムを用意するのが難しい場合に、オリジナルと全く同じ動作をするより簡便なシステムを用意することがある。この装置をエミュレータと言う
Twitter の検索結果を Java や C#(mvvmのバインドでは必須) で一覧表示する場合、JSON の構造をクラスで定義しておいて読み込む事が一般的だと思いますが、そのような仕様で動作しているアプリケーションでは、Twitter の検索結果ではなく自前のデータベースで置き換える事によって独自の検索アプリケーションへと比較的簡単に転換する事ができます(既に定義済みのクラス構造を転用する)。 その場合の PHP を使って同様のフォーマットを出力したい場合のサンプルコードです
<?php
header( "Content-Type: application/json; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

class Twitter_Base {

	public $statuses;

}

class Twitter_User {

	public $id;
	public $name;

}

class Twitter_Search {

	public $user;
	public $text;

}

for( $i = 0; $i < 10; $i++ ) {

	$body = new Twitter_Search();
	$user = new Twitter_User();

	$user->id = ($i+1);
	$user->name = "名前".($i+1);

	$body->user = $user;
	$body->text = "本文".($i+1);
	$records[] = $body;

}

$base = new Twitter_Base();
$base->statuses = $records;

print json_encode($base);

?>


▼ 出力したもの
{"statuses":[{"user":{"id":1,"name":"\u540d\u524d1"},"text":"\u672c\u65871"},{"user":{"id":2,"name":"\u540d\u524d2"},"text":"\u672c\u65872"},{"user":{"id":3,"name":"\u540d\u524d3"},"text":"\u672c\u65873"},{"user":{"id":4,"name":"\u540d\u524d4"},"text":"\u672c\u65874"},{"user":{"id":5,"name":"\u540d\u524d5"},"text":"\u672c\u65875"},{"user":{"id":6,"name":"\u540d\u524d6"},"text":"\u672c\u65876"},{"user":{"id":7,"name":"\u540d\u524d7"},"text":"\u672c\u65877"},{"user":{"id":8,"name":"\u540d\u524d8"},"text":"\u672c\u65878"},{"user":{"id":9,"name":"\u540d\u524d9"},"text":"\u672c\u65879"},{"user":{"id":10,"name":"\u540d\u524d10"},"text":"\u672c\u658710"}]}

▼ 整形したもの
{
    "statuses": [
        {
            "user": {
                "id": 1,
                "name": "名前1"
            },
            "text": "本文1"
        },
        {
            "user": {
                "id": 2,
                "name": "名前2"
            },
            "text": "本文2"
        },
        {
            "user": {
                "id": 3,
                "name": "名前3"
            },
            "text": "本文3"
        },
        {
            "user": {
                "id": 4,
                "name": "名前4"
            },
            "text": "本文4"
        },
        {
            "user": {
                "id": 5,
                "name": "名前5"
            },
            "text": "本文5"
        },
        {
            "user": {
                "id": 6,
                "name": "名前6"
            },
            "text": "本文6"
        },
        {
            "user": {
                "id": 7,
                "name": "名前7"
            },
            "text": "本文7"
        },
        {
            "user": {
                "id": 8,
                "name": "名前8"
            },
            "text": "本文8"
        },
        {
            "user": {
                "id": 9,
                "name": "名前9"
            },
            "text": "本文9"
        },
        {
            "user": {
                "id": 10,
                "name": "名前10"
            },
            "text": "本文10"
        }
    ]
}
関連記事

PHP+MySQLの考えられる最もシンプルなソースコード


posted by lightbox at 2013-11-26 21:54 | PHP + Twitter | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり