2013年12月26日

Java(Android)の日付/時刻フォーマット変換関数

 いっつも日付や時刻のフォーマット変換の関数を新しく考えてしまうので、忘れないようにメモ

変換関数

/**
 * 日付/時刻フォーマット変換(String型の日付/時刻を任意の日付/時刻に変換する)
 * @param dateValue 日付/時刻文字列
 * @param fromFormat 変換元の日付/時刻フォーマット(ex.yyyyMMdd)
 * @param toFormat 変換先の日付/時刻フォーマット(ex.yyyy/MM/dd)
 * @return フォーマットして日付(エラー発生の場合、フォーマット変換しない)
 */
public static String changeFormat(String dateValue, String fromFormat, String toFormat) {

try {
SimpleDateFormat sdf = new SimpleDateFormat(fromFormat);
Date d = sdf.parse(dateValue);
sdf = new SimpleDateFormat(toFormat);
return sdf.format(d);
} catch (ParseException e) {
return dateValue;
}

}

使い方

日付のフォーマット変換
String s = changeFormat("20131226", "yyyyMMdd", "yyyy/MM/dd");
>2013/12/26

時刻のフォーマット変換
String s = changeFormat("213440", "HHmmss", "HH:mm:ss");
>21:34:40


2013年12月24日

AdmobをAndroidのActivityに表示するメモ

 いつも、Admobの広告を設定する箇所を忘れてしまうのでそのメモ

プロジェクトに追加するライブラリを追加する

libs
 GoogleAdMobAdsSdk-6.4.1.jar

Admobの広告を表示するLayoutファイルに赤字のところを追加する

admob_publisheridは、Admobで発行されたpubliserIDをリソースに設定しておく。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>
    <com.google.ads.AdView 
   android:id="@+id/main_admob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="@string/admob_publisherid"
ads:adSize="BANNER"
ads:loadAdOnCreate="true"/>
 
</LinearLayout>

AndroidManifest.xmlにactivityを追加する

<activity android:name="com.google.ads.AdActivity"  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

Activityクラスに広告をロードする

    try {
        AdView adView  = (AdView)findViewById(R.id.main_admob);
        adView.loadAd(new AdRequest());
    } catch(Exception e) {
        e.printStackTrace();
    }


2013年12月19日

Access97でモジュールを変更すると落ちる

 Access97(無印)でアプリケーションを作成して完成後にモジュールをちょっといじるとAccess自体が異常終了することがあります。
 (モジュールをコンパイルしても異常終了する場合があります)
 原因は完全に不明です。

 OSの再起動等いろいろしてみても絶対に改善しません。
Access自体のバグというのは間違いないと思うのですが、Access97自体もう既にサポート切れなのでマイクロソフトも何もしてくれません。
 本来は、Access97は使用せずにバージョンアップすれば良いのですが、ユーザの都合でそうも行きません。

で、復旧させる方法を考えましたので一応記録しておきます。


  1. モジュール以外のオブジェクトを新しいmdbファイルにエクスポートする。
    (モジュールは新しく作るため、モジュールはそのまま)
  2. 1.で作成したmdbをAccessで開き、新しいモジュールを作成します。
  3. 2.で作成したモジュールに、1.のモジュールのソースの内容をコピー&ペーストします。
    (モジュールの数分繰り返します。)
  4. モジュールをコンパイルします。


 もし、困っている方は試してみてください。

EXCELのシートを目次化する

 EXCELを使ってドキュメントを作るのは悪いと思いません。
ですが、あまりにも読む人の為に工作がなくて困ってしまいます。


 いろいろな資料をシートでわけるのはいいのですが、どこになんのシートがあるかわからなくても待ってしまいます。
 全シートへのリンクを付けた目次をワンタッチで作成できるマクロを書きました。
使ってみてください。


Private Const 目次タイトル As String = "目次"
Private Const 目次列 As Long = 2

Public Sub 目次作成()

    Dim mokuji As Worksheet
    Dim sh As Worksheet
    Dim row As Long
    Dim i As Long
    
    ' 目次ワークシートの準備
    Set mokuji = Worksheets.Add(before:=Worksheets(1))
    row = 1
    mokuji.Name = 目次タイトル
    mokuji.Cells(row, 目次列).Value = 目次タイトル
    
    ' 各シート名を目次にする
    For i = 2 To ActiveWorkbook.Sheets.Count
        row = row + 1
        Set sh = ActiveWorkbook.Sheets(i)
        With mokuji
            .Cells(row, 目次列).Value = sh.Name
            .Hyperlinks.Add anchor:=.Cells(row, 目次列), Address:="#'" & sh.Name & "'!A1" ' リンク先のシートの先頭に位置づけ
        End With
    Next

End Sub


2013年12月3日

Accessの追加クエリーで連番を振る

 Accessの追加クエリーで連番を振る方法を説明します。
この機能を使うことで、VBAでゴリゴリとコーディングする必要なく数行のコーディングで簡単にレコードをコピーしながら連番を振ることができるようになります。

要件

入力テーブルから出力テーブルへレコードこコピーする時に、出力テーブルの項目に連番を振りたい。

作るもの

  1. 連番を発行する関数
  2. レコードコピーする追加クエリ
  3. 追加クエリを実行する

連番を発行する関数

標準モジュールに関数を準備します

Dim newNum As Long

' 連番を初期化する
' GetNewNumを実行する前に呼び出す。
Public Sub InitNum()

    newNum = 0

End Sub

' クエリ内で呼び出す関数。
Public Function GetNewNum(v As Variant) As Long

    newNum = newNum + 1
    GetNewNum = newNum

End Function

レコードをコピーする追加クエリ


連番を振りたいフィールドに「連番:GetNerNum([フィールド1])」のように記載します。
このフィールド1は、入力テーブル内にフィールド名を指定します。(値がnullにならない項目を指定します。)

追加クエリを実行する

 クエリを実行する前に「InitNum」を呼び出して連番の初期値を設定します。
(これを実行しないと何が)

Private Sub 実行_Click()

    Dim qDef As QueryDef
    
    Call InitNum  ' 連番を初期化する
    Set qDef = CurrentDb.QueryDefs("QIテーブルコピー")
    qDef.Execute
    qDef.Close

End Sub

2013年10月26日

Mac miniにSSD増設成功

 以前、Mac miniにSSDを増設した記事を書きました。

 PLEXTORのPX-256M5Pという機種を接続してみましたが、フォーマットしてもOSのインストールやデータの書き込みができないという現象が起きていました。
 最後は、交換してもらうことで正しく使うことができるようになったので良かったのですが、交換してもらうまでなかなかの時間がかかりました。

  1. Mac miniに接続しても使えない。
  2. 販売店にクレームを出す。
  3. 故障かもという事で、販売店に返却して、調べてもらう。
    (代理店が動作確認するらしい)
  4. 問題ないという事で戻ってくる。
  5. 再度、Mac miniに接続してみるが使えない。
  6. SSDの箱に書いてある代理店に連絡してみる。
  7. 故障の調査履歴が無いらしいので他の代理店ではないかと言われる。
  8. 販売店に調査履歴があるか聞いてみたが、問題がないという答えしかないらしい。
  9. もうひとつの代理店に連絡してみたら、相性問題だから対応できないとのこと。
  10. メーカーにメールでのサポートがあるのでメールを送ってみる。
    国際電話でのサポートもあったが、国際電話をすぐにかけられなかったのでメールで。Appleのサポートセンターに連絡してみる。
  11. やはり、他メーカーのものなので全てのものについて確認はしていないので動かないものもあるかもしれないと言われる。
  12. もう一度、SSDの箱に書いてある代理店に電話してみる。
    MAC OSにも対応してあると書いてあるのでなんで使えないのかと食い下がってみるが、販売店に連絡してくれという。
  13. メーカーからのメールで修理をしてくれるというメールが来ました。
    (このメールのおかげで販売店に強気にでられる)
  14. 販売店に電話して、メーカー、代理店2つ、Appleにも連絡したがなんの解決もできない。メーカーは、修理するから送ってくれと言っていると伝えてみる。
  15. 販売店が折れたのか、新品に交換するので送ってくれというので送り返しました。
    (送料は、こっち持ち)
    (特例だから、もし新しく送ったものがダメでももう終わりにしてくださいと釘をさされました)
  16. 数日後送られてきたSSDを接続してみたら、正しく使えました。
 約1ヶ月くらいのやり取り後に勝ち取った感じはありますが、販売店もクレーマーにハマったなーって思ってたかもしれないですね。
 でも、新しいものに置き換えたら、使えるようになりましたからね。
皆さんもあきらめずに対応してもらってくださいね。

PX-256M5Pro

2013 Japan IT Week 秋に行ってきました

 幕張メッセにて「2013 Japan IT Week 秋」がありましたので、見てきました。

以下のような展示がされていました。
第1回 通販ソリューション展 [秋]
第2回 ビッグデータ&データマネジメント展
第2回 データセンター構築運用展 [秋]
第3回 スマートフォン&モバイル EXPO [秋]
第3回 情報セキュリティ EXPO [秋]
第3回 Web&モバイル マーケティング EXPO [秋]

(クラウド)POS関連のところに興味を持ってみてました。

 実際の自分のお客さんにいるのですが、小さい店なのでレジスタをなくしたい。
レジ自体のメンテナンス費用や自分たちの欲しい機能が無いなどの不満を行っています。
さらには、お店のスタッフは、そのレジスタの設定や使い方を覚えてくれないからなにか簡単な方法はないかと探しているようです。
 
 モバイルレシートプリンタやバーコードリーダーメーカーが固まっていたので全てのブースで同じことを聞いて回りました。
  • 二週間程度の貸出し(アプリケーションの動作確認)さらには、延長も可能
  • プリンタへの印字はXMLを出力するだけでいろいろなことができる
  • OPOSというOSSの企画に対応しているのでプリンタに対して細かい制御ができる
  • Android、iOS用のSDKがあるのでスマートフォンやタブレットでの操作が楽にできる
 バーコードリーダーのバーコードを読み取る部分の部品を作って、各メーカに出荷しているメーカーがありまして、そこは、可能だったら、作成したレジアプリケーションを展示会に紹介してもいいよと協業のことまで言ってくれるとこもありました(ここは、プリンタではいですが)。
 ※一人でやっているところにもそんな声をかけてるれるなんて嬉しかったです(社交辞令だったとしても)

 レジアプリなどは、Ubiregiなど有名ドコロはありますが、利用料金はそれほど安くなかったりします(店舗が大きかったり、なん店舗もあるとトータルでとても安いのかもしれませんが)。
 ここまで、機能はいらないから安くならないの?というとこが多いかもしれません。


開発ツールで興味があったのは、RAD Studio XE5です。
これは、1ソースで、Android, iOS, Windows, Mac OSXのアプリケーションを生成できます。
言語は、Delphi(Object Pascal)です。

 Delphiは、.NET Framework(VB.NET, C#)が発表されたことで、駆逐されていましたがこれで再び世の中に出ていけるのでは無いでしょうか?
なんせ、1ソースでマルチデバイス、OSに対応できるのですから。
monacaなど、PhoneGapなどでマルチOSに対応するHTML5のツールはありますが、こちらは、ネイティブになるのでアドバンテージはあるのでは無いでしょうか?
 ただ、また、Delphiがなくなのでは?という恐怖は拭えないです。
これは、来年度買って試そうかなと思ってます。その前にトライアルですが。

最後に、snap recというサービスがありました。
これは、画像や動画をネットワークの速さに合わせて、リアルタイムに圧縮してくれるサービスです。
デモをしていましたが、確かに1/5くらいのスピードになっていました。
例えば、光回線など高速回線の場合は、何もせずに、3Gなどの遅い回線場合は、画像の不要な情報(色データや画像の補足情報等)を削除してブラウザに送ってくれるそうです。
JavaScriptとimgタグへの一部書き換えで対応できるそうです。
 100万ヒット未満の場合、9,800円/月だそうです(普通のところはこれで良いのでは?)。
動画もやってくれるそうですが、これは、回線速度に合わせたなんパターン化の動画を準備しておくようなことを言ってました。


あまり、為にならないかもですが、以上です。


2013年10月19日

第35回 寺泊シーサイドマラソンで走ります

 明日は、寺泊シーサイドマラソンのハーフを走ってきます。
先週の新潟シティマラソンに続いての連闘です。

 先週は、体の部品的にはそれほど問題なかったのですが、体力の問題で二時間をきることができずに残念な結果になってしました。
 本来は、真面目に練習をしてからトライしないと大怪我につながるので良くないのですが、ほんの5,6回だけ10kmを走っただけでした。

 ある意味、新潟シティマラソンが寺泊シーサイドマラソンの前哨戦みたいになっています(笑)
規模的には、逆ですが…。

 明日は、とても早起きをして寺泊に出発です。6:30頃には出発しないとダメだな。

追記
えー、とっても雨です。
今年もびしょ濡れで走ります。
スタート地点に移動するのも辛い。

追記2
雨だたので体温もそれほど上がらずに先週よりもタイムが良かったです。
ゴール間近に知らない女性の人とデッドヒートになり、残念ながら胸差くらいでまけました。



2013年10月16日

WindowsXPのサポートが終わるにあたって(その3)

最後に…。

こういえば伝わるだろうか?というのを一つ。

WindowsXPを使い続けようとしているユーザに

「サポートの切れたWindowsXPを使っているのは、メーカーの保証期間が切れたテレビを使っていると、発火する可能性が80%くらいに上がり、修理も一切しませんという状態ですよ。」

という喩えを使えば伝わるだろうか?


でも、真面目に考えないとね。
WindowsXPの時に使ったパソコンもまだ現役に使えるようにすれば、余計なお金も使わずに済むし。

2013年10月12日

WindowsXPのサポートが終わるにあたって(その2)

 WindowxXPをLinuxディストリビューションに変更した時に問題はないのか?ということになります。

Linuxディストリビューションにしても問題はあります

現在作ったEXCELやWORDのファイル、Linuxディストリビューションには無いソフト(例えば、はがきソフト)とかのデータはどうやって使えるようにできるのでしょうか?
 やはり、そのまま使うことはできません。Office製品のデータは、データコンバートすることでLibreOfficeで読み込むことができるようになると思います(やはり、完璧ではなく、一部正しく変換できない場合があります)。

 データをコンバートする先がない場合は、どうするか…。
似たソフトウェアを探すか、作るか、汎用データ(よく言われるCSVファイルとか)に変換して、他のソフトで使えるようにできるかを検討する必要があります。
 はがきソフトとかはどうするんでしょうか?
LibreOfficeのWriterで対応できそうですね(簡単では無さそうですが)。

 確実に同じデータを使うようにするには、やはり、新しいWindowsに移行してそれに対応した既存のアプリケーションをインストールし直す(ライセンスには気をつける必要があります)必要があると思います。
 

結局は!

どの方式でWindowsXPから脱却するかは、利用者にかかっています。
さてあなたならどうしますか?

例えば

じゃ、筆者だったらどうするか?
パソコンに使う予算にもよりますが、新しいパソコンを買うことができる予算があるのであれば、新しいパソコンを買います(そもそも前からこのようなことになることをわかっているので、お金をこつこつ貯めていると思います)。
 そして、古いパソコンは、Linuxディストリビューションをインストールして古いパソコンも使ってみます。
 パソコンのことを詳しいからできるんだと思われるかもしれませんが、そのとおりです。
 自慢でも何でもないです。事実なだけです。

 周りに相談する人がいないんでしたら、なんとかお金を工面して新しいパソコンを買うほうが良いと思います。
 今は、安くても性能の良いパソコンはいくらでもあります。

では、WindowsXPを早めに使うのをやめて、いろいろな問題を起こさないようにしましょう。

別に、Microsoftの回し者でも何でもないです。

WindowsXPのサポートが終わるにあたって(その1)

 一般の方でWindowsXPをお使いの方でサポートが終わるというのをどう感じていらっしゃるでしょうか?
 報道や雑誌で、セキュリティへの問題があるのでWindows7など、XPより後に発売されたOSに切り替えるようにとあります。

セキュリティは人だけでなく他の人にも迷惑がかる

私が思うに一般の方にセキュリティに問題があるといってもピンと来ないんではないでしょうか?
 インターネットで怪しいサイトを見なければよいとか、インターネットにつながなければ良いとか思ってないでしょうか?
 インターネットにつながなければほんとにセキュリティは守られるのでしょうか?やはり絶対ではないです。USBメモリや人からもらったCDとかからでもウイルスに感染したりする可能性があります。
 インターネットにつながっている場合は、他の人に迷惑をかけることもあります。
 一般の人にセキュリティについて聞かれるといつも言うのですが、「ウイルスソフトをちゃんとアップデートしていても感染するときは感染します。でも、最新のものを入れておくと感染する確率が大幅に下がります。」と。
 ※絶対安心なんてありません。現に新しいウイルスなどはどんどん開発されています。絶対大丈夫という人がいたら怪しんでください。

WindowsXPパソコンは勧められても買うべきではありません。

あまり大きい声では言えないですが、WindowsXPがインストールされている中古パソコンは、買わないほうがいいです(実は、売る方もどうかしていると思っています)。あと6ヶ月間使用できれば、あとは使わないというのは、その時そう思っただけで、必ず(と言っていいほど)使います。
 見た目、問題んなく動きますからね。
テレビとかだってそうですよね。写っている間は、見ますよね。それは、見えなくなるだけという問題しかないからです。
 もし、メーカーのサポートが切れた時点から、発火する可能性が急に上がると言われたらどうしますか?テレビが映るからって使いませんよね。
 それと同じです。

じゃぁ、どうするのさ?

私が思うにやはり、新しいOSのインストールされたパソコンを買うか、今のパソコンのOSを入れ替えることが良いと思います。
 じゃぁ、どんなOSが良いの?Windows Vistaや7、8は動くの?となると思います。
まず、無理だと思います。うまく行ったとしてもOSは動きますレベルで終わる可能性があります(遅いからという意味です)。
 
 世の中には、Linuxディストリビューションというものがあります。
やはり、これもパソコンのスペックによりOSは動いて他のアプリケーションは、動作しないというパソコンのリソース(CPUやメモリ)を大きく期待するものもあります。
 ですが、逆にパソコンのリソースがそれほど大きくなくても動作するものもあります。

 今このブログは、LinuxMintというLinuxディストリビューションにChromiumというブラウザをインストールしてそこで書いています。
 パソコンは、PanasonicのLet's note CF-Y4です。(メモリ:1.5GB CPU:Pentium M 1.5GHz)
ネットサーフィン(もう既に死語?)だけだったら、これで十分です。
プレインストールされているソフトウェアもたくさんあります。

  • ブラウザ:FireFox
  • メール:ThunderBird
  • Office製品:LibreOffice
  • 画像処理:GIMP
  • アクセサリ:電卓、エディタなど

一般的なWindowsパソコンについているソフトウェアはついているようです。
ただ、日本語入力ソフト(IME)がプレインストールされていないのでインストールが必要です。

続きます。

新潟シティマラソン 2013受付してきた

 さっき、新潟シティマラソン 2013の受付をしてきました。
受付には、結構人がいました。
当然のように、スポーツドリンクや、スポーツ用品を売るお店も出ていました(悪いわけではなく、事実を言っただけです)

 さて、明日のシティマラソンですが、晴れ時々雨というヤフー天気予報が出ていました。
2013/10/12の新潟の天気

 去年に続いて、今年も、高橋尚子さん(Qちゃん)がゲストランナーとして来ますが、Qちゃんは雨女?
 去年初めて本物をみましたが、綺麗ですね。年齢もひとつしか違わないのにびっくりデス。
やっぱり、スポーツしてる人とか、人に見られている人はすごいですね。

 今年は、全然練習ができていないので体重も10kgくらいオーバーしているので完走するのが目標という最低レベルでの出場です。
 自己記録を更新することは、当分というかもう無いですね。ははは。

 でも、いつかはフルマラソンを走ってみたいと思っています(東京マラソンは落選。←お前はまだ早いという意味でしょう)。


 いないと思いますが、ゼッケン「778*」で走っているので気づいて人は声をかけてみてください。
「こんちはー」くらいはいうと思います。

 では、明日頑張って走ってきます。


Bloggerのブログの説明のフォントサイズを変えたい

 Bloggerのブログの説明のフォントサイズって大きすぎると思いませんか?
それを変更する方法です。
実はとっても簡単です。他のところもこの手法で対応できます(ふつーのやり方のようですが…)


手順
  1. テンプレートのデザイナーを起動します。
  2. 左上あたりにあるメニュー(?)から「上級者向け」を選択します。
  3. 2.の右にあるサブメニュー(?)から「CSSを追加」を選択します。
  4. 右側に入力欄が表示されるので以下を入力します。
    .Header .description {
      font-size: 100%;
    }
    CSSの意味の説明はしませんが、「ブログの説明」は、このスタイルでフォントの大きさを決めています。

 なぜ、「.Header .description」というのがわかるかというと、(Google Chromeの場合)F12を押すと、ブラウザーの下にデベロッパーツールが表示されます。
 これで、「ブログの説明」のスタイルを調べます。

下の「.Header .description」がデフォルトのCSSです。「font-size: 140%」が取り消し線で消されているのがわかると思います。
上の「.Header .description」が、「CSSの追加」で追加した内容でこれが有効になっています。

IT Pro EXPO 2013に行ってきました

 仕事柄IT関連の展示会は、時間をとって見学に行ってます(情報収集の為に)。
春にあるSODECに比べると超小規模ですが、ちょっと興味があるところがありました。


コードレスでアプリケーション開発


マルチプラットフォームのアプリケーションをどうやってつくるかとか、コンポーネントを配置するだけでWebアプリケーションを作るとかに興味が引かれました。

  • Magic xpa Application Platform
    マルチチャンネル、マルチデバイス対応、エンタープライズアプリケーションのための統合開発/実行プラットフォームとあります。
    もともと、dbMagicを販売していた会社が紆余曲折してできた会社のようです。
    このツールの一式は高額だと思いますが興味あります。
  • OutSystems Platform
    アプリケーション開発画面(ブラウザベース)でコンポーネントを配置することコードレスで、Webアプリケーションをサーバーサイドのプラットフォーム(.NET Framework、Java)に合わせて、自動生成してくれるツールです。
    デモでは、マスタメンテナンス(1テーブル)をマウス操作だけであっという間に作って見せてました。
    無料で使う方法もあるようです。使うコンポーネント(ifとかに)ポイントがあってそのポイントが基準値以下の場合、無料で使用できるようです。

WindowsXPのサポート終了の対応


マイクロソフトは、やはりWindows8.1への切り替えを勧めていました。
 自分が使いたいハードウェアやソフトウェアが新しいOSに対応していない場合のアドバイスはできませんが、そうでない場合はやはり新しいOS(Windows8.1)に切り替えたほうが良いと思います。
 Windows8.1では、デスクトップをデフォルト表示する機能もできています。
スタートメニューがなくなったからダメという話もありますが、無料アプリケーションとしてスタートメニューも公開されているようですし。
「といっている自分も、以前WindowsXPが出た頃は、画面の見た目だけで、Windows2000でいんじゃね?なんて思っていました(見た目が洗練されていない感じがしたんです。ただそれだけ。)」
やはり、セキュリティが強化されているのと前の状態もどるとは思えないというのを考えるとWindows8.1を選択したほうが良いと思います。


クラウド関連

 NIFTY CloudとAmazon Web Service(AWS)が大きく展示していました。

 目からウロコというか自分の調査が超不足していたのですが、AWSの従量課金ですが、何も使わなくてもインスタンスを立ち上げているだけで課金されて青天井になるんではないか?と思っていました。
 ですが、リザーブドインスタンスという前払い契約をすると大幅な割引をしてくれるようです。
例えば、スモール(デフォルト)ですと1年間で$61($0.034/1時間)だそうです。
 オンデマンドインスタンス(完全重量制)だと$(0.060/1時間)だそうです。一時的にサーバーを立ち上げてテストに使うとかはこっちで契約すればよいんだと思います。
まぁ、CPUだけでなく、データ転送量やディスク量などによってもトータルコストは変わってくると思いますので、そこはご自分で判断してください。

 NIFTY Cloudは、あまり見てませんでしたが、小さく初めて大きく育てるという話をしていました。
例えば、最初は、1インスタンス(オンプレミスの1サーバーという意味)でWebサーバーとDBサーバーを備えて、利用が大きくなったら、今使っているインスタンスをコピーして2インスタンスにして、1方をWebサーバ専用、もう一方をDBサーバー専用にすれば簡単にサーバーを増やすことができますよという話をしていました。
 更にその手法を使ってWebサーバをバランスさせたり、DBを…と話をしていました。

NIFTY Cloudにかぎらず、クラウドでサーバを持つメリットだと思います。
必要になったら増やして、不要になったら削除する(サーバーすら残らないからデータの漏洩もない)という素晴らしい使い方だと思います。

ライブラリ関連

 自分は基本的にソフトウェアデベロッパーなのでこれから開発していくであろうアプリケーションで使えそうなライブラリを物色します。
 でも、ライブラリは結構高かったりするんですよね。
で、気になったライブラリをすこし。

 iOS/Android向けのOCR ライブラリです。
 あまり話を聞けなかったのですが、役に立ちそうです。
手書き文字を認識してくれるライブラリに興味があります。(予定とありましたが…)

 翻訳専門の会社のようですが、Google翻訳とかの誤訳をユーザ辞書を使っての翻訳をするソリューションです。
 海外のマニュアルなどを翻訳するのに使ったりしているようです。
やはり、ツイッターなどの口語などは難しいといってまいた(まぁ、辞書ありきですから仕方ないです)
あと面白いのものでメールの翻訳依頼をすると翻訳してくれたり、そのまま相手に送信してくれるサービスもやっているようです。
 1語いくらというのでした。
  • 英語 8円
  • 中国語(簡体字) 5.5円
  • 中国語(繁体字) 5.5円
  • 韓国語 5.5円
  • タイ語 6円
  • ベトナム語 8円
  • ドイツ語 10円

その他感想とか

 毎回、きれいなお姉さんがノベルティを強制的に配って、名刺を持っていくのが鬱陶しかったりします。
 当然、ほしいものもありますが、名刺も持って行かれてしまうのがちょっと…な感じです。
全ての会社でバーコードを読む方式にして欲しいです(利用料がかかるからしないんでしょうけど)

 どこかのブースで「革新を続ける ソフトウェア生産技術」という本を二冊もらってしまいました。
2,500円で発売したての本でいした。
 内容はまだ読んでいないので詳しくは書けないですが、こういうこともあるんですよね。
集団で本とかノベルティをたくさんもらって、オークションに掛ける人たちとかいるんでしょうね?

 こういう展示会を見て、仕事の参考にしたり、知見を広げるのはとっても大切なことだと思います。
どれくらいの会社社員の人が行こうとするかはわかりませんが、ちょっと世の中の流れとか向きを見るのもいいと思います。
 10/23~25には、幕張メッセでJapan IT Week秋というのがあります。
ぜひ出かけてみてください。

戦利品


2013年10月7日

レンタルサーバーのファイルがダウンロードできないという話

 あるクライアントがレンタルサーバーを変更するということで、ホームページのデータを送ってもらったのですが、運用されているデータと管理されているデータの内容が違うという話を以前しました。
 結局、最終手段のレンタルサーバー内のファイルをダウンロードして、それを新しいサーバーに持っていくことにしました。

 で、移行元のレンタルサーバーからダウンロードした時に、エラーになってダウンロードできないファイルがあったそうです(担当の人がサポポートの人に聞きながら頑張ってFTPのツールを使っていたようです)。
 こんな作業をしたことがある人は大体あのあたりだと察しがつくと思います。

 サポートの人も結局わからず、「一つずつファイルをダンロードしてください。多分ダウンロードできないファイルは、使っていないと思います(うーん、勝手な解釈だ…)ので削除しても大丈夫だと思いますが…。」という答えを出したようです(サポートの人に全てを解かれっていうのは酷な話ですが)。

「結局は、レンタルサーバーにマルチバイト(全角)文字があったため、FTPのツール側で文字化けしてファイルをダウンロードできなかったのが原因でした。」

 まぁ、このおかげで、チャリンといったのでよかったんです。


 「実は、こんな仕事はあっちこっちにたくさん転がってるんじゃないかと思いました」


ワープロ感覚でホームページを作りたい人へ。

2013年10月4日

ソース管理は大切という話

 仕事で、ホームページを新しいレンタルサーバーに移行するというのを請け負ったのですが、思った通り運用されているHTMLと管理されているHTMLの内容が違っていた。

 きっとこうゆうことって永久に無くならないんだと思うが、とても悲しくなる(それも、もともとコンピュータのシステムもやっていた会社だと思うと)
 (システム屋と関係ない総務の人だけどここらへんを叩き込んでこようかな?でも、その会社の従業員ではなく、パートだからどうしよっかなー?)

 ソースファイルを複数人が上書きしてしまって壊してしまうとか、誤って消してしまう可能性があるというのを考えることができないんだろうと思うが、あまりにも悲惨。
 一人でやるから大丈夫とかというのも全くの誤解。

 もしそんなことが発生したら、運用しているサーバーから持ってくればなんとか復旧できると思っているんだろうがそんなのは、ホントの最終手段であって、とっても古かったりするんですよね。

 だから、ちゃんとバックアップとかリビジョン管理とかちゃんと勉強とか教えてもらってやったほうが良いですよ。
 引き継ぎもちょっと楽になるしね。

 最近は、Gitとかの分散して管理するのが流行っていますが、初級編としては、Subversionの集中管理から入っていって基本的なことを理解できて、運用ルールとかを自分たちで決めることができるようになってから、Gitとかに進んだほうが良いかと思います。

 ある会社に出向していた時にSubversionの運用ルール説明書とか環境設定とかのドキュメントを作っておいてきたけどあまり見られていないみたい。もったいないです。
 あるとき、回し読みとか(別に回す必要はありませんが)してる?とかって聞くとそういうのがあることすら知らないらしい。
 知っている人は、知っているが、知らない人は全然しらない。さらに知っている人は、全ての人が知っている前提で話をしてしまうという悪いながれも発生する。
 だから、正しい使い方をせずに事故る。で、その上司がこのツールを使ったから事故ったと騒ぐ。

 途中から全然違う話になってきたのですが、ソース管理は大切ということを声を大にして言いたいです。


 皆さん、ソースファイルを「共有サーバーに管理しています」なんて自慢気に大きい声で言わないでください。
 それは、ただみんなが見えるところに置いてあるだけだから誰かが壊してしまう可能性があるんですよ。

 あっ、そういえば、「俺、ローカルに全部バックアップしてる」とかって自慢気に言ってる人いたけどアホです。真似しないように。

私のSubversionのベースはこれです。
同じファイルを更新した時の動きとか仕組みとかを実際に手を動かして調べました(全てでは無いですが)。


実践入門とあったので一応紹介。


2013年9月28日

sphero買ってみた

 WBS(ワールドビジネスサテライト)で紹介していた、ちょっと高めのおもちゃを買ってみました。
ほとんど勢いで買ったんだけど、結構いい動きをします。

 AndroidやiOSの端末にアプリをインストールしていろいろなことができるようです。
まだ、やってませんがAR(拡張現実)で遊ぶこともできるようです。



実際に遊んで見た


sphero

2013年9月26日

JavaScriptでタスクをスケジュール実行する

 あるシステムで任意のタスクをスケジュールされた時刻になったら、自動的に実行するという要件がありまして、それをJavaScriptで実現するためのクラスを作ってみました。
 タスクの終了関係なしに、時間が来たら次のタスクが実行されます。
 もともと、Javaでやっていたものの移植になります。

ファイルの説明

  • index.html
    ジョブを実行するサンプルのhtmlです。
  • main.js
    ジョブを実行するサンプルのJavaScriptです。
  • scheduler.js
    ジョブのスケジューリングを行うメインのJavaScriptです。
    TaskerとSchedulerという2つのオブジェクトがあります。
    Taskerは、主にタスクのスケジューリング管理とタスクの実行を行います。
    Schedulerは、スケジュールデータのタスクデータを管理します。


用途
 テレビのように時間が来たら番組が変わるように、時刻をきっかけに動画の再生を強制的に切り替えるようなアプリケーションなどに使えると思います。
 実行中のタスクを無視して次のタスクを実行するというような要件がどれくらいあるかわかりませんが…。

使い方の解説
 最低限やることは、3つだけです。

  1. タスクデータの準備
    タスクを連想配列として定義し、配列として準備します。
    タスクのデータ構造は、自由に定義してもよいですが、タスクの実行開始時刻を計算できる項目を持たせる必要があります。
    TaskerのgetIntervalTimeでタスクを実行する前のIntervalTime(待ち時間)を計算するためです。
  2. SchedulerとTaskerのインスタンスの準備と、Taskerの一部関数の書き換え(Override的な)です。
    TaserのインスタンスのuserProcessとgetIntervalTime関数を書き換えます。
    userProcess関数は、タスクを実行する関数の内容を記述します。引数として、タスクデータを受け取ります(サンプルでは、タスクデータのmsgキーの値をコンソールに表示しています)。
    getIntervalTime関数は、受け取ったタスクデータを実行するまでの時間を秒で返却します(サンプルでは、現在時刻とタスクデータの時刻の差を算出し、秒にして返却しています)。
    他にも、startJob、endJobという関数があります。それぞれ、ジョブの開始時と終了時に呼び出されます。
  3. 上記準備ができたら、実行します。
    SchedulerのインスタンスをTaskerにコンストラクタに渡してインスタンスを生成し、実行します。
    実行するためには、Taskerオブジェクトのexecuteメソッドを使用します。
    executeメソッドは、bool型の引数を一つ持っています。
    true..既に開始時刻を経過しているタスクを即実行し、次のタスクをスケジュールする。
    false(または、未指定)..既に開始時刻を経過しているタスクは実行せずに、次のタスクをスケジュールする。

    コーディング例)
    var data = [
                {time: "100000", msg: "タスク1"},
                {time: "100100", msg: "タスク2"}
               ];
    var sch_data = new Scheduler(data);
    var task = new Tasker(sch_data);
    task.execute(false);
    

Download

おすすめ図書

2013年9月24日

Mac miniでSSDのファームウェアアップデートする

 以前、Mac miniでSSDを増設する記事を書きましたが、SSDのファームウェアがバージョンアップしているようですのでそのやり方をメモします。
 大抵のメーカでは、iso形式でファイルを配布しており、linuxを使ってアップデートをしているようです。

※USBメモリにisoファイルを書き込むツールは、Windows上で動作します。

 今回ターゲットのSSDは、「PX-256M5Pro」です。他のメーカのものでも同じようにできると思います。


  1. ファームウェアのisoファイルをダウンロードする。
    PX-256M5Proのファームウェア(1.05)
  2. UNetbootinをダウンロードする。
    ISO形式のファイルをUSBブートできるようにするツールです。
  3. UNetbootinを起動して、ディスクイメージに予めダウンロードしていたisoファイル「PX-256M5Pro 1.05.iso」を指定し、OKをクリックする。
    これでUSBメモリで起動できるようになります。
  4. Mac miniのUSBに作ったUSBメモリを挿して、optionキーを押しながら起動すると、起動ドライブを選択できるようになるので、USBメモリを指定して起動します。
  5. 青い画面でメニューが3個表示されるので、中央を選択して、Enterキーを押してください。
  6. その後は、起動したインストーラにしたがってインストールをします。
  7. A:\>が表示されたら終了です。ここで何をしても終わらないのでMac miniの電源を入れ直します。
 文字だけなのでわかりにくいかもですが、CDドライブが無くても簡単にファームウェアのインストールができます。


参考サイト


2013年9月23日

CakePHPでJSONPに対応させる

 CakePHPは、レスポンスをJSONで戻しても、JSONPに対応することができません。
バージョン2.4以降では、対応しているようです。

 今使っているCakePHPのバージョンは、2.3なので調べました。
同じことを調べて対応している方がいたのでサイトをメモしておきます。

be-hase.comさんのサイトです。

対応方法を抜粋すると以下のとおりです。

  1. lib/Cake/View/JsonView.phpをapp/View/JsonpView.phpへコピーする。
  2. コピーしたJsonpView.phpの改造する(後述)。
  3. json形式でレスポンスする時のviewClassを"jsonp"に変更する。
    コーディング方法は、CakePHPでjson形式でレスポンスする方法参照。

JsonpView.phpの抜粋
変更点は、クラス名とrenderメソッドのみです。

クラス名の変更
JsonpViewに変更する。

renderメソッドの変更
赤字の部分が変更した箇所です。
レスポンスデータをjson形式にした後に、Queryパラメータにcallbackが付いていたら、Content-typeをJavaScriptに変更し、レスポンスデータをCallBack関数の引数にするという処理を記述します。

public function render($view = null, $layout = null) {
$return = null;
if (isset($this->viewVars['_serialize'])) {
$return = $this->_serialize($this->viewVars['_serialize']);
}else if ($view !== false && $this->_getViewFileName($view)) {
$return = parent::render($view, false);
}
if(isset($this->request->query['callback'])) {
$return = sprintf('%s(%s)', h($this->request->query['callback']), $return);
$this->response->type('js');
}
return $return;
}

ちなみに、呼び元は、JQueryの$.ajaxを使っています。


これで、サーバーサイドのアプリケーションは、ますます、CakePHPで作ることが多くなりそうです。
WebAPIは簡単に作れますね。

参考図書

CakePHPでjson形式でレスポンスする方法

  サーバーサイドのアプリケーションをCakePHPで作成した、クライアントに(Androidだったり、ブラウザだったり)Json形式でデータを返却する時のコーディング方法について説明。
 実に簡単!


コーディング例(コントローラクラスで記述)
  1. // Json形式にするデータ
  2. $data = array('k1'=>'d1', 'k2'=>'d2', 'k3'=>'d3', 'k4'=>'d4', 'k5'=>'d5');

  3. // Json形式で返却する
  4. $this->set('json_data', $data);
  5. $this->viewClass='Json';
  6. $this->set('_serialize', 'json_data');
返却結果
 [{"k1":"d1", "k2":"d2", "k3":"d3", "k4":"d4", "k5":"d5"}] 
  • 2行目:Json形式として返却するデータを配列や、連想配列で作成する。Modelからデータを取得してもなんでもOK
  • 5行目:Json形式で返却するデータをViewにセットする。(複数ある場合は、必要分セットする)
  • 6行目:Viewを編集するクラスを"Json"に変更する(setしたデータをJson形式にしてくれる便利)
  • 7行目:キー名に"_serialize"を使用して、setメソッドでセットしたキー名を設定する。これで、Json形式のデータにして返却してくれます。
    第二引数を配列にして複数のキー名を指定することもできます。
    例)$this->set('_serialize', array('json_data', 'json_data2');
    配列にした場合、指定したキー名は、Jsonデータのキー名になります。

公式サイトの説明
JSONとXMLビュー


参考図書


2013年9月18日

Mac miniにSSDを増設してみた

 いままでは、Windowsとか、Linuxしかさわってなかったのですが、iOSのアプリ開発もしたいと思って、Mac miniを購入しました。
 Apple Storeでカスタマイズした状態で購入すると、結構高くなってしまうので、安く売ってるとこからバラバラで買ってあとで組立てることにしました。

 初めてのMacでメモリはいいとして、SSDの増設は実は、保証対象外になる可能性があるらしいです。(参考サイトを見ても自信がない人は行わないようが良いです。
 それと、既存のハードディスクの位置(上下)によって使用するSSDのケーブルが違うということもあります。
 結局、Mac mini本体が来てから上下のどっちにドライブがついているかを確認してから増設キットを注文しました。

 Fusion Drive化の時に、Macの勝手がわからないのでちょっと戸惑ったりしたとこは、ありましたが、下に書いた参考にしたサイトの手順通りにすればできます(先人の人に感謝です)。

 ただ、SSDの速度が出ないのでおかしいと思って調べたら、購入したSSDがSATA2.0の遅いやつでした。SATA3.0のやつだったら1.5倍くらいの速度になりそうです。
 なので、買い直しです…(涙)。


購入したもの
  • Mac mini
  • SSD 250GB
    左は、誤って購入したSSDです。本来は、右を買う必要がありました。
    違いは、速度です。SATA2.0(3Gbps)かSATA3.0(Gbps)です。
    1.5倍は速度が違うようです。
  • メモリ 16GB
  • ワイヤレスキーボード
  • Magic TrackPad
  • 増設キット
    必要最低限ですが、トルクスドライバー6,8がもついているのでとても良いです。
やりたかったこと
  • SSD+HDDでFusion Drive


参考にしたサイト


こんなにバラバラにしてから、SSDを付けてから組み立て直します。



2013年9月16日

つい翻訳0.7.1公開しました

 
 ツイッターのタイムラインを多言語に翻訳するAndroidアプリを機能強化して公開しました。

2年前にAndroidことについて右も左も分からない状態で開発して公開したアプリです。

良かったら使ってみてください。


つい翻訳


2013年9月10日

メールの書き方

 昨今はメールでやりとりすることが多いと思いますが、そろそろメール本文のレイアウトにも気をくばって書いてほしいものです。
 ※かといって、自分が正解とか、これが標準とかいうつもりはありませんが。

気になるメールたち

  1. メール本文の右上らしきとこメール送信者の所属や名前を書く
     報告書とか文書のレイアウトでは、文書の作成者の情報を右上に書くと思いますが、メールでもそうする人がいます。
    自分のメールソフトのエディタ上では、右上っぽいかもしれませんが、受信者のメールソフトでは、真ん中だったりしますよ。
  2. メールのスレッドのことを知らない
     全然関係ない内容を別のメールの返信で書いてしまう。
     これをされると何が起こるかというと、メールをスレッドで管理しているとメールが行方不明になってしまう(探せば良いのでは?というのは、愚の骨頂)。
     やりとりは、流れで見たいので途中に無関係の内容が入るとか作業効率を著しく低下させる。
     これは、会社がデフォルトで提供している古いメールソフトを使っている人に見られます。
    せいぜい、振り分けと日付とかでの並び替えくらいしかできないような古いものの場合です。
  3. インデントをスペースで空ける
     前行と行頭を揃えるために、スペースで埋めたりしますが、メールソフトによっては、ただガタガタするだけで、何もいいことがない。
    せいぜい、文頭の空白ぐらいでしょ。
  4. 文書の改行位置がでたらめ
     自分のメールソフトの横幅で改行させてしまうので、受信者側のメールソフトではおかしな所で改行されていて読みづらくなってしまう。
    やはり、。や、で改行させるほうがよいと思います。
     日本人特有(と言われていたような…)の枠の中に収めたいという欲求のせいでしょうか?
 面倒だとかいう人は、「結果的に読めればいいんじゃね?」とかいう人もいると思いますが、そういう文書は、内容がどんなに良くても読んでもらえなくなってしまうのですよ。

 みなさん、「伝わればいいんだっ!」ではないんです。伝わるのは当たり前なのです!どれだけ、読みやすいとか、誤解されないかなんです!

2013年9月9日

TeamViewerを買うことを検討

 あるユーザにリリースしたアプリケーションが動作しないということで問い合わせが来ました。

 絶対、正しくリリースをしたはずだと思って、当時のことを思い出したら、古いファイルを上書きして帰ってきたことを思い出してしまいました。
 上書きしたらそのファイルの内容をちょっと変更しないとダメということをすっかり忘れていました。

 実際は、Access2003のMDBファイルないのテーブルレイアウトを変更する必要がありました。
修正内容は、大したことないのですが、利用者に直してもらうのは、危険なのですが、「伺うのは手間でしょうから、手順を教えてくれれば修正します」と言っていただいたので、電話で対応しました。

 その後、まだ、連絡は来ていませんが、多分大丈夫と思いますが…。

本題

 今回思ったのですが、やはり、リモートで他人のPCを操作できるようにする機能がほしいということで、ちょっと思い出しながら探しました。

 TeamViewerという製品があります。
これは、個人で使用する場合は、無料で使用できますが、商用で使用する場合は、有料になります。
55,300円くらいなので、ちょっと買うことを検討しようかと思いました。

 良い所は、リモートで操作される側は、アプリケーションをインストールしなくても、TeamViewerを QuickSuppoert(顧客モジュール)実行してもらうだけで、通信経路を確保できるのでとても便利です。
ダウンロード:TeamViewer QuickSuppoer(顧客向けモジュール)



 これで、サービス向上になり、お客さんの満足度が上がるのであれば、安いものです。

 ただ、問題は、こういうサービスを悪用して、不要なアプリケーションをインストールしたり、情報を盗んだりする悪い人がいるということです。
 ユーザには、信用してもらうしかないんですけどね。

2013年9月5日

言葉を知らないと恥ずかしいという話


支払サイトという言葉を知らない営業の人がいた。
少なくとも営業をしている人の中では、当たり前用語だと思うんですが。

「支払サイトは、何日ですか?」という話をしたら、「えっ?ホームページのアドレスですか?」とWebサイトのことだと思ったらしい。


自分も一般用語とかその業界の用語くらい知っておこうと思う一幕でした。
でも、ちょっと寒くなりました。

2013年9月4日

Accessのトランザクションにハマるの巻

 人から引き継いだMS Accessのプログラムで外部ファイルをテーブルに取り込んで処理をするというよくあるプログラムのバグ調査をしている時にトランザクションに関わるプログラムのバグに悩まされた。

 トランザクションを開始してから、入力ファイルがないのでそのサブルーチンをを抜けるというロジックがありました。
 で、トランザクションを閉じず(Commitとか、Rollback)にサブルーチンを抜けているもんだから、次のサブルーチンでトランザクションを開始してテーブルにレコードをいくら登録して、全然登録されないという気持悪い現象に大ハマリでした。

 1)トランザクション開始(BeginTrans) ← これをちゃんと閉じないのが問題!
 ↓
 2)トランザクション開始(BeginTrans)
 ↓
 3)レコードをINSERTを繰り返す
 ↓
 4)Commit
 ↓
 5)終わり

 1)のトランザクションがかかりっぱなしなので、4)でコミットをしてもデータは登録されずにそのまま。


 Accessは、Workspaceに対してトランザクションをかけるのですが、同じワークスペースには、1つしかトランザクションをかけられないので、1)のトランザクションは、かかっているけど、触りようがないトランザクションになっているのです。


 開けたら、閉める。これ当たり前の動作。皆さん気を付けましょう。


これでやっと、本当のバグ調査ができますよ。

2013年9月2日

SoftBank Arrows A 202F退院

 結構早めに、SoftBank Arrows A 202Fが戻ってきました。
思っていたとおり、「症状を確認できず」という答えでした。まぁ、どうやったらその現象を発生させるかも分からないのだから当然です。
 ですが、無償で基板を交換してくれたそうです。(治ったかどうかは別の話)

 まぁ、原因もわからいのに、修理しましたとかいって戻ってくるよりもいいですが。


きっとまた発生するような気がしますが、仕方ありません。

またダメだったら、よろしく!富士通モバイルコミュニケーションズの皆さん。

ただ、嫌だなとおもったのが、以下。

  • 液晶に貼ってある保護シートとかが剥がされてきて(最初に言われてますが)きて、また新しく買い直さないとダメなので、余計な出費がでる
  • 設定内容が全部なくなっているので元に戻さないと。
    アプリのダウンロードとか設定とか。

気をつけようがないですが、皆さん気をつけましょう。

2013年9月1日

フォルダをISO形式のファイルにする方法

 アプリケーションを作成するとセットアップ用のCDを作成すると思います。
ユーザへは、CDを納品して、トレーサビリティの為に自分のところにもCDをもつと思います。
でも、リリースのたびに2枚づつCDやDVDを使うのはもったいないのでちょっと調べました。

 フォルダをISO形式の1ファイルに変換してくれるツールです。

Folder2ISO
です。
窓の杜にレビューもあります。

 ISO形式にするファイルが保管されているフォルダと作成されるISOファイルの名前を指定するだけで、簡単に作ってくれます。

ポイントは、以下のとおりです(窓の杜のレビューにも書いていますが)。

  1. ISO形式にしたファイルを1ディレクトリにまとめる
    まとめ元のフォルダ名はなんでもOKです。ISOファイルには影響しません。
  2. Charsetは、UTF-8を指定する
    これをしないと、マルチバイトのファイル名が文字化けします。


 これでISO形式ファイル化すればファイルサーバーにそのまま保管しておくか、DVDやBlu-rayとかの大容量のメディアに保存しておけばディスクの枚数が稼げますよね。


 よかった、よかった。

メールに添付するファイルのファイル名とか

 メールに添付するファイルのファイル名に「○○添付.xls」とかってつけるのとかってどうかと思う。
その時点では、なんのメールかはわかるかもしれないけど、なんのメールかが全然わからない。完全にメモレベル。きっと、デスクトップにそのファイルがおいてあるのでしょう。

 今回の場合は、問い合わせ表に対する補足的な説明を書いているんだけど、それだったら、新しいブックに書くのではなく、その問い合わせのブックにシートを増やして書いてくれればいいんだけどね。

 以前にも、こっちから送ったファイルに対して内容を変更して送ってきたファイルの名前が「○○ コピー.xls」というのもあった。あとで判ったことですが、デスクトップにおいてあったファイルらしい。
 この時点で管理すらされていない。


寒くなるわっ。

2013年8月29日

EXCELで作る課題一覧とか

 EXCELで問い合わせのシートを作るのはいいんだけど、以下のことはやめてほしいものです。
 

改善して欲しいところ 

  1. 印刷した時にセルから文字がはみ出る。
  2. 入力した内容が用紙に収まっていない。
  3. 行を1行のセルに収めようとして、文を途中で切って次の行のセルに続きを書く。
  4. 方眼紙のようにセルを細かくする。


対応方法

  1. ちゃんとプレビューして確認してください。
    セルの書式設定の文字の制御で「縮小して全体を表示する(K)」をチェックすれば、自動的に縮小します。
  2. ちゃんとプレビューして確認してください。
    余白の設定や、「全ての列を1ページに印刷」とかを選んで横にはみ出ないようにしてください。
  3. 1行に収まらいときは、次の行のセルを結合して、自動的改行にまかせてやってください。
    その時、セル内ギリギリに入っているように見えても、印刷すると確実にはみ出るので、余分に1行を結合してください。
  4. インデントを合わせたいだけなんだったら、真面目にWordの使い方を練習して自動インデントに任せるようにしてください。



 そもそも、いろいろなページの自由度を上げるために、駆使してるのはわかりますが、メンテナンスのことを考えていないドキュメントになって、結果的に工数が増大するので考えなおしたほうがよいのです。
 作る人のことではなく、できたものにしか興味がない人はこうなるんでしょう。

2013年8月28日

SoftBank Arrows A 202F入院決定

 全然、電話がかかってこなくなったり(通常もあまりかかってこないんですが)、電話かけても全然つながらないことが頻繁にあったので、SoftBankのショップに持って行ったら、そういった現象の報告がユーザーからあるらしい(再起動すると一定期間治る)。
 Arrowsだけではなく、Sharpの AQUOS PHONE Xx206SHも同じらしい。

一応自分が使っている環境では、モバイルデータ通信をOFFしています。
このコトは、直接関係ないらしいですが…。

 他のメーカーの機種でも発生しているので、端末固有の問題ではなく、Androidの問題では無いかという疑いがかかっています。
 修理してくれるらしいですが、原因が明確でないのにどうやって修理するのか不思議です。
(問題発生しませんとか言って帰ってきたらパンチです)

 早く帰ってきて欲しいです。
余談ですが、
 別の代替端末を貸してくれるのですが、Arrowsに挿してあったSDカードが64GBだったのでそれが挿さる端末がないらしくて、1時間くらい待ってほしいと。
 PANTONEを出してきたので、もうちょっとしたら解決するのかな?

結局、今、携帯端末がない状態です。


9/2にSoftBank Arrows A 202F退院しました


関係ないですが、横のお客さんがクレーマー、クレーマーっぽい、おばさんでした。
 高速通信を高速道路での通信と思っていたらしく、高速道路で使っていないのにつながらないことがあるとかいって店員さんに喰って掛かってました。

 いろんな技術が組み合わさって作られているものとかことを自分が知っている世界だけで理解しようとするとはやっぱり無理がありますよね。
 ある、1のことを理解するために、その周辺の3くらいの事を理解しないと、最初の1が理解できなくて、3の中の1を理解するためには、またその周りの3くらいのことを理解しないとと永遠に続く。

 でも、車のエンジンの仕組みなんて知らなくても、車を運転できますよね。そういうことです。

 このおばさんは、知らないうちにお金を取られていると思っているんでしょうけど。
きっとパケット代は、固定のやつです。


2013年8月27日

消費税あがるって慌ててるけどさ。SEは何してるのさ。

 消費税が変わるからコンピュータのシステムを変更しないとだと慌ててるみたいだけど、ほんとにそうなの?
既に0→3→5を経験してるんだから、そんなに慌てること無いような気がするんだけど?

 でも、ほんとにヤバイってことになってるとしたら、そのシステム作った会社は、何してんのさ?
 前の会社の先輩で、消費税の5%をプログラム固定で使ってるのを外注さんに指摘されても、「問題ない。OK,OK.」って言ってるのを思い出した。

 そういう人たちのおかげでよくわかっていないユーザが無駄にお金を払うんだよね。
そう言えば、これでお金が稼げるんだからいいんだとか言ってる人もいたな。
悪人だ。自分さえ良ければ。の世界。

パケット料を安くしたいのに高くなった人へ

 知っている人は当たり前で何でしょうが、知らない人の為に(自分のその仲間ですが)。

 最近、4Gスマートフォン(Android端末)買った人で、通信費を安くするために、パケットし放題 for 4G(2,100円~6,510円)というパケット定額サービスを選択する人がいると思います。
 実は、この上限なんて一瞬にして超えてしまうので、あまり意味がないのです。割引も少し少なくなるし。

 でも、モバイルルータを持っている人は、常にモバイルルータを使うようにしておけば、最低額の2,100円で抑えることができるのです。(ここまで当たり前)

 でも、SoftBankのショップの人も教えてくれなかったのか、自分が無知なのかしりませんが、端末側で、「モバイルデータ」通信をオフにしておかないと、せっかくモバイルルータを持っていても、そっちと接続しないで、電話会社の回線につないで、上限があっという間に超えてしまうんです。
 (実際、4日くらいで、上限の15.5MBに迫りました。なので、初月は高いです)
 

 この条件を満たす人は、新しい端末を買ったらすかさず、「モバイルデータ」のスイッチをオフにしましょう。



上の写真の黄色で囲んでいるところです(写真は、Arrows A 202F)。
[設定]-[その他]-[データ使用]でこの画面にたどり着きます。

さぁ、OFFにして、安く上げましょう。

2013年8月22日

Windows2008 R2のMySQLにリモートPCからつなぐ

 わかっていたはずなのに忘れているという…。

 MySQL使った、アプリケーションのテスト環境を作ろうと思って、ファイアーウォールのことを忘れてて2時間も費やした。

MySQLをリモートPCから接続する為に、やること。

  1. MySQLが適切にインストールする。
  2. ファイアーウォールでプロファイルの指定を追加。
    実は、これにハマって閉まっていました。
    例えば、MySQL5.6をインストールすると、ファイアウォールの受信の規則に「MySQL56」というエントリが2つ作成されます。
    どちらでも良い(ドメイン用途、プライベート用の2つがある)ので、詳細設定のタブのプロファイルの設定の「パブリック(U)」にチェックを入れる。

    これしないと外から入れない。きっと、サーバーも、クライアントPCもドメインに参加していないからだと思うけど…。テスト環境だからOK.
  3. rootでログインしてリモート接続するクライアント用のアカウントを作る。(当然この作業は、MySQLをインストールしたサーバで行う。)
    環境
    DB名:oreore_db
    アカウント名:oreore_user
    パスワード:oreore_pw
    リモートPC名:oreore_pc(ここをIPアドレスにもできるよ。例えば、192.168.0.%とか)
    mysql>grant all on test_db.* to 'oreore_user'@'oreore_pc' identified by 'oreore_pw':
  4. リモートPCから接続してみる
    何を使って確認をしてもOK。
    ちょっと前からのDB操作のツールのトレンドは、「A5:SQL Mk-2」というものです。


 これできないと、DBを別のサーバーに入れられないので嫌なのです。(クライアントPCにサーバーアプリケーション入れたくないののろのろするから。)

2013年8月18日

MSDNサブスクリプションで思うこと

 よく、テスト環境のつくるのに、頻繁にWindowsOSをインストールし直すんですが、毎回、Windows Updateのパッチを当てきるのに何時間も費やしてしまうのを何とかしてほしいと思っています。

 毎月、毎月は大変だと思いますが、ある程度パッチのリリースがたまったら、それらを全部あてたバージョンをダウンロードできるようにしてほしいですのよ。

 今も、WIndowsXPのWindowsUpdateをやっているけど、「このコンピュータに該当する最新の更新プログラムを確認しています…」のまま緑の■が横に流れてます。


早くおわってよ。

Microsoft Access 2010のパッケージソリューションの作り方

 最近、MS Accessでアプリケーションを作成してほしいという依頼があって作ることは簡単にできるんですが、セットアップをどう簡単にしようかと考えてました。

 一番ラクなのは、ドキュメントベースでこの手順でセットアップしてくださいと書くことです。
もっとラクにするためにセットアップを作ることにしました。

 MS Access2010って作ったものをパッケージしてインストーラとしてまとめてくれる機能があるんですよね。とっても便利です。

 あまり、高度なことはできませんが、以下のことはやってくれるようです(自分調べ)。
  • デスクトップにショートカットを作る。
  • ショートカットのアイコンが指定できる。
  • スタートメニューにショートカットを作る。
  • 一緒にインストールするファイルを指定できる。
  • AccessのSecurityのレジストリにインストールしたフォルダを登録してくれる
    →これをしないと毎回、実行していいの?って聞かれる。
  • Access2010のランタイムのインストールをしてくれる。
    →ランタイムを指定しておくとやってくれます。

ポイント1

[セキュリティのレジストリは、以下のように設定します。
「追加レジストリ キー」を設定するところがあります。


  • ルート:すべてのユーザー
    他にも、
  • キー:Software\Microsoft\Office\14.0\Access\Security\Trusted Locations\[任意の名前]
    [任意の名前]には、例えばシステムの名前とかでも良いと思います。実際にレジストリを見るとLocation0とか書いてありますが、これらと重複しなければOKです。
  • 名前:Path
  • 値:[DATABASEDIR]
    [DATABASEDIR]と書いておけば、ルートインストール フォルダーとインストールサブフォルダーで指定したフォルダが自動設定されます。

ポイント2

Accessランタイムのサービスパックのインストールも同時にさせる。
パッケージソリューションでは、Accessのランタイムを指定しインストールさせることができます。
 合わせて、AccessのServicePacke1や2または、その他のインストールも同時にしたい場合、できあがったパッケージのSetup.iniを編集してやることでセットアップのプロセスに組み込むことができます。
Setup.iniは、セットアップのルート\Files\Setup\Setup.iniにあります。

では、編集方法。
 Accessのランタイムをインストールするようにしておくと、「[ChainedInstall_1]」という記述を見つけることができます。これは、AcceccRuntime.exeをインストールするためのものなのでそのままにしておきます。
例えば、AccessRuntimeのサービスパック2(accessrtsp2010-kb2687444-fullfile-x86-ja-jp.exe)を同時にインストールしたい場合は、以下のように記述を追加します。


  1. [ChainedInstall_2]
  2. TaskName=Access Runtime SP2 Setup 
  3. TaskType=exe
  4. Path=\Files\accessrtsp2010-kb2687444-fullfile-x86-ja-jp.exe
  5. IgnoreReturnValue=0
  6. ;cmdline=/passive


1行目は、AccessRuntimeは、「ChainedInstall_1」なので「ChainedInstall_2」にします。
2行目は、このセットアップは何かをわかりやすい名前を書きます
3行目は、実行するファイルの拡張子を書くようです。(msi形式の場合は、msi)
4行目は、実際に実行するファイルのパスを指定します。
AccessRuntime.exeが配置してあるパスにしておくのが無難だと思います。
5行目は、多分、Ignoreなのでセットアップが無効(失敗とか)だった時の戻り値だと思います。0であれば、何もなかったように次に進みます。
6行目は、不要です。実際にセットアップされるファイルへの引数だと思います。今回は不要です。


 これで、Accessランタイムベースのアプリケーションのインストールがラクになると思います。
ポイントしか書いていませんので、実際にやってみてください。

2013年8月14日

入力画面項目チェックのロジックの提案[初心者向け]

 画面入力値のチェックをするときに、1項目ずつチェックをすると思います。
その場合、入力チェック用の関数などを作ってチェックをすると思います。
 その場合の構造の提案です。
例としてMS Accessで考えてみます(なんでもいいんですが)

■仕様


  1. 会員ID、会員名、会員住所の必須入力チェックを行う。
  2. 入力チェックは、入力項目のエラーがあったら、それ以降の項目のチェックは行わない。
  3. エラーのあった項目にフォーカスをあてる

■画面イメージ

  会員ID [         ]
  会員名 [               ]
  会員住所 [               ]

■ロジック

Private Sub 登録_Click()

    If 入力チェック() Then
        ' エラー
        Exit Sub
    End If

    ' 登録処理をここに実装


End Sub

' True..エラーなし False..エラーあり
Private Function 入力チェック() As Boolean
   
    Dim msg As String
    Dim error_item as Control

    Do
        '
        ' 会員ID必須入力チェック
        If IsNull(会員ID) Then
            msg = "会員IDは、必須入力です"
            Set error_item = 会員ID
            Exit Do
        End If
        '
        ' 会員名必須入力チェック
        If IsNull(会員名) Then
            msg = "会員名は、必須入力です"
            Set error_item = 会員名
            Exit Do
        End If
        '
        ' 会員住所必須入力チェック
        If IsNull(会員住所) Then
            msg = "会員住所は、必須入力です"
            Set error_item = 会員住所
            Exit Do
        End If
    Loop Until True
   
    if msg = "" Then
        入力チェック = False
    Else
        入力チェック = True
        MsgBox msg, vbExclamation Or vbOkOnly, "入力エラー"
        error_item.SetFocus
    End If

End Function

■ポイントと解説

あまり考えないと、各項目エラーチェックをするかどうかを以前の項目でエラーがあったかのフラグを立ててチェックを行うと思います。

 ですが
 エラーがあったら、エラーメッセージのセットとエラーのあった項目の保存をしてエラーチェックを一気に抜け、仕様のとおり、それ以降の項目チェックを行いません。
 ロジックの赤字のところがポイントです。

 Do Loopは、ループがしたいわけではなく、それ以降のロジックを実行したくないためにブロック構造を作り出すために使っています。

 メリットとしては、以下のことがあります。

  • 各入力項目は、他のエラー状態を考える必要がない
    (ということは、入力チェックをする項目が増えた場合は、そのことだけを記述すればよい)
  • フォーカスのセッとメッセージ表示トロジックが1箇所にまとめられる
  • 余計な変数を作る必要がない(弱い理由ですが)

これで、ちょっと改造しやすくて、わかりやすいプログラムができるのではないでしょうか?






2013年8月13日

Subversionリポジトリバックアップメモ(案1)

Subversionのリポジトリバックアップのメモ


 Subversionでソース管理をしている場合に、リポジトリが壊れても復旧できるようにするためにバックアップを常にとっておく。
 その手段として、リポジトリの同期機能(svnsync)を使う。

  1. 同期先のリポジトリを作成する
    svnadmin create リポジトリ名
  2. hookスクリプトの準備
    pre-revprop-change.tpmlをpre-revprop-changeにリネームして、スクリプト内を「exit 0」だけにする。
  3. 同期先のリポジトリの初期化
    snvsync init 同期先のリポジトリ 同期元のリポジトリ
    例)svnsync init file:///var/appdata/svnbackup/repo_backup http://server_name/repos/repo --username [username] --password [password]

    [username]は、リポジトリへアクセスするユーザ
    [password]は、リポジトリへアクセスするユーザのパスワード
  4. リポジトリを同期する
    svnsync sync 同期先のリポジトリ
    例)svnsync sync file:///var/appdata/svnbackup/repo_backup  --username [username] --password [password]

ヒント

同期先のリポジトリは、fileプロトコルだけではなく、httpでもhttpsでもなんでも良いです。
ただし、1度でもcommitすると同期はできなくなります。


 運用しているリポジトリが何らかの理由で壊れたときは、この同期しているリポジトリを使って復旧する。

2013年8月12日

ファイル圧縮ツールなに使ってますか?

 みなさんは、ファイルの圧縮ツールは何を使っていますか?
いろいろ使って来ましたが、今は、7-zipというツールを使っています。

LHA→zip→DGCA→7-zipとツールを変更しています。

途中、いろいろなのを使っていましたが、圧縮機能が有料だったり、あまりメジャーでなかったり(自分が知らないだけ?)、高圧縮のツールがでたりして、使うのをやめたのも多々あります。


 DGCA(DigitalGCodecArchiver)は、他で使っている人は居ませんでしたが、高圧縮できたので仕事でもよく使っていました。メジャーでないということは、ファイルを展開するツールを持っている人がいないので、自己展開形式にしてファイルを渡していました。
当然、小さいファイルを自己展開機能をつけてしまうと、そのプログラム部分が大きいので、その場合は、zipとかで圧縮して送っていました。

 7-zipは、高圧縮で、いろいろなファイル形式の展開機能が付いているので今では、一番使っているツールです。
 これも、やはり、一般的には普及していないようなので、自己展開形式にしてファイルを圧縮して送っています。
 でも、圧縮レベルを「超圧縮」というのにして使うととんでもなくファイルサイズが小さくなります。
 ベンチマークを取ったわけではないですが、たまたま今、やった圧縮の状況を書きますとこんな感じです。


圧縮前 ファイル数56、フォルダ数25の123,412,480バイト(117MB)のファイル(ファイルは、accdb形式)を圧縮してみた。
  • zip(WIndows標準)
    16,675,382バイト(15.9MB)
  • 7-zip(超圧縮)
    1,542,751バイト(1.47MB)
  • 7-zip(超圧縮)の自己展開形式
    1,705,567バイト(1.62MB)
zip形式の10分の1にサイズになってしまいました。
自己展開形式しても、ほとんど変わりません。


 これで、7-zipを使わない手はないよね。

7-zip推しです。





2013年8月10日

店頭の家電並みと思っているらしい

 あるコンピュータのコンサルの営業のことであるが、手作りのコンピュータシステム(でも)は、量販店で電化製品を買ってきて、コンセントを挿せば動くほど簡単だと思っているらしい。
 だから総合的なテストもせずに本番リリースさせようする。
でも実際、総合テストなんてせずにリリースしたけど。
特に問題も起きずに、稼働しているらしい(小声で、さすが俺。


誰とは言わないが…。

※電化製品が簡単に作られているというわけではなく、店頭に並んでいるのは完成品という意味です。

スーパーユーザー!

 自分はコンピュータのシステムをよく理解していると勘違いしているユーザは、事ある毎にスーパーユーザを作って、なんでもできるようにしてという。
 当然データの整合性が崩れるてしまう事件が起きる可能性があることなんてこれっぽっちも考えに無い。

誰とは言わないが…。

2013年8月9日

新潟まつり2013 花火

外で音がすると思ったら、新潟祭りの花火。
今年から、三日間上がるらしいよ。


2013年8月6日

Windows Updateで作成された不要なフォルダを消す方法

 Windows7でWindows Updateしているとディスク容量が大きいドライブに数字とアルファベットで構成されているフォルダが勝手にさくせいされて消えないで残る場合があります。
(WindowsUpdateが失敗すると残るらしい)

 その残骸のフォルダを消す方法。
エクスプローラーでやることもできると思いますが、管理者のコマンドプロンプトでやるほうがちょっと楽なのでその方法を紹介。


手順は、フォルダの所有権を取得→フォルダをEveryoneのアクセス権を付ける→削除するの手順です。


  1. コマンドプロンプトを管理者で起動する。
    スタートメニューの「コマンドプロンプト」を右クリックし、「管理者で実行(A)...」をクリックする。
    管理者:コマンド プロンプトが起動します。
  2. takeownコマンドで現在のログインユーザに所有権を与える(指定したフォルダ以下全部のファイル)
    例)takeown /r /f H:\16429603b3e0bc8a76c894993b295c
  3. icaclsコマンドでフォルダのアクセス権に付ける(指定したフォルダの下のEveryoneでフルアクセス権)
    例)icacls H:\16429603b3e0bc8a76c894993b295c /grant Everyone:F /T
  4. エクスプローラーでフォルダを削除する。

たくさんあるとちょっと面倒ですが、削除用のバッチファイルかなんか作れば一回で終われますね。
そもそも、そのバッチファイルは、1回しか使いませんけどね。


2013年8月4日

dotNET アプリケーションをビルドするbatファイル

 昔々、やってたプロジェクトでdotNETで作成したWebアプリケーションをコンパイルするのに毎回VisualStudioを起動してコンパイルしてリリースやテスト環境を作るのが嫌になったのと、たかがこれだけの作業すら自分でやりたくない偉ぶってる人を批判するためにビルドするバッチファイルを作りました。
 ちなみに、VSSにも対応していました。
一応中を読めばわかると思うんですが解説が欲しい人はコメント下さい。

 当時は、VisualStudio2005を使っていたので、このバージョンですが、新しいのにも適用できるのでは無いでしょうか?


やってることは

  1. 1.Subversionのリポジトリからソースを一式取ってくる
  2. 2.ソリューションをビルドする
  3. 3.リリースファイルをフォルダにまとめる。
  4. 4.ビルド結果をログファイルとして作成する。

です。

 ホントは、これを元に改良していろいろなプロジェクトに適用してほしかったんですが、だれも何も指定内容です。
 殆どの人が自分で作業したくないんですよね。
システム開発者が消費者(出来合いのものを使うだけ)になっている現状がありました。


ダウンロードはこちら
dotNTAppBuilder.zip

2013年7月28日

平均寿命が200歳になった時の弊害

 以前、ソフトバンクの孫社長が「人の平均寿命は200歳」になると言っていたが、もしそうなるとしたら、和暦のために2桁しか取っていない項目は、桁溢れする可能性があるな。

 平成101年とか…。

2000年問題ならぬ、和暦100年問題が発生する。

和暦なんて使うのやめてしまえばいいのに、のに。

2013年7月27日

運用中のサーバーを止めずにセットアップさせられる

 あるWebシステム(外向けに公開している)をセットアップに行った時に、一切サーバを止めるための通達もしていないことが判明。

 前日にそのあたりは大丈夫かと中間業者の営業に口が酸っぱくなるほど言っていたにもかかわらずなんのユーザ側になんの通達もしていなとは…。
 一応、社内の技術の人間にもどうすればよいか相談していたらしいけど、その技術の人間も面倒臭いだったんだろうけど、「大丈夫、大丈夫。なんかあったら連絡するから」程度のことで話を終わられていたらしい。

 もし、サーバーの再起動が必要になった場合に相談をするんでしょうけど、再起動はダメとなったら、きっと、「じゃぁ、セットアップ終わりませんよ」とかの脅し的な文句をいうつもりだったんだろう。

「脅してきな文句をいうつもりだったんだろう」というとこは、想像なんだけど、セットアップ作業の前のユーザへのシステムの説明会の時のユーザーへの対応を見ているとそういう言い方をしそうだなということで。


 まぁ、結局再起動をする必要はなかったんですが。
最後に、その営業は「再起動は必要なかったですね」といったのを聞いて、「はぁー、なにもわかってないね」と思いましたよ。
(システムのセットアップのリハーサルをしている間に「再起動が起きない」ということはわかっていたんだけど)

 何かが起きた時にどうするんだよという話を全然わかっていない。


この営業の人いつか大問題を起こすね。かわいそうに…。

2013年7月24日

いろいろなブラウザでのテスト面倒

 今作ってるWEBのシステムをいろんなブラウザでテストした。
イントラネットのシステムだったら、これでやってねで終わるんだけど、外への公開用なのでそうも行かず。

こんなに沢山。ホントは分担作業にしたいんだけど、分担する人いないし。
  • Internet Explorer 8, 9, 10
  • Firefox
  • Safari
  • Google Chrome

 ほとんどの機能を動かしたので朝からすごく疲れた。

なんとなく、Chrome→ Safari→IE10→Firefox→IE9→IE8の順番でやってみたんだけど、IE9とIE8でJavaScriptが動かないのが判明。
原因は、IE8がIE7互換になって動作してて、連想配列の最後の項目の後ろにカンマが付いてるのが問題だったらしい。

 metaタグでIEは、IE8とIE9をエミューレートしなさいという設定を入れることで動くようになったけど、今度は、IE10で動かなくなってしまうという・・・。

 なぜ?余計なmetaタグなんてあるからというのがわかったので、結局、IE10か、IE以外のブラウザだったらそのタグを付けないということでことで解決。

HTMLにつけたmetaタグがこれ。IE10の時につけると事件が起こるから気をつけてね。


<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8;EmulateIE9" />


IPアドレスが同じネットワークの範囲内にいるかチェックする


 リクエストしたクライアントが管理しているネットワーク内かどうか判定する為の関数。




  1. /**
  2.     同じネットワーク内にいるか判定する
  3.     @param $ip チェックするIPアドレス
  4.     @return true..いる false..いない
  5. */
  6. private function inCIDR($ip) {

  7.    $CIDR_LIST = array('127.0.0.1/24', '192.168.0.0/24');  // この範囲いないにいるかチェックする。普通外に持つか、もらう。

  8.     for($i=0; $i<count($CIDR_LIST); $i++) {
  9.         $cidr = $CIDR_LIST[$i];

  10.         list($network, $mask_bit_len) = explode('/', $cidr);
  11.         $host = 32 - $mask_bit_len;
  12.         $net = ip2long($network) >> $host << $host;
  13.         $ip_net = ip2long($ip) >> $host << $host;

  14.         if($net==$ip_net) {
  15.             // 一致したので同じ中にいる。
  16.             return true;
  17.         }
  18.     }
  19.     return false;
  20. }


2013年7月23日

CakePHPでDBサーバーが止まっていた(環境問題で動作できない)時のエラー

 CakePHPで作っているシステムの最終的なテストをしていた時に、MySQLのサービスを止めてからリクエストしてみたら、エラーの内容がブラウザに表示されてしまいまいた。
 当然、core.phpの'debug'は、「0」にしています。
 
 エラー時のStatck Traceと一緒にMysql.php内のDBへの接続情報(DB名、パスワードホスト名)つまり、database.phpの重要情報が表示されてしまいます。

 いろいろ調べて見た結果、core.phpの「Configure::write('Error', …」のlevelキーのE_ALLにチルダを付けてやることでtraceは出ないということがわかりました。

「この設定をしてもちゃんとerror.logには書かれるし、debug=2にした場合、ブラウザにも表示されるようなのでとりあえずは良しとします。」
(でもドキュメントを見ると、debug=0にしたときは、internal error になると書いてあるんだけど。てことは、errorのviewが表示されると思うんだけど…。違うのか?)


これは、levelキーに設定したエラーレベルの時にトレースに出力するという意味になるんでしょうか?

誰かお分かりの人がいましたら、アドバイスをお願いします。


変更前
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));

変更後
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => ~E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));


2013年7月21日

CakePHPでファイルダウンロードの仕方のメモ



下のコードでCSVファイルのダウンロードができる

環境
CakePHPのバージョンは、2.3.6。
Web(AP)サーバー:IIS7.5


  1. $download_data = ここにCSVファイルのイメージを設定しておく。

  2. $this->viewClass = "Media";
  3. $this->autoRender = false;


  4. $filename = sprintf("CSVファイル_%s.csv", date("Ymd_His"));
  5. header("Pragma: public");
  6. header("Expires: 0");
  7. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  8. header("Content-Type: application/force-download");
  9. header("Content-Type: application/octet-stream");
  10. header("Content-Type: application/download");
  11. header("Content-Disposition: attachment;filename=" . "\"".urlencode($filename)."\"" );
  12. header("Content-Transfer-Encoding: binary");

  13. $download_data = mb_convert_encoding($download_data, "SJIS-win", "UTF-8");
  14. echo $download_data;


3~4行目:おまじない。ページは返さないので。
7行目:ファイル名を決めています。
8~15行目:ダウンロードする為のヘッダ情報
14行目:ブラウザがIE(HTTP_USER_AGENT)の場合、ファイル名に日本語が含まれていると指定したファイル名にならないので、urlencodeする。
17行目:EXCELで開きたいCSVファイルなので、Shift-JISに変換する※1。
18行目:ブラウザに送る。

※1 別に、EXCELで外部データの取り込みでCSVファイルを読むんだったら、Shift-JISに変換する必要は無いんだが、普通の人は、ファイルをダブルクリックして開くので。そもそも一般人の中には、CSVファイルのことをエクセルファイルという人もいるし…。

2013年7月18日

インストールされているアプリのバージョン

 マーケットにリリースしているアプリのインストールされているバージョンが、一つ前ならまだしも、それ以前のバージョンの比率が多いと、やっぱり使われてないんだなーと実感する。

まぁ、ずっと放置していたのもそうだけど、もっと良い機能やつがたくさんあるし仕方ないが…。

VirtualBoxのvdiファイルをコピーして使う時の注意

 VirtualBoxのvdiファイルは、コピーして新しい仮想マシンにそのまま使うことができないので以下の手順で使えるようにする。
 これシないと、UUIDが同じだから使えない旨のエラーメッセージがでるので。


コマンド
C:\Program Files\Oracle\VirtualBox>VBoxManage internalcommands sethduuid vdiファイルのフルパス
UUID changed to:新しいUUID


これでテスト環境を何回でも作りなおすことができるぜっ!

終わらないWIndows Updateって。

 ここ、一週間くらい、Windows7のシャットダウンの時にWindows Updateが行われてるんですが、一向に終わる気配がありません。

 機能は、19:00くらいにシャットダウンして、朝の8:00くらいまでそのままにしていたんですが、3個中の2個目でずーっと止まってるみたい…。
 結局、電源断で終わらせてしまいました。いつか壊れるよこれ。

 .NET Framewrok 4.0のセキュリティパッチとか、Silverlightのセキュリティパッチらしいんです。

今日は、C:\Windows\SoftwareDistribution\Downloadを消してみたらどう?みたいな話を聞いたので試しに消してやってみます。

 また、8:00まで動いてたらどうしよう…。


「…」ばっかりだ。

2013/9/12
 WindowsUpdateが終わることがなかったWindows7を久しぶりに起動し、終了時に、アップデートの個数が、15個になっていました。
 あぁ、もう無理だと思って、一応終了まで待っていたら、15個全てのアップデートが完了してしまいました。
 
 新しいアップデートが発生すると正しくアップデートが行われるのでしょうか?
たまたま、システムファイルの整合性がとれたりしたのでしょうか?

 うーん、不思議だ。

2013年7月17日

IISで新しいサイトをつくったらポートを開けなさい。

 久しぶりに、IIS(7.5)でテスト用のサイトを作ったら、全然接続できない…。と思ったら。

いやーなに、ポート8000で作ったんだけど、ファイアーウォールに「ポート8000は、通してね」っていう設定を入れるのを忘れてた。

 古いWindows(IIS)のときは、こんな設定しなくてよかったんで、スルスル動いてたから良かったんだけど。

 Webサーバ立ち上げたりする人(テスト環境でも)は、動けばOKとかじゃなくて本来は、何をシないとダメかをちゃんと覚えて行かないとダメだね。

 さて、続きをするか。


2013年7月16日

 Equipmentの複数形は、Equipmentです

 英語しらないって怖い。

 CakePHPでプログラム書いてるんだけど、「設備」というつもりで作ったテーブルのテーブル名を「Equipments」ってしてたら、このモデルにアクセスすると、「Table equipment for model Equipment was not found in datasource default.」ってエラーが出るので悩んでたら、「Equipment」の複数形って、「Equipment」なんですね。

 モデルのnameに"Equipments"って設定したら動いたけど、ここは、テーブル名を「Equipment」に直すことにします。


 Equipmentの複数形は、Equipmentです!


2013年6月19日

ツイッターのタイムラインを翻訳してくれます

  ツイッターのつぶやきを翻訳しながら読むことができるアプリを久しぶりに更新しました。
ツイートのし安さの改善をしました。

よかったら使ってね。

 タイムラインを見ながら、ツイートできたり、毎回入力したいハッシュタグを予め入力しておくことで、ツーとが楽になったりシます。
 あと、もともとの機能でタイムラインを自動や半自動で翻訳します。

つい翻訳


タイムラインを翻訳

タイムラインを見ながらツイート

翻訳してからツイート