sidewalkcafe blog

日々是好日

神戸とか豚まん放浪記2017

さて、前の記事から随分時間が経ったので、備忘録として最近のお店とか覚えてる範囲で記入してみる。

sidewalkcafe.hatenablog.com
↑過去記事


ついでだし、個人的トップ10ランキング。

  1. 新開地 「春陽軒」
  2. 中華街 「老祥記」
  3. 元町商店街 「老祥紀
  4. 湊川 「とんとん餃子」
  5. 板宿 「餃子弁慶」
  6. 三宮 「太平閣」
  7. 王子公園 「ぶたまんや」
  8. 元町 「四興楼」
  9. 平野 「中央ベーカリー」
  10. 三宮・なんば他「551蓬莱
  11. 垂水 蒸龍
  12. 元町・三宮 「三宮一貫楼」

神戸市内

不明・閉店

jquery.xdomainajax.jsが動かなくなった

jsでクロスドメインのHTMLスクレイピングが使えるようになるjquery.xdomainajax.jsだけど、
しばらく前から使えないようになった。

結論

jquery.xdomainajax.jsの中身を以下のように変える

//古いデータ 18行目くらい
YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?',
query = 'select * from html where url="{URL}" and xpath="*"';
//新しいデータ 18行目くらい
YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys',
query = 'select * from htmlstring where url="{URL}" and xpath="*"';

解説

jquery.xdomainajax.jsがクロスドメインの壁を超えるために、Yahoo!YQL というサービスを使ってたのだけど、それが使えなくなったのでURLを書き換えることで使えるようになったみたい。
ただ、返ってくるデータが生テキストからタグエスケープ済みのテキストデータになってるので、このままではセレクタの呼び出しや検索ができない。なので読み出し側も修正が必要。

呼び出し側の修正

//古いデータ resspnseTextをそのままjQueryオブジェクトに変換すればHTMLタグ化できた
$.ajax({  
    url: 'http://yahoo.co.jp/',
    type: 'GET',  
    success: function(data) {  
        content = $(data.responseText);
        $('body').append(content);
    }      
});  
//新しいデータ resspnseTextの中に<result>があり、その中にエスケープされたテキストが入ってるので
//オブジェクト化→アンエスケープ→オブジェクト化という手順を踏んでみた
$.ajax({  
    url: 'http://yahoo.co.jp/',
    type: 'GET',  
    success: function(data) {  
        content = $($(data.responseText).text());
        $('body').append(content);
    }      
});  

もっと良い方法があったら教えて下さい。

正規表現チェックサイト

正規表現チェック
RegexPlanet - Online Regular Expression (Regex) Testing and Cookbook for: Go, Haskell, Java, JavaScript, .Net, Perl, PHP, Python, Ruby, Tcl & XRegExp

色んなスクリプトでのチェツクが出来るのでオススメ

管理ユーザがいなくなったので何もできない(Mac OS 10.6)

メインユーザの管理者権限が外れて通常ユーザーになってしまったため、諸々の操作(環境設定変更、インストール等)ができなくなった。
なんか他でも同様の症状が出てるみたい。で、対処法を見るがなかなか上手く行かなかった。
がちゃがちゃやって上手くいった時の対応。

<参考>
Macで管理者権限がなくなってしまった時の対処方法: おたくマニアのココロ

A-Liaison BLOG: パスワードが無くなってログインできない Mac に無理矢理ログインする方法

対処法:通常ユーザに管理者権限を与える

基本的には上のリンクの通りにすれば良いんだけど、「com.apple.DirectryServices.plist」が読み込めなかったので代わりに「com.apple.DirectoryServicesLocal.plist」を読み込んで事なきを得た。

シングルユーザーモードMacを起動

再起動+起動時に「コマンド(リンゴマーク)」+「S」キーでシングルユーザーモードを立ち上げる
真っ黒なコンソールっぽい画面になったらOK

ハードディスクを編集可能にする

/sbin/mount -uw /

と打ち込んでハードディスクを再マウント、編集可能にする

/sbin/fsck -fy

と打ち込んでディスクチェックをしても良いのだけど割愛。調子が悪ければ要チェック。

ディレクトリサービスを読み込み、起動

launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServicesLocal.plist

「DirectoryServices」がnot fileになるので「DirectoryServicesLocal」を読み込み。

dscl localonly

で起動。頭が「>」に変われば起動成功

ディレクトリを移動

cd /Local/Default/Groups/

目的のディレクトリ階層まで「cd」で移動

管理権限付与

append admin GroupMembership 'username'

ユーザーに管理者権限を与えるコマンド。
'username'の部分に自分のユーザー名を入れる

ちなみに、うちのキーボードがおかしいのか配列が変わってたので、「'」の文字は「*(け)」の位置になってた(シフトキー不要)

mac mini(Mac OS 10.6 Snow Leopard Server)の初期設定トラブル

手持ちのMacが壊れたので、周辺機器が使えるOS 10.6以下の中古Macを探しにソフマップへ。
ちょうどあったMac miniを購入。

サーバタイプは不人気だという事で少し安かった。
初期設定が特殊なんだろうか・・・、以下と同じ症状がでた。

mac mini 中古で購入したが「ようこそ画面」の「続ける」ボタンを押せない
https://discussionsjapan.apple.com/thread/10123941

https://discussionsjapan.apple.com/servlet/JiveServlet/showImage/2-100738175-16052/youkoso.jpeg
(上記フォーラムより転載)


・原因:システム時刻が初期化されているため地域設定が出ない

・対処方法:ターミナルからシステム時刻を変更

1.USBのDVDドライブを接続してインストールメディアから起動
 (Cキーを押しながら電源を立ち上げる)
2.メニューが表示されるまで進めて、上メニューの「ユーティリティ」から「ターミナル」を選ぶ
3.ターミナルが起動したらコマンド画面から時刻の変更をする。
(2016年1月1日12:00の場合は以下のように入力)
 date 010112002016
4.通常再起動

 OSはインストールされているので、そのままインストールを続けなくても大丈夫。
不具合があった場合は再インストールする。
システム時刻の確認は、ターミナルから「date」と入力すれば確認できる。
ターミナルで間違えた時刻を設定しても、地域を選べば自動的に現在時刻に変更される。

BBQの代わりにプロキシチェック(PHP)

2chのBBQはゴタゴタがあった余波で外部参照ができなくなった。
便利だったのになあ・・・


使えなくなったのは仕方ないけど荒らしは待ってくれない
他のブラックリストを使って対処するしかない。
なのでそれに対応したコードを考えてみた。
(まあ、今までBBQだったアドレスを他のDNSBLのアドレスに変えれば良いだけなんだけどw)

<html>
<head>
  <title>DNSBLチェック</title>
</head>
<body>
  <form action="" method="get">
    テスト用IP<input type="text" value="" name="ip" /><br />
    <input type="text" value="" name="comment" />
    <input type="submit" value="コメント送信" />
  </form>
<?php
  $ip = '';

// IP取得
  if(isset($_GET['ip']) && $_GET['ip']!=null && filter_var($_GET['ip'],FILTER_VALIDATE_IP)){
    $ip=$_GET['ip'];
  }else{
    $ip = $_SERVER['REMOTE_ADDR'];
  }

// メインルーチン
  if(isset($_GET['comment']) && $_GET['comment']!=null){
    if(dnsbllookup($ip)){
      echo('ERROR! プロキシ経由のコメントは出来ません。<br>');
      echo('IP='.$ip);
      exit();
    }else{
      echo(htmlspecialchars($_GET['comment']).'<br>');
      echo('IP='.$ip);
      exit();
    }
  }

// DNSBLチェック
function dnsbllookup($ip){
  $dnsbl_lookup=array("all.rbl.jp",
    "bl.spamcop.net",
    "zen.spamhaus.org");
  if($ip){
    $reverse_ip=implode(".",array_reverse(explode(".",$ip)));
    foreach($dnsbl_lookup as $host){
      if(checkdnsrr($reverse_ip.".".$host.".","A")){
        return true;
      }
    }
  }
    return false;
  }
?>

$dnsbl_lookupに配列でDNSBLのアドレスを渡す。
有効なDNSBLDNSBL Lookupとかで探すと良い。
適当に使ってみたけど、抜けてるIPが多いので複数設定する必要がある様子。
とりあえず設定してある3つは2chで拾ってきたもの。

flipsnapで写真をランダム表示する

ネイティブJsでも使える

スマホでスワイプ操作が出来る便利で簡単なjQueryプラグイン「flipsnap」だけど
flipsnap.jsというのを書いた - Webtech Walker
jQuery必須ではなく、ソースはネイティブjsで書かれてたので普通のjavascriptで動いた(@version 0.6.2で動作確認)

そこから、ランダムに無限表示できるような実装を考えてた

DOM読み込み寺にflipnap適応

window.onloadではなくDOMContentLoadedを使ってます

window.addEventListener("DOMContentLoaded", function(){
  $flipsnap = Flipsnap("#demo");
}, false);

fstouchendイベントから現在地を取得

  $flipsnap.element.addEventListener('fstouchend', function(ev) {
    $newPT =ev.newPoint;
  }, false);
  • ボタン移動をする場合は、newPointの取得が出来ないので直接$newPTの値を加算・減算する

一番端に来た時に新しい写真を追加

  • 最大ブロック数の記録用変数($maxPT)を用意しておく
  • 現実的には通信ラグがあるので端から2〜3番目に来た時に追加読み込みするのが良いと思う
    if($newPT >= $maxPT){
      $maxPT ++ ;
      pushhtml();
    }

//写真追加
function pushhtml(){
  //データ(配列)の数を計算
  $dataleng = $photodata.length-1;
  //配列の中からランダムなidを取得
  $photoid = Math.round( Math.random()*$dataleng);
  //追加するPタグノードを作成
  var pNode = document.createElement('p');
  //imageオブジェクトを作成
  var image = new Image();
  //画像URLを指定
  image.src = $photodata[$photoid];
  //ノードに画像を追加
  pNode.appendChild(image);
  //親タグにノードを追加
  document.getElementById('demo').appendChild(pNode);
  //リフレッシュで全体の幅を再取得
  $flipsnap.refresh();
}
  • image.onloadで画像を読み込んでから配置する事も可能だけど、その場合はrefreshのタイミングも読み込み後に指定しないと、端まで移動ができなくなる


まあこんなもんかな