投稿

11月, 2017の投稿を表示しています

PHP の PDO で debugDumpParams の出力をファイルなどに保存

SQL の実行結果を確認しようにも bindValue や bindParam を使っていると、実行内容を取得できない debugDumpParams を利用すると SQL へ渡った情報を標準出力に吐き出すことが出来る その内容をファイルなどに保存する $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {          $stmt -> debugDumpParams ();     } finally {          // ob_end_flush();          ob_end_clean (); // callback からの戻り値を出力しない     } } function callback ( $buffer ){      file_put_contents ( 'sqlresult.txt' , $buffer );      return $buffer ; } 通常は execute() の直後に debugDumpParams() を呼び出せば、標準出力に吐き出されますが ob_start(関数名) で、内容をコールバック関数へ渡しています。今回は 標準出力へ表示する必要が無いので、ob_end_clean() を用いていますが、callback の戻り値を出力する場合は ob_end_flush() を利用します。 $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {          $stmt -> debugDumpParams ();     } finally {          ob_end_flush (); // callback からの戻り値を出力する          // ob_end_clean();     } } function callback ( $buffer ){      file_put_contents ( 'sqlresult.txt' , $buffer );      return $buffer ; //

PHP の call_user_func_array + bind_param で参照渡し

call_user_func_array で mysqli の bind_param を呼び出しをまとめつつ、汎用性をもたせたい bind_param は 第2引き数以降が参照渡しでなければならないので、渡す配列を作成する段階で参照渡しを入れておく必要があるが、毎回面倒なので配列を再生成することで落ち着く // 警告が出るパターン // Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in $params = array ( 'i' , 2 ); call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); // 引き数を意識するパターン $id = 2 ; $params = array (); $params [] = 'i' ; $params [] = & $id ; // パラメータは参照渡し call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); // お手軽なパターン $params = array ( 'i' , 2 ); for ( $i = 1 ; $i < count ( $params ); $i ++){ // 2番目以降を参照渡しに書き換え      $params [ $i ] = & $params [ $i ]; } call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); ここで $params を作成する時に foreach($data as $key => $value){ $params[] = &$value } の様に行ってはいけません 上記は $value 参照を代入することになり、次のループで $value が書き換えられ、結果的に配列の最後の値を全てが参照することになります for

Nintendo Switch を Amazon から3時間くらいで購入したメモ

イメージ
Nintendo Switch を転売屋の餌食にならず Amazon から3時間くらいで購入したメモ ただし、サンタさんの手柄 転売屋対策なのか Amazonでは switch 本体のみよりも、ポーチやダウンロード版との組み合わせの方が、入荷が多いような気がします ポーチやマリオオデッセイ等、いずれ購入する予定があれば、それらの抱合せ商品を狙うと、より容易に購入できると思われます ちなみに、switch本体に30GB程度のメモリ空き領域があるので、いくつかのダウンロード版を利用するのであれば SDカードは無くても利用可能です 下準備 スマホに Twitter アプリを入れて、通知の設定をする Twitter の switch販売速報bot 等をフォローして、モバイル通知をオンにする Amazonで switchの商品構成と価格をチェック Amazon で 1-Click注文 を有効 にする 購入編 購入したい商品のページを開いておく(候補が複数あればそれらも) スマホの Twitter アプリでプッシュ通知がくる 【重要】ここで、商品が何かをTwitter画面で確認するのは時間の無駄です 購入したい商品のページをリロード、 金額とAmazonが販売 していることを確認 1-Click注文 → NG or 注文完了 あとは、2~4 を繰り返す 本体の商品構成 本体のみ 本体 + ポーチ等 本体 + ソフト

Firefox 57 Quantum アップデート開始

イメージ
新Firefox Quantum 登場 旧形式のアドオンは利用不能(代替えを探す機能あり) メモリ使用量は、そんなに減ってない(と思う) 進む・戻る がもたつく スクリーンショット機能を標準で搭載 Firefox Sync は継続利用可能 Shockwave Flash はプラグインに残っている 先日、久々にOpera(blink)を試してみましたが、昔のサクサク感がまったくなくて非常に残念だったので、Quantumには頑張って欲しいところです レンダリング速度と体感速度は違うって事を Operaは知っていたはずだけど...

Python ディクショナリの keys や values の順序

Python のディクショナリを keys() や values() で独立して読み取った場合、取得される順序が同じかどうか 「python keys values same order」というキーワードで質問が散見され、各バージョン( 2系 , 3系 )共にその間ディクショナリに手が加えられなければ、オーダーが保持されるだそうです SQL の INSERT 文なんかに便利に使えたりする ちなみに、配列をカンマ区切りの文字列で返すには下記のようにすると簡単です s = ', ' .join(data.keys())

Python コメント coding:utf-8 の記述位置

Python + apache で UTF8の情報を扱っていたら SyntaxError: Non-ASCII character のエラーが多発、どうも # -*- coding: utf-8 -*- の記述位置が悪かったようで 途中に記述していたコメントを移動させて #!~/python # -*- coding: utf-8 -*- pythonのパスが先頭、次の行にcodingを記述したら動作するようになった マジックコメントって必要な場所より上にあればいいと思っていた・・・

Python + MySql で execute paramでテーブル名は渡せない

Python + MySql で execute paramでテーブル名は 渡せない そうです cur.execute( "DELETE FROM %s WHERE ( %s = %s );" , ( "myTable" , "myKey" , 10 )) # NG cur.execute( "DELETE FROM %s WHERE ( %s = %s );" % ( "myTable" , "myKey" , 10 )) # OK

Firefox アドオンの Stylish がついにアップデートされて Chromeと同じ仕様に

イメージ
Firefox アドオンの Stylish がついにアップデートされて Chromeと同じ仕様になった 閲覧サイトの送信問題とかいろいろあるわけですが 少し前から、Firefox版も URL同期が使えなくなり不便になっていましたが、結局 Chromeと不完全にもjson形式のエクスポートファイルが共通になりました で、不完全なのは Chromeでエクスポートしたファイルに ANSI以外を含む場合、Firefox側でインポートすると文字化けします また、Firefoxでエクスポートした際にファイル名が謎なのと、改行が殆ど無いエクスポートファイルになり、まだまだ不完全な感じが強いです

Python で可変長引数を関数の戻り値で返す

Python で可変長引数を関数の戻り値で返す def db_connect_config ():      return { 'user' : 'root' , 'password' : 'passwd' , 'host' : 'localhost' , 'database' : 'myDB' } # ::: conn = mysql.connector.connect(**db_connect_config()) 利用側で **

Python で日本語を含む MySQL の select 結果を json で出力

Python で日本語を含む MySQL の select 結果を json で出力する最小限のコードをメモ Python2.7系 #!~\python2.7 # -*- coding: utf-8 -*- # utf8 output import sys import codecs sys.stdout = codecs.getwriter( 'utf_8' )(sys.stdout) # header print ( "Content-type: text/plain; charset=utf-8" ) print ( "" ) # mysql import mysql.connector import json conn = mysql.connector.connect( user = 'root' , password = 'passwd' , host = 'localhost' , database = 'myDB' ) cur = conn.cursor( dictionary = True ) try :     cur.execute( "select * from myTable;" )     rows = cur.fetchall()      print (json.dumps(rows, ensure_ascii = False )) finally :     cur.close()     conn.close() sys.stdout = codecs.getwriter('utf_8')(sys.stdout) で出力を UTF8に cursor で dictionary=True を指定することで、fetch内容に列名が入ってくるので jsonで利用しやすくなります MySQLdb を利用している場合は、cursor(MySQLdb.cursors.DictCursor) json.dumps で ensure_ascii=False を入れないと、"\u4e0d\u660e" みたいに ASCII以外を Un

Python の mysql.connector.connect でカラム名を取得

Python の mysql.connector.connect でカラム名を取得 cursor の引き数に dictionary=True を入れる cur = conn.cursor(dictionary=True) が、カラムの並びが???→宿題

Visutl Studio Code で Python だけタブを4スペースにする

Visutl Studio Code のタブ動作をデフォルトのスペースからタブに変更しているが、Pythonは4スペースにしたい Ctrl + Shift + P → Preferences: Configure language specific settings Python(下の方)を選択するか入力 表示されるpython設定に "editor.insertSpaces": true と "editor.tabSize": 4 を追加 {      "workbench.welcome.enabled" : false ,      "files.autoSave" : "off" ,      "editor.insertSpaces" : false ,      "typescript.check.npmIsInstalled" : false ,      "python.linting.enabledWithoutWorkspace" : false ,      "editor.renderWhitespace" : "boundary" ,      "[python]" : {          "editor.insertSpaces" : true ,          "editor.tabSize" : 4     } }

UniServer(Uniform Server) Zero で Python を動かす

簡単に Apache + PHP + MySQL の環境が作れる UniServer Zero で Python を動かしたメモ Pythonを ダウンロード + インストール 必要によって python.exe ディレクトリへパスを通す(cgiとしては通す必要ないです) インストールディレクトリ\PythonXX\ やら \PythonXX\Scripts に通しておくと便利です UniServerZ\core\apache2\conf\httpd.conf を開く py拡張子でスクリプト動作させる場合 httpd.conf の AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi .py wwwフォルダでも cgi を動作させる場合 httpd.conf の <Directory "{$US_ROOTF_WWW}"> を探して Options Indexes Includes の下に Options +ExecCGI を書き加える test.py なんかを作って置いてみる※pythonのパスはそれぞれで #!C:\Python27\python.exe print("Content-type: text/plain") print("") print("Hello Python World!")

Amazon Echo 日本発売(米国での発売時期)

Amazon Echo が日本国内でも発売されたが、本国での発売時期は歴史が古いだけあってかなり前だったりする まぁ、ハードウェアよりソフトウェアが要なので、それほど気にしなくていいのかもしれないけど、サポート終了の時期が気になりますな 国内で発売された Amazon Echo は、デザインから米国の Echo 2 と思われるが、色の数などが本国と違っている Amazon Echo 米国発売時期 タイプ 米国発売 Echo Dot 2015/06/23 Echo (2nd gen) 2017/10/31 Echo Plus 2017/10/31 ちなみに後発の Google Home は タイプ 米国発売 Google Home 2016/11/04 Google Home Mini 2017/10/19

Raspberry Pi OS書き込みメモ(SD初期化, SSH有効化, ログイン, ホスト名)

イメージ
Raspberry Pi の SDを初期化して、再セットアップした時のメモ Raspberry Pi で使用していた SD の初期化 → Raspberry Pi 用のSDカードを初期化する方法 Raspbian OS イメージ  ダウンロード OSイメージの書き込み → Win32 Disk Imager 初期でSSH有効のための空ファイル設置場所( /boot/ssh ) ログイン情報 --> ホスト raspberrypi.local ユーザー pi パスワード raspberry コンフィグ $ sudo raspi-config

Dialogflow + Actions on Google で作成したアプリが「Sorry, this action is not available in simulation」

イメージ
Dialogflow + Actions on Google で作成したアプリがいつの間にか呼び出せなくなっていて、エミュレータから呼び出しても「Sorry, this action is not available in simulation」と表示されて起動しない エミュレータ画面から、CHANGE VERSION を押して、バージョンを更新する

bit.ly の spam報告先

url短縮サービス bitly(bit.ly) を利用した spam が多い事と、spamに対して全く対応していないのでは?と思われるため、うちでは bit.ly のリンクを含む == spam 扱いで完了していますが 一応、 bit.ly 利用 spam リンクの報告先 メールで support@bitly.com へ、件名に spam を含め、本文に受け取った状況と問題のリンクを記入しろ だそうです↓ https://support.bitly.com/hc/en-us/articles/231247908-I-ve-found-a-bitlink-that-directs-to-spam-what-should-I-do-