sidewalkcafe blog

日々是好日

新しいmini Macを買った

うちのmini Macが無事脂肪したので
Mac OS Snow Leopard(10.6)からHigh Sierra(10.13)に変えた時のお話

Windows共有の話

Windowsとのフォルダ共有を設定しようとして以下のページを参考にしてたけどうまく繋がらない
<参考>
無線 LAN や Wi-Fi 環境での Mac と Windows のファイル共有 - Macにスイッチしました


<症状>
Mac側、「ネットワーク」設定の「WINS」にある「ワークグループ」が変更できない。

Windows側でワークグループ名を変更してるので、Mac側でもワークグループ名の変更が必要なのだけれど、変えても元に戻る。


<結論>
ワークグループなんて飾りです、エロい人には(略

Windows側から「ネットワーク」を開いて、アドレスバーに以下のように直接NetBIOS名を打ち込むと繋がるw

¥¥設定してあるNetBIOS名

NetBIOS名の確認は「システム環境設定」→「ネットワーク」→左から接続済のネットワークを選んで「詳細」→「WINS」
名前が「MINI-MAC」だったら「¥¥mini-mac」→アカウント名とパスワードを入力でOK

CS製品インストールの話

※古いソフトなので動作は保証なし各自自己責任で

CS3ライセンスの話

CS3製品はAdobeアクティベーションサーバを停止したので、ライセンス認証(and解除)が出来なくなってる


<対策>
以下のページからログインして、対策版のCS3製品をダウンロードする
CS3 または Acrobat 8 の起動時に、ライセンス認証エラーまたは接続エラーが発生する

起動できない

appleJavaランタイムの提供を止めたのでインストールはできても起動はできない。


<対策>
以下のページの手順に従って空フォルダを作ると起動できる
macOS High Sierra でAdobe CSシリーズを起動する方法

    リカバリモードで起動
    Rootlessを一時的に無効化する
    再起動してOSを立ち上げる
    Java 6の2つのディレクトリを作成
    再びリカバリモードで起動
    Rootless を再び有効化
    再起動するとAdobe CSシリーズが使える
[以上引用]

illustratorアップデートの話

対策版のイラストレータはバージョンが13.0.0だった・・・。
このバージョンは保存時に「PDF互換ファイルの作成」オプションを外してもPDF互換として保存しちゃってくれるので
画像を配置してる時はべらぼうにファイルサイズが大きくなる(例:1.5MB→230MBって何だよ・・・)
ただ、パッチ充てようとしたらエラーが出る


<対策>
以下のページを参考にパッチファイルの内容をいじる
Muntain LionでCS3をアップデートしよ~(今更ながら) | 感覚パンダが申しておる

 デスクトップにパッチファイルをコピー
 右クリック([control]+クリック)でコンテクストメニューから「パッケージの内容を表示」を選ぶ
    [Contents]→[Resource]→[PatcherApplication]で再び「パッケージの内容を表示」
 [Contents]→[Resource]を開いて一旦おいとく
 新しいウィンドウから上メニュー「移動」→「フォルダへ移動」
 「/usr/bin」と入力してエンター
 [bspatch]というファイルを探して、先ほどの[Resourc]フォルダにコピー、上書き
 ウィンドウを閉じて[AdobePatcher]実行
[以上引用]

illustratorのフォントメニューが透明

<問題>
フォントを変えようとしたらフォント一覧が見れない
1行しか表示されない


<対策>
「システム環境設定」「アクセシビリティ」「ディスプレイ」にある
「透明度を下げる」にチェックを入れる

illustratorでフォントを変えようとしたら落ちる

<問題>
フォントを変えようとしたらイラストレーターが強制終了する


<対策>
「システム環境設定」「一般」にある
「メニューバーとDockを暗くする」のチェックを外す(デフォルトでは外れてる)

Office製品の話

古いMS Officeが動かないので以下のどれかを使う

Office online(MS)

MSアカウントがあれば無料で使える
products.office.com


<問題>
図が表示できない
「Excel Online」では使用できない機能 | SPeed LAND 365


その他、パスワード付きの書類は開けないのは対応策ないので、以下のソフトを使う

OpenOffice

なんか動作が不安定なので上のに変えた
http://www.openoffice.org/ja/

アンチウイルスソフトの話

やっぱり入れとかなあかんなあ
という事で動作が軽いと言われるAVGを入れる(Mac版は英語のみ)


<症状>
ネットとメールが繋がらない


<対策>
上メニュー「AVG AntiVirus」から「Preferences」
「Shields」→「Web Shield」で「Scan browser-based HTTPS connections」のチェックを外す
「Exceptions」→ 「Email Shield」で左下の鍵を外しパスワード入力、「+」で追加
「Server」にメール受信サーバを選んで「Service」は「php3」→「ADD」で追加
同じく「Server」にメール送信サーバ→「imap」追加


<問題>
メールもWebもほぼフリーアクセスなので対策する意味あまりないかなあと
まあウイルスチェックとかあるからマシかw

FirefoxThunderbirdの話

古いMac miniからプロファイルをコピペしてくる。
設定情報のバックアップ | Firefox ヘルプ

Finder高速化の話

Finderのアニメーションを止める
Mac OSX Sierraの高速化とおすすめ設定。 | WebEssentials

windows hostsファイルの編集

Windows版のXAMPPにサブドメインを設定しようとして、hostsファイルが編集できなくて困ってた件。

ウィルス対策ソフトが原因だった。(うちはAvira


<注意!>
hostsファイルを悪用されると、フィッシングサイトへの誘導が容易になります。
普段は編集禁止にしておいた方が無難

<対策>
Aviraの設定から [全般] > [セキュリティ]
[システムの保護]欄にある「Windows hosts ファイルへの書き込みを防ぐ」のチェックマークを外す
[OK]


<参考>
Avira で hosts ファイルのブロックを解除

ローカル環境(XAMPP)でサブドメインを使用 | Web Design Leaves


<内容>
管理者権限で編集しようとしてもできず、所有者権限の変更もできず、以下のようなエラーが出たらウィルス対策ソフトが原因かも

「このフォルダーを変更するには、SYSTEMからアクセス許可を得る必要があります。」


通常の編集方法は以下
Windows:Windows7でのhostsファイルの編集方法 | ARTICLE | goma

困った

テスト環境でデータベースからの表示に成功したのでサーバ環境でテストしてみたところ
エラーてんこもり^^;

ローカルテストでは出なかったのになんでかなと思ったら
ini_set( 'error_reporting', E_ALL ); 設定したら出たわ
警告表示レベルが低かったのね・・・

Deprecated: Function ereg() is deprecated

ereg は非推奨になったので変更すれという事か・・・

という訳でereg()はpreg_match()に、
ereg_replace()はpreg_replace()に置き換え

Fatal error: Call to undefined function password_hash()

パスワードハッシュ関連の関数はPHP5.5から
それ以前は定義されてないのでエラー

ライブラリがあるようなのでなんとかなる

Strict Standards: Non-static method htmltemplate::removeTag() should not be called statically 

staticではないクラスを静的コールしたら出るエラー
動的コールに直すかstaticを設定


phpのバージョン上げられれば良いんだけど
他のプログラムも書き換えないと動かなくなりそうやしなあ・・・

やっててよかったajax

今は投稿内容をapiで吸い出したjsonデータに変換してajaxで検索してたんだけど
これ、like検索したほうが精度高いしいろいろ設定楽そう

select * from bbs where comment like '検索語'

まあどのみちdb化したらjsから読めなくなるので改造は必須だけど

$(function() {
 $.ajax({
  url: api.php,
  success: function() {
    $.getJSON(data.json,
       function(data) {
        検索+表示処理
       })})}

こんな感じで書いてたけど

$.getJSON(api.php,
    function(data) {
        表示処理
    })

これで済みそう


まあpotiboard.php本体に組み込んだ方が話早いんだろうけど
処理を軽くするって意図があるから使える者は使うというアレ

暗黙の型変換はそんなに遅いのか

前に出た話題
暗黙の方変換の速度比較

//繰り返し
$r = 1000000 ;
//時間計測1
$start = microtime(true);
for($i = 0; $i < $r; $i++) {
	$d = "0";
	$d ++ ;
}
$end = microtime(true);
echo "処理時間1:" . ($end - $start) . "秒
"; //時間計測2 $start = microtime(true); for($i = 0; $i < $r; $i++) { $d ='0'; $d = (integer)$d; $d ++ ; } $end = microtime(true); echo "処理時間2:" . ($end - $start) . "秒
"; //時間計測3 $start = microtime(true); for($i = 0; $i < $r; $i++) { $d =0; $d ++ ; } $end = microtime(true); echo "処理時間3:" . ($end - $start) . "秒
";

1=約0.13秒
2=約0.16秒
3=約0.10秒


あれ、そんな違わない・・・
というかいちいち型変換してた方が遅い・・・?


という訳で追試

//繰り返し
$r = 1000000 ;
//時間計測1
$start = microtime(true);
for($i = 0; $i < $r; $i++) {
	$d = "0";
	if($d == 0){$d ++ ;}
}
$end = microtime(true);
echo "処理時間1:" . ($end - $start) . "秒
"; //時間計測2 $start = microtime(true); for($i = 0; $i < $r; $i++) { $d ='0'; $d = (integer)$d; if($d == 0){$d ++ ;} } $end = microtime(true); echo "処理時間2:" . ($end - $start) . "秒
"; //時間計測3 $start = microtime(true); for($i = 0; $i < $r; $i++) { $d =0; if($d == 0){$d ++ ;} } $end = microtime(true); echo "処理時間3:" . ($end - $start) . "秒
";

1=約0.20秒
2=約0.18秒
3=約0.10秒


比較が入ると違うなー
そして安定の無変換
最初から数字指定しとけと


でもSQliteのデータは数字指定でも文字で記録されてるとか、potiboardのconfigは定数の指定が数字でも文字(括弧付き)になってるとか

やってて良かったSQLite

範囲呼び出しの話
SQliteには BETWEEN というそのままな呼び出しコマンドがあった

select * from bbs where id BETWEEN 1 and 20

別にwhereで囲んでも結果は同じなんだけど、どっちが早いんだろ?

select * from bbs where id > 1 and id < 20


親記事の数を数える話
もとはtree.logの行数をcount()してたけど
sqlの場合、count(*)を使う

select count(*) from bbs where parent > 0

値の取得はforeachじゃなくて、1行取得のfetchを使うらしい

$query->fetchColumn();


レスコメント表示の話
DSP_RESで一覧画面のレス表示件数、DSP_RESIMGでレス内の画像表示件数が指示されてるので
レス取得のクエリに limitをつける

select * from bbs where tree == $res limit DSP_RES

ただ、クエリ内で定数が使えなかったので変数に格納して呼び出す


画像表示件数は画像をカウントして指定数になるとbreakする

$c_img = (DSP_RES)? 0:null;
if($filename) $c_img ++
if($c_img >= DSP_RES)break;

という訳で三項演算子
ifより少しばかり遅いけど記載が短くなるから好き


って三項演算子の速度比較みてたら

三項演算子よりも暗黙の型変換のほうが、速度低下が大きい

なんですとー!!

$a = '0';
$a ++

こういう記載よくやるけど駄目なんか

POTI-boardのDB化2

SQLiteからデータを呼び出す場合
1.まとめて呼び出して処理しながら配列に入れる
2.その都度必要なデータを呼び出して処理する


どっちの方が早いのかなと
まあ、大量データを扱うなら、PHPで配列操作するよりsqlで個々に呼び出した方が早い気がする


という事で
呼び出し1

<?php
try {
	//db接続
	$db = new PDO('sqlite:log/boardlog.db' );
	
	//ページ数
	$p=0;
	//1ページの記事数
	$page_def = 20;
	//現在ページの記事範囲
	$page_r = $p * $page_def ;
	//ページおわり
	$page_e = $page_r + $page_def ;
	
	//計測開始
	$start = microtime(true);
	//100回繰り返す
	for($i = 0; $i < 100; $i++) {
	//dql呼び出し文
	$sql = "select * from oekakibbs where invz == 0 order by parent asc, tree desc, id asc";
	
	//メインデータ変数
	$dat = array();
	//データ分割
	foreach ($db->query($sql) as $data) {
		//親データ取得
		$parent = $data['parent'];
		//ページおわり
		if($parent > $page_e){ break;}
		//現在ページ迄処理を飛ばす
		if ($parent == 0 ){ $comm_res[] = $data ; continue; }
		if ($parent <= $page_r ){continue ;}
		//親データ格納
		$dat['oya'][] = $data ;
		
		//親記事番号
		$oya = $parent -1;
		//子データ格納
		foreach ($comm_res as $res) {
			if($res['tree'] != $data['tree']){continue;}
			$dat['oya'][$oya][] = $res ; 
		}
	}
	}
	
	$end = microtime(true);
echo "処理時間:" . ($end - $start) . "秒";

	//db切断
    $db = null;
  } catch (PDOException $e) {
    echo "<p>エラー:", $e->getMessage(), "</p>";
}

約5.3病でした


その2

<?php

try {
	//db接続
	$db = new PDO('sqlite:log/boardlog.db' );
	
	
	//ページ数
	$p=0;
	//1ページの記事数
	$page_def = 20;
	//現在ページの記事範囲
	$page_r = $p * $page_def ;
	//ページおわり
	$page_e = $page_r + $page_def ;
	
	
	//計測開始
	$start = microtime(true);
	
	for($i = 0; $i < 100; $i++) {
	//dql呼び出し文
	$sql = "select * from oekakibbs where invz == 0 and parent > 0 order by parent asc";
	
	//メインデータ変数
	$dat = array();
	//データ分割
	foreach ($db->query($sql) as $data) {
	
		//親データ取得
		$parent = $data['parent'];
		//ページおわり
		if($parent > $page_e){ break;}
		//現在ページ迄処理を飛ばす
		if ($parent <= $page_r ){continue ;}
		
		$dat['oya'][] = $data ;
		
		//親記事
		$oya = $parent -1;
		
		$tree_res = $data['tree']; 
		
		$sql2 = "select * from oekakibbs where invz == 0 and tree == $tree_res order by id desc";
		
		foreach ($db->query($sql2) as $res) {
			$dat['oya'][$oya][] = $res ; 
		}
	}
	}
	$end = microtime(true);
echo "処理時間:" . ($end - $start) . "秒";

	//db切断
    $db = null;
  } catch (PDOException $e) {
    echo "<p>エラー:", $e->getMessage(), "</p>";
}

約0.4秒!!


全然違うね〜
やっぱり毎度sqlで呼び出した方が早い


よく考えたらwhere で parent > 開始NO and parent <=終了no とした方が早いか