読者です 読者をやめる 読者になる 読者になる

ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

適切な設計およびコーディングをすることで、変更がしやすくなる

データをデータベースから取り出してCSV形式で保存するプログラムを作成しています。 データをデータベースに登録されたときに、同時に登録されたファイルも合わせてコピーもしています。これまでの処理の流れ特に要望がなかったので、 1.データベースからデ…

類似システムの同時利用対策の誤った方法

昨日類似システムを同時利用された場合の対処方法を書きました。 ajya.hatenablog.jp僕はこの方法で十分だと考えていましたが、入力画面を表示したときに、システム毎に異なる値を割り振るだけではなく、処理を追加するパターンを見ました。 session_start()…

類似システムを同時利用された場合の対処

類似のシステムを同時に利用された場合、以下の手順で現象が発生しました。 一方の入力画面で入力された値を、確認画面でセッション変数に格納する。 もう一方のシステムの入力画面を表示する。 もう一方のシステムの入力画面は、確認画面から戻ったときにセ…

同じコードが2重に書かれていたために時間を無駄にしました

システムを流用して、新しいシステムを作成しました。 ログイン画面からログインすると、入力画面が表示されます。 入力画面の配色を変えようと、該当箇所を修正しましたが、色が変わりません。 photo credit: Manual XSS via photopin (license)なぜ色が変…

マジックナンバーは廃止すべき

プログラム上のマジックナンバーはろくなことがないですね。 ウィキペディアにまで書かれていました。 マジックナンバー (プログラム) - Wikipedia photo credit: return undefined; via photopin (license)なぜそう思ったのか僕が作っていない既存のプログ…

JavaScript:ラジオボタンがチェックされているか判定する方法

jQueryを使える場合 if (!$("input:radio[name='check1']:checked").val()) { alert("チェックされていません"); } で判定できます。 jQueryを使えない場合 var i; var flg = false; for (i = 0; i < document.form1.elements['check1'].length; i++) { if (…

MacでのFlashの動作を修正できました

取り扱える値の範囲内だったら、処理に使用するように修正して対処しました。 photo credit: tripu via photopin cc正しく動作するように修正したはずが、Webサーバーが違うためか、期待通りの動作をしない現象が発生しました。 まだMacでのFlashの動作に悩…

まだMacでのFlashの動作に悩み中

動作する環境としない環境がある理由が理解できていません。 photo credit: xelipe via photopin cc以前、Flashで未定義変数をチェックしていなかったために、Macではある機能が動作していなかったと書きました。 WindowsとMacでAdobe Flashの挙動が違って四…

WindowsとMacでAdobe Flashの挙動が違って四苦八苦しました

わかってみれば、変数のチェックを行っていなかったことと、異なる環境での動作確認をしていなかったことが原因でした。 photo credit: buggolo via photopin cc Macで動作しないWindowsのChromeで動作を確認し、WindowsのInternet Explorerでも動作を確認し…

JavaScript:同一クラスを割り当てたチェックボックスを択一選択にするJavaScriptが正常に動かなくなっていて焦りました

複数から1つだけ選べる択一選択にするなら、ラジオボタンにすべきです。 選択した後で、選択しないということもあるため、チェックボックスになっています。チェックボックスで択一選択にする方法JavaScriptで、チェックされるたびに、同一クラスを割り当て…

JavaScript:jQuery:参加者のチェックボックスのON/OFFで、同行者のチェックボックスがあるセルの背景色を変更する方法

昨日の記事でチェックボックスの有効/無効の切り替え方を書きました。 JavaScript:jQuery:参加者のチェックボックスのON/OFFで、同行者のチェックボックスの有効/無効を切り替える方法 - ソフトウェア開発者の日常 JavaScript:jQuery:参加者のチェックボ…

JavaScript:jQuery:参加者のチェックボックスのON/OFFで、同行者のチェックボックスの有効/無効を切り替える方法

代表の参加者が選んだセミナーのみ、同行者が参加できるようにシステムを作成して欲しいと要望がありました。入力する画面では制限をもうけず、入力内容を確認する画面で判定して表示することも考えましたが、手間がかかります。 入力画面で代表の参加者が選…

決済とデータベース登録の順序を考慮する

正常なら問題ありませんが、エラーが発生した場合を考えると、処理する順番が気になります。 photo credit: tec_estromberg via photopin ccECサイトでは、 名前や住所、購入する物の他にクレジットカードの情報を入力 入力内容の確認 決済とデータベースへ…

データが壊れる現象に再び遭遇

同じ対処で処理できるようになりました。 photo credit: gnizr via photopin cc200回以上ループするはずが2回目で止まる部下からループが2回目で止まってしまい原因がわからないと相談がありました。 動作を見ると、確かに2回目で止まってしまっています。 …

桁数揃えで予定外の動作

C#のプログラムで、複数の文字列をそれぞれ指定の桁数にそろえて、連結する仕様がありました。検索したら、文字列にはPadRightメソッドがあったので、これを使うことにしました。 data1.PadRight(6, ' ');と記述するだけで、全体が6文字になるように末尾にス…

QRコードはカラーでも作れるんですね

白黒以外見た覚えがないです。 photo credit: pixage via photopin ccC#のプログラムでQRコードを出力しなければならなくなったので調べると、DotNetBarcodeというライブラリを見つけました。 QRCode対応完全無料ライブラリDotNetBarcodeの詳細情報 : Vector…

似た作り方をしていると、ソースコードの流用が楽にできます

ログイン画面を簡単に用意できました。 初回はユーザー登録が必要で、2回目以降はログインしてもらうと1回目の情報を表示して、入力をなるべく減らそうという考えのシステムを作成しています。 初回登録時の動作が大体できてきたので、2回目以降のためのログ…

シリアル型のカラムに不適切な値を設定したために発生した現象

手動で割り振るにしても、既存の値に近い値にしていれば、見過ごしていたかもしれません。 photo credit: jimgris via photopin cc現象正しく登録番号を割り振っていたシステムが、途中から同じ番号を割り振るようになっていました。原因プログラムとデータ…

プレースホルダを使ってみて、使いにくく感じました

以前この記事を読んで、使うのは止めておいた方がいいんだなと覚えてはいました。 入力フォームのプレースホルダを使ってはいけない – U-Site既存のシステムを改造することになり、入力画面を見るとプレースホルダが使われていました。 ラベルはついていませ…

新たなデータを作ることによって発覚したバグ

わかれば簡単な内容でした。 photo credit: Andréia via photopin cc開発環境構築PHPとSQL Serverで構築された既存のWebシステムを改造する案件で、デモ環境をコピーして開発をしていました。 なるべく開発環境構築の手間をかけたくなかったので、プログラム…

再読み込みボタンを押されたときにPOSTメソッドを再処理させない方法

POSTメソッドで渡された値を使って登録処理を行う画面で、処理が終わった後にブラウザの再読み込みボタンを押されると、同一処理が繰り返されて、2重登録が発生しました。 開発中のデータベースへの反映やメール送信の動作確認をするには便利ですが、本番で…

一見して評価の順序がわかりずらかったプログラムの書き方

優先順位をちゃんと覚えていれば、わかる内容でした。 photo credit: Kaptain Kobold via photopin ccある機能を移植するためにPHPのプログラムを確認したら、 if ($param1 < $param2 && $param3 == TRUE) { echo '1'; } else { echo '2'; } と書かれている…

JavaScriptで単語数カウント

現在は文字数を1秒ごとに取得している部分を、単語数に変更したいとの要望があり、対応しました。単語数なので、区切りをスペースにすればいいというのはすぐに思いつきましたが、「,」と「.」も対応するとなると、何度も区切る処理が必要になります。 単純…

PHP:file_get_contents()で、GETリクエストおよびレスポンスを取得

あるサイトに対して、httpのGETリクエストでIDをパラメータとして送り込むと、IDに従ってファイルが作成されるようにしてあります。 普段は他の処理と組み合わせた、一連の処理の流れの中でGETリクエストをしていますが、急遽GETリクエストだけ行わなければ…

コピペしたために発生したバグ

発端お客さんから、ドロップダウンリストで2014年3月が2個あるが、2014年2月がなく、次は2014年1月があると連絡がありました。 お客さんが見ている画面を、こちらかも見てみると、確かに同じ現象が発生しています。 過去3年分のドロップダウンリストがありま…

パーミッションが変更されてしまい、処理エラー発生

営業さんから、昨年の8月に納品したシステムで、エラーが発生しているとの連絡をもらいました。 なにが起きているんだろうと思って、アクセスしてみると、パーミッションが無くて、ファイルが操作できないエラーが表示されています。FTPで接続してパーミッシ…

ImageMagickはどのバージョンをインストールしてあるのか理解していなかったために起きたこと

Windows XPからWindows 7にシステムを移動する際に、ディレクトリ構造を丸ごとコピーして、ディレクトリ内のバッチファイルを起動すれば、移動処理は完了すると聞いていました。ImageMagickが動作していないその通りディレクトリ構造を丸ごとWindows 7にコピ…

Internet Explorer 11のWebブラウザ情報は、Internet Explorer 10までと変更されてました

Windows 7のInternet Explorer 10がInternet Explorer 11に更新されてしまったので、なにが変わったのかと試していたら、Webブラウザの情報が大きく変わっていました。Internet Explorer 10とInternet Explorer 11を比較Webブラウザ情報を取得すると、次のよ…

年末の週番号は何番になるのが正しいの?

先日、以下のツイートをしました。今週は、2013年第53週と2014年第1週のどっちが正しい?プログラムの挙動を見ていると、2014年第1週みたい。根拠というかルールはどこかにあるのかな。— AJYA (@ajyaa) 2013, 12月 31 きっかけは、PHPのdate関数でフォーマッ…

郵便局の大口事業所個別番号データを使う際の注意点

大口事業所個別番号データも検索できるようにしたので試したところ、NULLがあるためにプログラムが正常に動作しませんでした。 大口事業所個別番号データの説明 - 日本郵便小字名、丁目、番地等 ...確認すると、6列目の町域名か7列目の小字名、丁目、番地等…

2種類のデータを検索する方法

一般的な郵便番号と、大手の会社に割り当てられれる郵便番号の両方を検索しなければならなくなりました。 以下の2ページからダウンロードしたCSVファイルが検索の対象となります。 読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便…

表示の組み立ては、サーバーサイドで行うか、クライアントサイドで行うか

最近、 「選択肢によってWebサイトの要素が切り替わり(この部分は、JavaScriptで制御)、次へボタンを押すと確認画面、確認画面で戻るボタンを押すと、元の画面だけれど、選択した状態=次へボタンを押す前の状態」 が表示されるWebサイトの、表示の作り方とし…

英語所属名が登録できない原因

お客さんから、英語の所属名が登録できないとの問い合わせがありました。現象登録できない英語の所属名をメールで貰えたので試してみると、確かに登録できません。 最初は文字列が長すぎて登録できないのかと思いましたが、入力チェックの段階でエラーになっ…

人数は何人と数えるの?

お客さんからの登録システム開発依頼で、人数を計算して欲しいようなことが書いてありました。人数の条件登録時の条件は、メールの文面からすると入力として ・代表者情報 ・条件Aに該当する方の人数 ・条件Bに該当する方の人数 があり、チェックは ・条件…

文字コードはいろいろ悩まされます

以前作られたWebページのエンコードがEUC-JPで、データベースの文字コードもECU-JPに設定されています。現象お客さんから画面上、文字が化けているという連絡を貰ったので確認すると、機種依存文字の「髙」が文字化けしていました。「髙」が入力されたのは、…

JavaScript:jQuery:jQueryのバージョンによって違う動作

一覧表のチェックボックス全てに、一括でチェックを入れる全選択ボタンと、一括でチェックを外す全解除ボタンを作成しました。 処理のJavaScriptは、以前のソースコードを流用して、以下のコードで動作確認をしました。 $('#all_select').click(function() {…

ボタンを画像にすると、Internet Explorer 8では、期待通りの動作をしない

formタグ内のボタンが、最終的には画像にする予定で、開発初期は <input type='submit' name='next' id='next' value='next'> として、submitのボタンとしていました。 予定通りの動作をするようになったので、見た目の調整の一環として、ボタンを予定通り画像にするために、 <input type='image' name='next' id='next' src='./next.jpg' value='next'> としました。 現象 Google Chromeでは動…

JavaScript:jQuery:onLoadの代わりの記述方法

jQueryを便利に使っていますが、bodyタグのonLoadのタイミングの処理は、そのまま書くしかないと思っていました。 あるとき調べてみたら、 jQuery.event.add(window, "load", function() { func_cnt(); }); とすれば、onLoadと同じタイミングで処理できるこ…

PHP:日付の扱いを間違っていても、目的は果たしていた例

以前作られたプログラムを修正するために、期日を過ぎたので入力画面を表示しないようになっていたのを、表示するように設定しても、表示されません。 原因調査 以下のコードで期日が過ぎているか判定していました。 $endDate = date('U',strtotime('2014-01…

PHP:defineを使わず変数を使っているプログラム

何年か前に作成されたプログラムの修正をしています。 共通ファイルに変数で固定値が書かれていて、変数を使って処理しています。 $systemId = 1; 他の書き方 固定値を書くなら、defineを使う方法があります。 define("SYSTEM_ID","1"); どちらでも適切にコ…

Internet Explorer で■(しかく)が小さく表示される現象

文字の前に ■項目1 ■項目2 というように■(しかく)を表示したら、Internet Explorerだけ小さく表示されました。 dlタグ/dtタグを使っていて、その影響で小さく表示されるなら、他のブラウザでも同じことが発生するのでしょうが、他のブラウザでは小さくな…

PHP:3桁になると正常に動作しないプログラム

0埋めされた文字列を文字列型のカラムから値を取得して、連番を生成するために、以下のようなコードが書かれていました。 $sql = "SELECT max(no) FROM table "; $result = pg_query($pgsql, $sql); $no = pg_fetch_result($result,0,0); $newno = sprintf("…

JavaScript:jQuery:name属性よりclass属性を使ったほうが、楽にコーディングできる場合

既存のソースコードで、inputタグのname属性が配列になっていて、1始まりで使われているソースコードがありました。 後続の処理もそれに対応していましたが、jQueryでname属性を使って処理を書こうと判断したために、name属性を変えて、実質0から始まるよう…

JavaScript:backgroundColorの設定でエラーが発生した場合の対処方法

以下のJavaScriptで、指定した要素に背景色を設定していました。 var element= document.getElementById('upfile'); element.style.backgroundColor = 'lightgray'; これで問題はないという認識でいましたが、ブラウザによってはエラーが出ていたので、jQuer…

JavaScript:非表示にしたtrタグを表示する際に気をつける点

ラジオボタンやセレクトボックスの選択によって、表示/非表示を切り替えたいと要望されることがあります。 非表示にするは、 document.getElementById('tag').style.display = "none" を設定すればできます。 逆に、表示するには、 document.getElementById…

JavaScript:セレクトボックスで何番目が選ばれたか知る方法

selectタグに設定する、optionタグのvalue要素に適切な数値を設定しておけばわかりますが、設定できない場合はどうすればいいか調べました。 調べた結果 selectedIndex というのがあるので、 var index = jQuery("#selectbox").prop("selectedIndex"); とす…

ひらがなチェックでつまずいたこと

人名のふりがなとして、ひらがなが入力されているか、JavaScriptやPHPでチェックしています。 photo credit: fhisa via photopin cc 「ー(長音)」がひらがなと判定されない 正規表現でチェックしていて、PHPの場合、文字コードがECU-JPで作られたページで…

Google ChromeでjQueryが呼び込まれない現象への対処

テストのためにコピーしたサイトのボタンをクリックしたら動作しませんでした。 Internet Explorerでは動作していますが、Google Chromeでは動作していません。 photo credit: danorbit. via photopin cc 調査 JavaScriptが動作しなくなったのかと、デバッガ…

PHP:文字が化けて保存できない現象への対処

以前作られたプログラムをベースに、部分的に修正を加えて利用したら、データベースへの登録時にエンコーディングできないエラーが発生しました。 そのときに表示されたエラーメッセージです。 Query failed: ERROR: invalid byte sequence for encoding "EU…

PHP:ファイルダウンロードで予想外の動作

CSVファイルをダウンロードするために、以下の記事のようなコードを利用して、ファイルをダウンロードできるようにしました。 PHPでファイルをDLさせる際のPHPコード例:phpspot開発日誌 このコードで僕の環境で試したところ、予定通りのファイルがダウンロー…