パソコン・インターネット

レガシーASPのJSONパーサー

レガシーASPの環境で、JSONのパースを行う必要が出てきまして。。。

普通にJson文字列を分解して、Dictionary型として入れ込むだけでは
日本語がどうしても文字化けしていまっていて
それがUnicode→Shift-JISの変換が必要だということは分かったけど
一から自分で作るのは面倒だ・・・
そう思ってググったら、やはり作ってくれていた先輩がいらっしゃいましたヽ(´▽`)/


◇umejanのブログ
うひょひょ、ありがたや~ と思っていたのですが、
少しばかり不具合がありましたので修正して使っております。
その1 null の時に、値だけでなくキー項目すらも取れなくなってしまう
 例えばJsonの中で {"jyusho": null} ってのがあったとき、
  Dictionary型のオブジェクトに jyushoが存在していないと怒られてしまうのだ。
 
これを回避するために
→ WordNull() 関数の中で
    Set WordNull = Nothing 
としている個所を
    WordNull = null
に変更。

なので、この関数を呼び出している個所 
getVal()関数の中の
~前略~
   Case Else
      If ch >= "0" And ch <= "9" Then
         isObj = False
         val = number()
      ElseIf ch = "n" Then
         isObj = True
         Set val = WordNull()
      Else
~後略
このあたりの個所を下記のように変更

~前略~
   Case Else
      If ch >= "0" And ch <= "9" Then
         isObj = False
         val = number()
      ElseIf ch = "n" Then
         isObj = False
         val = WordNull()
      Else
~攻略
これで、例えば "jyusho": null のような項目があったとき、
VBScript では 
  IsNull(objJson("jyusho") = False Then
    Exit sub
  End If
のように使えるようになります。


その2 波ダッシュ(~)が化ける
これは Unicode→Shift-JISの変換の時によく引っかかるやつ。

→ fromUnicode()関数に、波ダッシュの時だけの特別処理を追加しました。

元ソース
    Private Function fromUnicode(uffff)
       fromUnicode = ChrW(uffff)
    End Function
↓下記のように、例外的な扱いの条件を追加

    Private Function fromUnicode(uffff)
 '"~"の文字化け回避
        If uffff = 12316 Then
            fromUnicode = "~"
        Else
            fromUnicode = ChrW(uffff)
         End If
    End Function
これで波ダッシュも問題なく表示されるようになりましたo(*^▽^*)o
以上、あとはとっても快適に動いております。

感謝、感謝でございます。

| | コメント (0) | トラックバック (0)

ローカル環境だと文字化け!?

レガシーASPのお話です。

Gitで取得したソースを、ローカルのIISで実行してみたら、一部だけ文字化けしてて
どうもOracleで取得したデータだと化けてるようでした。

ありゃ、文字コードが違うか!と言うことで
早速「Oracle 文字化け Windows」でググる。

NLS_LANG = JAPANESE_JAPAN.JA16SJIS
を環境変数に追加してみたけど、改善しない。

さらにレジストリを確認するも、やっぱり
JA16SJISがセットされてる。

Oracleサーバーの文字コードももちろんJA16SJISで合ってる。
(ワシ以外の人で文字化けしてる人は居ない)

となるとIISの設定か?!
と言うことで、web.configとか確認してみて
UTF-8って書いてあるところをShift_jisに書き換えてみたりして。

そんでもって再起動したけど、相変わらず_(:3」∠)_

うーむ?
いろいろとあちこちの画面を見ていて、ふとこの画面が目に付いた




コードページ 65001って何?!
ググってみたら、65001はUTF-8のよう。

これじゃね??

これを「932」に変更してみたところ。。。

無事に文字化けは解決!!scissors

やっぱりIISの設定でした。
良かった、良かったー!

| | コメント (0) | トラックバック (0)

Air for Androidが動くようになるまで

少し時間が出来たので、遊んでばかりいないで
常々やってみたいと思っていたAndroid用アプリの開発をしてみた。

題材は・・・先月行ったライブで、
最後の最後にグループの結成記念日がスクリーンに表示され、
そこからカウントアップして本日まで、しかも今の時刻までもが表示される演出。

で。
Flashなら簡単にこの動きが作れると思ったので、Flash Professional CS6 で
早速動きを作成。

PC上でのデバッグは問題なくできてる。
表示される速さなどをここで微調整。

問題はここから。
なにせ、Android機をPCに接続したことすらないワシ。

Google先生の指導のもと、Android機で開発者モードにし、
USBデバッグモードをONにし、
PCの音楽はAndroid機と同期できるので接続も出来ていると思われ、
な状態にして、いざAndroid機でデバッグ!!

ところが、「パブリッシュ中」と出て、一向に終わる気配が無い。

試しにUSBデバッグモードをOFFにすると、
パブリッシュ前に「USB機器が接続されていません」的なエラーとなることから、
ちゃんと認識はされているっぽい。

なのに何故・・・

一応SHARPでもUSB接続用ドライバが公開されているようだったので落としてみたが、
普通に接続してドライバが入ってしまったようで
デバマネからAndroidを削除するも、次の起動の時にはPnPで戻ってきてしまう。

ううむ?
何度やってもパブリッシュが終わらない現象となってしまい、
昨日はそこまでで諦めた。

ちなみに、今はFlash Profesionalに代わり、Animate というソフトになっているらしい。
最新版をインストールしといた。

で、今日。

AnimateでUSB機器でデバッグするにして再度トライ。
昨日は出なかったエラーが出ている。

「MovieClipの定義が見つかりません」
Google先生に相談してみたところ、どうもMuvieClipを使った時に
ClassとしてActionScriptに吐き出す設定にしとかないといけないらしいことが判った。

http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b8ea63-7fee.html
で、これは解決。

次に、やはり昨日は出ていなかった「デバイスが見つかりません」のエラー。

昨日は認識されているっぽい動きだったのに、
USBデバッグモードを確認してもたけどONになっていてもこのエラーは出続けている。

またしてもGoogle先生に相談。
http://www.internal.co.jp/support/android/faq001.php
このサイトにより、ワシの今の環境が「アプリがインストールできない状態」の右側と同じになっていることに気付く。

そう、「ほかのデバイス」というものが見当たらなく、一見すべてのデバイスが正常に動いてるような感じ。。。

で、ADB Interfaceをインストールしなければならないことに気付いた。

さてさて、どうしよう?
いっそのこと「不明なデバイス」とビックリしててくれればいいのに。。。


ちょっと考えてから、「レガシーハードウェアの追加」を試してみることにした。
ドライバの場所はもちろん、昨日SHARPさんのサイトから落としたやつの格納先。

20160609_2
無事にADB Interfaceも追加できた!!

ここで再度、USB機器でのデバッグを行ったところ…


おお。無事にワシのAndroid機に表示されましたヽ(´▽`)/
いやぁ~ 解決して良かった。。。

| | コメント (0) | トラックバック (0)

WindowsPhoneアプリ開発その1

SilverlightでWindowsPhoneのアプリ開発に挑戦中。

とは言っても簡単なサンプルをちょっと膨らませて色々といじってみているだけの状態ですが。

どうしても解決できなかったもの。
ImageのSourceで、ローカルファイルを指定する部分。

複数の画像を処理したかったので配列で↓のように記述。

public string[] photos = new string[3] { "/project1;component/Images/01.png", "/project1;component/Images/02.png", "/project1;component/Images/03.png" };

Random random = new Random();
// ランダムに表示する画像を選択
var path = photos[random.Next(photos.Length)];


// BitmapImageに画像を読み込み、画面に表示させます。
var image = new BitmapImage();
image.UriSource = new Uri(path, UriKind.Absolute);
backimage.Source = image;

こんな感じでセットするのに、読み込んでくれない。
画像が抜け落ちて動きます。


いろいろと記述を試してみたのですが・・・苦肉の策でネットワーク上に置いて、絶対パスで指定してみたら?
ということで、配列の部分を↓のようにしてみました。

public string[] photos = new string[3] { "http://www.****.com/hoge/image/01.png", "http://www.****.com/hoge/image/02.png", "http://www.****.com/hoge/image/03.png" };

今度はOKでした。
ネットワークに接続できなかった時にデフォルトで表示する画像を用意することにしました。
サーバ側で自由に画像を差し替えられるから、結果オーライなのかな…。

それから、画像を読み込むときにフェードインしようとしてまた試行錯誤。


Storyboard.TargetProperty="Opacity"
From="0.0" To="1.0" Duration="0:0:2"
Storyboard.TargetName="image"
AutoReverse="false" RepeatBehavior="1x" />

キモは『RepeatBehavior="1x"』です。
RepeatBehavior="1" と記述すると無限で繰り返してくれちゃってました。
RepeatBehavior="Forever"とどう違うんだろう・・・??

| | コメント (1) | トラックバック (0)

.htaccessを使ったページの振り分け

以前、COREサーバに置いていた.htaccessファイルを、さくらインターネットのサーバに設置しました。

やっていたことは、携帯のキャリアごとに表示するページを振り分ける、というものです。

COREサーバではうまく行っていたのに、さくらのサーバではまったく振り分けが出来ていません。

ハマりました。。。。

ググったりしますと
http://tmmania.wordpress.com/2011/11/29/%E3%81%95%E3%81%8F%E3%82%89%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%A7-htaccess%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E6%90%BA%E5%B8%AF%E3%81%A8pc%E3%81%A7%E3%81%AE%E3%82%A2/
こんなページがありました。

RewriteRule ^$ /fuga/hogehoge.html [R]
 ↓
RewriteRule ^/$ /fuga/hogehoge.html [R]

とすれば良いの?
なんて早速やってみたのですが、この記述でもうまく行きませんでした。

結局は元にもどしました。

あれこれやること数時間。
(実際には、数十分やって2~3日放置、また暇を見つけて実験という状態だったのですが)

結局、ひょんなことから出来ました。

いや、

出来たというのは語弊があります。

URLを独自ドメインではなく、いわゆるさくらインターネットと契約した際の
「初期ドメイン名」にてアクセスしたら、振り分けが出来ました。

つまり、
http://[ユーザ名].sakura.ne.jp/[独自ドメインのルートのフォルダ名]/fuga/
ってURLです。
そしたらいとも簡単にぴょーんってジャンプできました。

せっかく独自ドメインの設定をしているのに、URLに独自ドメインを使えないのでは
なんだかちょっとどうなのー?って感じです(泣)

| | コメント (0) | トラックバック (0)

さくらインターネットのphp.ini設定

さくらインターネットでは、直接phpの設定を変更できないため、php.iniをWEBルートフォルダ(/home/[ユーザ名]/www/)に置くことにより、いろいろな設定変更が可能です、というような説明文を見かけます。

このWEBルートフォルダ以外にも各フォルダにphp.iniが置けることから、すっかり「その設定は子ディレクトリに引き継がれる」ものだとばかり思い込んでいました。
しかも、php.iniに記述していない項目については、親の分を引き継ぐと勝手に信じておりました。

ところが。
プログラムを設置しているフォルダの一番上の階層にphp.iniを置いてupload_max_filesize=100Mにしているはずなのに、全然設定が効かなくて、一体これはどういうことだ?と思っておりました。

ユーザ画面となる個所を置いているフォルダではPHPのエラーを出力しないように、display_errors = Offにしておく必要がありましたのでその記述だけ書いたphp.iniを置いておきました。
管理画面を置いているフォルダ内は、display_errors = Onの記述だけ書いたphp.iniを置いておきました。

この状態でハマりにハマりまして、1時間くらい悩んだ結果、php.iniの設定は下層には引き継がれないので、いちいちphp.iniの中に必要なものすべてを記述して置いておく必要がある、ということにやっと気付きました。

そして、php.iniが無いフォルダの場合は、webルートに設置したphp.iniを読んでくれるということが解りました。

フォルダ内に格納したphp.iniの中に記述されていない項目については、webルートに設置したphp.iniではなくて、phpプログラム内のphp.iniの設定をセットしてくれちゃうようです。

| | コメント (0) | トラックバック (0)

phpでメールの件名が切れる件

phpのメール送信を何回も作っているのに、定期的にハマります。

現象はまちまちなのですが(^^;A


今回は、件名が途中で切れてしまい、
そーなるとあとのヘッダ部分が本文に表示されるので、一見、文字化けを起こしているかのような現象になりました。

今までずっと使っていた関数を使ってまして。
他で納品したソースとも全く同じ、納品物の方はメルマガなので読者になってますが
件名が長くても切れていません。

ということは環境か?

とりあえず、メールのヘッダーを見ると、問題のある部分、subjectの中身が
途中で改行され、mimeエンコードが2回されています。

phpのリファレンスでmb_encode_mimeheaderを調べてみましたら
どうも、パラメータが増えている模様。

今まではmb_internal_encodingにて正しく文字コードを送っていればパラメータは必要ないという認識でしたので
$subject = mb_encode_mimeheader($subject);
とだけ書いていたんですが、
$subject = mb_encode_mimeheader($subject,"ISO-2022-JP","B","\n");

このように書き直してあげたところ、無事に長い件名も表示されるようになりました。

ちなみに、今までの方法でうまく動いているシステムの方はphp4です。

今回使ったサーバはphp5です。

その辺りの違いがあるんでしょうか。。。

| | コメント (0) | トラックバック (0)

Wordpress←→EC-CUBE連携

EC-CUBEでは買い物の途中で、docomo用にセッションが切れないように、PHPSESSIDというパラメータがURLの末尾についてます。

買い物カゴに商品を入れたまま、外部サイトに移動して、外部サイト側に置いてあるEC-CUBEへのURLリンクから戻ってきたのでは、セッションが切れてしまう、という事になります。

今回のご依頼は、商品に関する紹介をブログ(Wordpress)で行うので、買い物途中でブログをのぞいてもセッションを切れないようにして欲しい、というものでした。

そこで、WordpressのKtai Style用のプラグイン、KtaiStyle ksid Keeper なるものを使うことにしました。

作業箇所を忘れないためのものです。

あまり詳しくは書いていませんので悪しからず・・・・。

修正ファイル
◆wp-content/plugins/ktai-style/inc/template-tags.php
◆wp-content/plugins/ktai-style/login.php
◆wp-content/plugins/ktai-style/comments-post.php

 ↑ここまで、配布元よりの情報

◆wp-content/plugins/ktai-style/inc/shrinkage.php
 //文章中のURLにセッション用パラメータを付与する

◆wp-content/plugins/ktai-style/themes/[テーマ]/footer.php
 //すべてのページに「買い物カゴを見る」のリンクを追加

◆wp-content/plugins/ktai-style/admin/class.php
 //セッション用パラメータ名をEC-CUBE側に合わせて変更

 ↑以上は私自身のカスタマイズ部。

一番苦労した点は、ブログの文章中にEC-CUBEの商品 (またはカテゴリ)へのURLを記述されており、正規表現を使ってURLとおぼしき部分の末尾に "PHPSESSID"を付与してあげる必要があったところです。

まぁ、私の未熟さ故に苦労したに他ならないのですが(汗)。

| | コメント (0) | トラックバック (0)

メールアドレスかどうかを調べる正規表現

自分で一から正規表現を考えるのは面倒なので、いつもGoogle先生のお世話になっていますが、
phpの事については比較的ヒットしやすいこちらのサイト
http://phpspot.net/php/pg%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%EF%BC%9A%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E8%AA%BF%E3%81%B9%E3%82%8B.html
のコードをそのまんま真似してみましたら。

hoge*yuchizo.net
↑これは無事、エラーで引っかかってくれました。(@が無い)

しかし。

hoge@yuchizo
↑これは正しいとして、エラーになってくれません。

ん~~???ドメインが付いてなくてOKなのですか?
(ゴメンナサイ、私が無知なだけなのかも知れないですけど)

っていうことで、完全なメールアドレス形式のチェックではないのですが、

●@の後ろにはドットが1回~2回付く。
●ドメインにはドットが2回続くことはない。
●トップレベルドメインは(たぶん)数字ではない。
●アドレスがドットで終わることもない。

それだけ追加でチェックするようにしてみました。

コチラ↓

if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+(\.{1})(([a-zA-Z0-9\_-]+)+(\.{0,1}))+([a-zA-Z0-9\_-]?)+([^0-9-_,.]$)/", $mailaddress)) {
// 正しそう
}else{
// 正しくなさそう
}

| | コメント (0) | トラックバック (0)

さくらインターネットでWordPressのktai-styleが壊れた

EC=CUBEとWordpressの連携をとるカスタマイズをしています。

PCサイトは問題が無いのですが、携帯サイトではセッションIDを引き継げないのでカートに物を入れてからブログをみると、カートの中身が空っぽになるのを何とかして欲しい、というご要望です。

Wordpressの携帯サイト用のプラグイン、ktai-styleを使っているのですが、管理者としてログインしていないと、とくにセッション管理をする必要もないので、確かにリンクのURLにセッション用の記述が付与されていません。

で。ktai-style用に、さらにセッション保持用のプラグイン、「ktai-style-ksid-keeper」というのがあるのを見つけました。

いくつかのソースにサイトの説明文どおりに手直しは必要でしたが、すぐに問題なく動きました。

と。感動したのもつかの間。

Wordpressって、プラグインの更新なんかが管理画面からクリックひとつで出来ちゃうんですね。

新しいバージョンのktai-styleがあるとかいうのでクリックしたら、手修正したソースが丸ごと上書きになってしまいまして。

再度、新しいバージョンのソースを確認しながら修正して「きっとこれで大丈夫」と思ったのもつかの間、エラーが出てしまって画面が表示できませんでした。

ちょうどセッション用のタグを追加した個所で、「そんなファンクションは見つからない」って怒られているようです。

当初は誤字・脱字をうたがったのですが、どう見ても間違いはなく。。。

管理者権限でログインしている場合のファンクションを流用しているのを知っていましたので、今度のバージョンの管理画面用ソースが違っているのか???と疑い、ログインして管理画面を見てみることに。

…が。

あれれ?

携帯サイトの画面から、ログイン用のリンクが消えてしまっていました。

ktai-styleのフォルダ内には、間違いなくadminフォルダもいらっしゃいます。

リンクが無いなら、無理やりURLを指定してログイン画面に飛んでしまえ~!!!と思ったんですけど、そこはやっぱり使えないらしくて。
「管理機能は使えません」と宣告されてしまいました。

ktai-styelのバージョンが新しいと対応していないのか?と思い、今度は別フォルダにもう一度前と同じバージョンのWordpressを入れ、ktai-styleを組み込んでみたのですが…相変わらずログイン画面は出ませんでした。

環境はさくらインターネットですので、DBをひとつしか用意できませんので、各テーブルのプレフィックス文字を変えて運用しているだけなのですが、コレがいけないのでしょうかー?

とりあえず、他のサーバにWordpressをセットアップしなおしました。

| | コメント (0) | トラックバック (0)

より以前の記事一覧