イベント案内
掲載中の案内はありません
最近のブログ記事

    <button>タグのtype属性のデフォルトは「submit」。。。(≡д≡) ガーン

    submit属性を持つ要素が1つもないフォームを作成していて、動作確認中にEnterキーを押したら勝手にSubmit・・・
    誰も頼んでないのに・・・

    フォームに<input>タグが1つだけの場合に、Enterキーで勝手にsubmitする、というのは結構聞く話だったし、個人的に「type=submit」はキライなので、私の作るページにはだいたいsubmit属性を持つ<input>要素がない。

    「送信ボタン」は、だいたい<input type=button>で作って、submitはJavaScriptでチェック後、というのが多いんだけども、今回は事の成り行きでよそからコピペしてきていた。
    class属性しかないシンプルなもので、<button>タグってくらいだから、type属性なんぞそもそも要らないだろうと、まあ完全スルーしてた。

    それで、冒頭の現象・・・

    <button>タグなんだから、普通にボタンらしくしてろよって話。
    余計なことすんだから、もう。。。


    mbstring.encoding_translation 邪魔なだけ、と思うのは私だけなのか?

    phpの設定で、デフォルトでは「Off」になっている、「mbstring.encoding_translation」。

    マニュアルには、

     

    入力される HTTP クエリに関して、 文字エンコーディング検出および内部文字エンコーディングへの変換を行う 透過的な文字エンコーディングフィルタを有効にします。

     

    と、いかにも便利っぽいことが書いてあるけど、まあだいたいの場面において、『自動的に』という処理は罠であることが多い。

     

    DBはUTF-8、スクリプトもUTF-8で、サイトのHTMLがShift-JISという、少し特殊な環境のシステムでの改訂作業でのこと。

    このシステムが稼働するサーバーは、内部文字エンコードがEUC-JPになっていた。

    最近では珍しいけれど、DBの文字コードとそれを処理・表現するスクリプトの文字コードに齟齬がなければ、基本的に文字化けが起こることはない。HTMLがShift-JISであっても、出力時にShift-JISにコンバートしてやればいいだけだ。内部エンコードの設定はそのままでも全然大丈夫、、、のはず。。。

     

    ところが、このシステムが稼働するサーバーのphp.iniの「mbstring.encoding_translation」がONになっていた。

     

    この場合、内部エンコードがEUC-JPなので、送信されたデータはすべてEUC-JPにコンバートされてしまう。

    うぜぇ・・・

    PHPには、スクリプト上で文字エンコードの設定を行う関数がいろいろと用意されていて、内部文字エンコードも、スクリプト上で変更することが可能だけども、このencoding_translationというやつ、設定可能箇所が「PHP_INI_PERDIR」なので、スクリプト上での変更ができない。

    それじゃあ、ということで、mb_internal_encoding()関数で、内部エンコードをUTF-8にしてみたが、全然効き目がない。

    どうやら、スクリプトで設定が変更される前に、「mbstring.endocing_translation」によってPOST(またはGET)されたデータのコンバート処理が行われてしまうらしい。

    うぜぇぞ・・・

    当のサーバーはといえば、php.iniの設定変更はもちろんのこと、.htaccessによる変更も許可されていないので、「mbstring.encoding_translation」の設定を変更する手段がない。

     

    こうなるともう、POSTデータとGETデータを片っ端からコンバートするしかない・・・

     

    [php]

    $system_encoding    = ‘UTF-8’;

    $encoding_translation    = ini_get(‘mbstring.encoding_translation’);
    $internal_encoding        = ini_get(‘mbstring.internal_encoding’);

    $aryData = GetRequestData();  //
    foreach($aryData as $qkey => $qval)
    {
    if( $encoding_translation == 1 ){
    $qval = mb_convert_encoding($qval, $system_encoding, $internal_encoding);
    }
    $$qkey    = $qval;
    }

    [/php]

     

    このレンタルサーバー、システムはEUC-JPで作りなさい、といってるようなもんだ。

    内部エンコードがEUC-JPなのはいい。一昔前に借りたサーバーはだいたいDBも内部エンコードもEUCだし。

    でも「mbstring.encoding_translation=On」はよろしくない。スクリプトでハンドリングできない項目で、それを変更する手段を提供してないくせによぉ。。。

     

    あー、愚痴った愚痴った。


    覚え書き:Androidアプリのビルドエラーと対処法

    Unparsed aapt error(s)! Check the console for output.

    このエラーは、単純にエラーログから消す。

     

    Error generating final archive: Debug Certificate expired on

    debug.keystoreファイルの有効期限切れが原因。

    「設定」→「Android」→「ビルド」で、debug.keystoreファイルの場所を確認して、当ファイルを削除。

    ビルド時に自動的に再作成される。

     

    Should explicitly set android:allowBackup to true or false (it’s true by default, and that can have some security implications for the application’s data)

    メッセージそのまんま。

    AndroidManifest.xmlのapplicationセクションの属性に「allowBackup」を追加して値を設定。

     

     


    Android SDK Toolsのアップデート時の”A folder failed to be moved.” エラー対処

    Android SDK Toolsをアップデートしろ、というので、SDKマネージャを起動してアップデートを実行すると、こんなエラーがでた。

     

    “A folder failed to be moved. On Windows this typically means that a program is using that folder (for example Windows Explorer or your anti-virus software.) Please momentarily deactivate your anti-virus software or close any running programs that may be accessing the directory ‘(Android SDKのインストールフォルダ)’. When ready, press YES to try again.”

     

    そりゃそうだわな、自分自身の起動しているフォルダのリネームはどう考えてもできない。

    あーもう、こんなのばっか・・・(ToT)

    ひとまずネットで検索。でるわでるわ(笑)

    割とどこのサイトも同じ対処法が書かれていた。

     

    1.再起動しなはれ。

    2.toolsフォルダをコピーして、そっちの「android.bat」を起動しなはれ。

    3.ウィルスソフトをOFFにしてみなはれ。

     

    だいたいはそれで解消するらしい。どのサイトもそれしか書いてない。

    でも私はダメでした。。。

     

    もう仕方がないので、日本語サイト以外を検索。こっちも出る出るw。

     

    その中に、上記と違う対処法を紹介したサイトがありました。

    http://stackoverflow.com/questions/8555131/updating-android-sdk-a-folder-failed-to-be-moved

    それで解決ヽ( ´¬`)ノ

     

    ①上記エラーが出た段階で、いったんAndroid SDK Managerを終了させる

    ②SDKのインストールフォルダの「temp」フォルダを開く

    ③ダウンロードされたアップデートファイル(ZIPファイル)があるので、これを解凍

    ④「tools」フォルダに上書きコピー

     

    なるほど、丸ごと手動でやればいいのね。

    解決!ありがとうございます。


    覚え書き:jsonはタブコードもキライだったw

    先日ハマッた改行コードの問題に対応してしばらく経った頃、また同じ読み込みエラーが発生(ToT)

    よくよく調べても改行コードは入ってない。

    読み込まれたデータをテキストエディタにコピペしたら、ひとつだけタブが・・・

    タブコードも消したらうまく行きました。

     

    でもこれって、jsonの問題じゃなくて、jqueryのajaxオブジェクトの方の問題のような気がしてきた。

     


    覚え書き:jsonは改行コードがお嫌いらしい

    AJAXでjson形式のレコードセットを取得するときにハマッタのでメモ。。。

     

    だいたいは良かった。サクサクフツーに取得できてた。

    ところが、CKEditorで作成された文章など、HTMLタグを含んだデータを取得しようとすると失敗するようになった。

     

    仕方が無いので、PHP側であらかじめHTMLタグをHTMLエンティティに変換して、取得側でデコードしたらうまくいった。

     

    いろんな文章で動作確認していたら、またまた取得失敗が発生した。

    firbugでレスポンスを見たら、取得データの中に改行が・・・

    これが臭いとあたりをつけて、PHP側で改行コードを削除したら、うまくいった。

     

    どうやら、jsonはHTMLタグもキライだが、改行コードもキライらしい。

    メモメモ。。。〆(.ω. )


    カーソルポインターもいっしょに画面キャプチャする

    画面のプレゼンや操作マニュアルの作成時に、PrintScreenキーで画面をキャプチャして使用することがよくあります。

    その際に、意外とこまったりするのが、これ。

     

    カーソルポインタも一緒にキャプチャしたいいいい!!

     

    普通にPrintScreenキーでのキャプチャでは、カーソルポインタはキャプチャされません。

    まあマイクロソフトにしてみれば、純粋に画面をキャプチャするならカーソルポインターは邪魔、ということでそういう仕様になってるんでしょうけど、特に操作マニュアルの作成の時なんかは、このカーソルポインターが重要になったりします。

     

    まあ、わかりゃいいっちゃあいいんで、だいたいは図形の矢印を代替えにしてたりしたんですが、「リンクをクリック」みたいなのを図にしたいときは、矢印ではちと具合が悪い。やっぱり「指の形マーク」がいい。

     

    でも、そのためだけにソフトを入れるのもなんだし、なんとかデフォの機能だけでできないもんかと探したら、、、

     

    あったあった、ありました。

    これまで一度たりとも使ったことのない、というか、そういうのがあるのも知らなかった(笑)、「拡大鏡」を使う方法です。

     

    スタートメニュー→「アクセサリ」→「コンピュータの簡単操作」→「拡大鏡」

     

    で起動します。

     

    いろいろ弄るとわかりますが、要はポインターのある場所を部分的に拡大してくれるというツールです。

     

    んで、キャプチャしたいウィンドウを出して、指マークになったところで(この時拡大鏡の中もそうなっています)、すかさずPrintScreen。

    クリップボードの画像を拾ってみると、ウィンドウ本体の方のカーソルポインターはいつものように消えてますが、いっしょにキャプチャされた拡大鏡の方はというと・・・

     

    おお~~!!残ってる残ってる(^-^)//””ぱちぱち

     

    あとは、その画像を必要な部分だけにトリミングしてマニュアルに貼ってできあがり^^


    覚え書き:CHECKBOXはチェックされてないとPOSTされないらしい

    星の数ほどCHECKBOXを作ったし、数え切れないほどPOSTして、イヤになるほど処理してきたのに、これは知らんかった・・・(;´▽`A“

     

     

    最近年のせいか、コーディングの効率をやたらと考えるようになって、特に面倒なPOSTデータの取得処理をあちこちのフォームで使い回すようになった。

    フォームに配置するオブジェクトを必要なものだけにして、そのフィールドだけ更新をかけるために、isset()関数でPOST変数の有無を調べて処理を行う、見たいなコーディングをするようになって、まあ2~3年くらい。

     

    そんなに経つのに、今の今まで気づかないなんてな。

     

    チェックが入ってないと、データがPOSTされないから、チェックを外す更新をかけたとき、フィールドの値をOFFにする更新が走らない。

    更新が走らないから、フィールド値がいったんONになったが最後、入力フォームでチェックをはずしてもOFFにできなくなる(笑)。

     

    回避方法として、CHECKBOXのonClickイベントで、チェックがOFFだったら同一IDでvalue値が0のhidden属性のオブジェクトを動的に作ってPOSTする、みたいなことやってる人もいた。

     

    いや、気持ちはわかるよ、、、でもオレには無理・・・○| ̄|_

     

    サクッとRADIOボタンにしちゃいました。_(T▽T)ノ彡☆バンバン


    覚え書き:ACCESS2007でCSVインポート失敗

    CSVファイルに吐き出された元データを違うシステムで利用する為にコンバート作業をしていたときのお話。

     

    データコンバートにはMS-ACCESSが使い慣れてて便利なのでよく使う。

    MS-ACCESSにCSVをインポートする、なんて作業は過去何度もやっていたので、インポートした後のことばっかり考えて作業してたら、インポートの時点で見たことないエラー_(T▽T)ノ彡☆

     

     

    ファイルの中に変なフォーマットがあるのか?

    データをいろいろ修正して試したけどダメ。。。

    思い切って、データをちょ~シンプルなものにして試してみたけどダメで、どうもデータ云々ではないらしい。
    ということで、インポート元のファイルのパスとか名前をなんとなく眺める。

     

    まずは、パスに混じっていた日本語をアルファベットに変更。

    ファイル名にピリオドが2つあったので、アンダーバーに変更。

     

    すると、何事もなかったように、インポート成功!

     

    検証の結果、日本語パスも問題はなく、原因は「ファイル名にピリオドが混じっている」ことだった。

     

    MS-ACCESSへのCSVインポートは、ファイル名のピリオドを取り除くべし

     

    やってくれますな、ACCESS君┐(‘~`;)┌


    Windows7で設定した特定のプログラムのみUAC回避させる

    UACは、Vistaから搭載されたセキュリティ機能。

    よく見るこのダイアログがでるやつ。

    これは、たとえ管理者でログインしていても、アプリケーションが実行されるときは管理者権限で実行しないようにして、不正なプログラムが実行されちゃうのを回避する。

    なかなかに鬱陶しいヤツだが、そう見ると絶対外せない。

     

    で も、明らかに安全と解っている、しかもよく使うアプリ(テキストエディタとか)を起動するたびにこいつが出るのは、いかにも神経過敏もので、「例外設定で きたらいいのに」と常々思っていた。まあ、その”よく使うアプリ”がウィルス感染しないとも限らないので、例外設定がないのも一理ある。

     

    でも回避するw

     

    ネットを探したら、なかなかナイスなアイデアの方法が公開されていた。

    Windows7で設定した特定のプログラムのみUAC回避させる方法

    タ スクスケジューラは、登録したタスクを「最上位の特権で実行」するオプションがあるが、このオプションをONにした空っぽのタスクを用意する。そして、 VBSでタスクスケジューラにアクセスして、前述の空っぽのタスクに、UAC回避させたい実行ファイルを渡す、というもの。

    設定が完了したら、以後はVBSを実行してアプリを起動すればOK。

     

    覚え書き用に、VBSのソースを転載しておこう。

     

    こいつをタスクスケジューラに登録する
    [VB]
    Option Explicit

    Dim objWshShell ‘ WshShell オブジェクト
    Dim objFileSystem
    Dim objFilePath
    Dim strParam
    Dim strExecParam

    If WScript.Arguments.Count <> 0 Then
    strParam = Split(WScript.Arguments(0), “,”)
    strExecParam = “”
    If UBound(strParam) = 1 Then
    strExecParam = strParam(1)
    End if

    Set objWshShell = WScript.CreateObject(“WScript.Shell”)
    Set objFileSystem = CreateObject(“Scripting.FileSystemObject”)
    Set objFilePath = objFileSystem.GetFile(strParam(0))

    objWshShell.CurrentDirectory = objFileSystem.GetParentFolderName(objFilePath.ShortPath)
    Call objWshShell.Run(“cmd.exe /c start /NORMAL ” & objFilePath.ShortPath & ” ” & strExecParam,0,False)
    End if
    [/VB]

     

    これは、回避したいアプリごとに作る

    [VB]

    Option Explicit

    Dim objTaskService
    Dim objFolder
    Dim objTask
    Dim strAppPath

    ” ===ここにプログラムのフルパスを設定===
    if WScript.Arguments.Count = 0 then
    strAppPath = “D:\apps\sakura\sakura.exe”
    else
    strAppPath = “D:\apps\sakura\sakura.exe, ” & WScript.Arguments(0)
    end if

    ” タスクサービスオブジェクトの取得
    Set objTaskService = CreateObject(“Schedule.Service”)
    ” タスクサービスとの接続
    objTaskService.Connect
    ” 場所を指定してフォルダオブジェクトの取得
    Set objFolder = objTaskService.GetFolder(“\”)
    ” タスク名を指定してタスクオブジェクトを取得
    Set objTask   = objFolder.GetTask(“UACEscape”)
    ” タスクを実行
    objTask.Run “””” & strAppPath & “”””

    [/VB]

     

    さっそくテキストエディタ(サクラエディタ)でやってみた。

    手順は面倒だけど、難しくはない。あっさり完了。

     

    おお~、UACのダイアログがでない キャーゞ(^o^ゝ)≡(/^ー^)/”””パチパチ

     

    ところが、テキストエディタというヤツは、アプリ本体を直接起動することはまれで、ほとんどの場合、エディタに関連づけられたテキストファイルなどをダブルクリックして起動する。

    ファイルには、テキストエディタ本体が関連付いているので、本体が直接起動して、やっぱりUACダイアログがでる・・・(ToT)

     

    んで、思い切って、上記のVBSファイルに関連付けを変更してみた。

     

    おお~、UACのダイアログがでない キャーゞ(^o^ゝ)≡(/^ー^)/”””パチパチ

     

    ところが、VBSファイルはアイコンを持っていないので、テキストファイルのアイコンがエディタのモノから無味乾燥の地味なアイコンに全部変わってしまった・・・(ToT)

     

    だんだん意地になってきた。。。とことんやったろうじゃん!!

     

    ファイルの関連付けをすると、関連付けされているアプリのアイコンがファイルに適用されるけど、VBSファイルのアイコンが変更できない。

    VBSファイルのショートカットを作って変更を試みたが、これも不可。

     

    いろいろ調べたら、「関連付け」自体のアイコンを変更する方法を発見!

    関連付けのアイコン変更

     

    要はレジストリに登録されている関連付け情報に、アイコン情報を自分で追加してやる、という方法だった。

    「.TXT」のレジストリ情報に「DefaultIcon」という項目を追加して、テキストエディタを指定してやると、

    無味乾燥アイコンが一斉にテキストエディタのアイコンに!!

    テキストエディタには、TXTだけじゃなくていろんな拡張子が関連付いてるけど、まあそれは追々各個撃破ということで。。。

     

    めでたしめでたし(*^^*)