一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります

2018年6月18日月曜日

Swift3,Swift4で乗算のループ

Swift3以上?Swift4でObjective-Cで書いたfor文1000まで10倍の乗算ループを書こうとしたら
for( int i=1; i<1000; i*=10 ) {
    NSLog(@"Hello %d",i);
}
予想以上に面倒で困った、詳細は不明だが、こうかけば期待通りに動いた
参照先https://code-examples.net/ja/q/2636c3a
// 乗算ループの書き方
let num = 1000
for i in sequence(first: 1, next: { $0 * 10 }).prefix(while: { num/$0 > 0 }) {
    print(i)
}
while文が残っていて本当によかったと感じる、Swift4以降でもうちょっと簡単な構文を期待したい。
var i = 1

while( i <= 1000 ) {
    print(i)
    i *= 10
}

2018年4月24日火曜日

ComposerでPEAR

PEARのライブラリcache_liteをComposerでインストールしたかったがうまくいかなかった。
configでHTTP接続を許可し、pearの取得先をrepositoriesで指定。
pear-pear.php.netの指定で
こちらのサイトで
pearのライブラリの名前とバージョンを調べて追記してupdateしたらうまくいった。

composer.json
{    
    "name": "vendor/myapp",
    "description": "プロジェクトの説明。",
    "authors": [
        {
            "name": "myname",
            "email": "your@email.here"
        }
    ],
    
    "config": {
        "secure-http": false
    },
    
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.php.net/"
        }
    ],
    
    "require": {
        "smarty/smarty": "~3.1",
        "pear-pear.php.net/cache_lite": "1.8.2"
    }
}
Composer2だとpearは取れないっぽいです。

PDOで表の名前にはプレースホルダーが使えない

ダメなコード

    // PDOによる接続
    $pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8','test','password');
    // DBエラーで例外を発生させる
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // プリペアステートメントのエスケープ設定
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
    
    $stmh = $pdo->prepare("select * from :table");
    
    $stmh->bindValue(":table", "mytable");
    
    $stmh->execute();

show tableを実行して得た結果からテーブルを選ばせてその情報を取得しようとしたがSyntaxエラーとなる。

FROM句にプレースホルダーを使うことは少ないが、これはできないらしい。
自分で無害化するか、表名自体を表に出さないような作りにする必要がある。

参考
https://stackoverflow.com/questions/15182910/php-pdo-bind-table-name

2018年4月19日木曜日

adb rootできない時



特定のAndroidエミュレーターでadb rootができない。
中を覗けるのがエミュレータの良いところなのになぜかと調べたらstackoverflowには答えがあった。
To enable root access, use an emulator image like
rootアクセス可能なエミュレータイメージは
    Google APIs Intel x86 Atom System Image
Not
コレジャナイ
Google Play Intel x86 Atom System Image
https://stackoverflow.com/questions/43923996/adb-root-is-not-working-on-emulator
ということだった。
エミュレータ作成時のディフォルトがrootできないイメージが選ばれてしまうのでそうではないものを選べば良いようだ。