ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2014/04/11

ラベルをダブルクリックするとコピーされる

.NETアプリでラベルをダブルクリックすると、そのテキストが勝手にコピーされちゃうって話

最近、会社で随分前に作った.NET1.1向けのアプリをWindows7でも動く様に手直しする仕事をしています。
…と言っても1.1で作られたアプリは一応CLR2.0上で動作するし、実際に不具合は無いみたいだったので放置でも良かったのですが、バグも多かったし直すついでにね。

その際、UIの角ばったボタンやテキストボックスも嫌だったので、
  Application.EnableVisualStyles() を使って見た目をWin7風にしたところ、表題の『ラベルをダブルクリックするとコピーされる』現象に出くわしました。

最初は困惑しましたが、どうやらそういう仕様に変わったみたいですね…。
これ、一見便利な気もするけど非常に困る。この機能だけ無効にする事も出来ない様子でMicroSoftさんマジ勘弁してくださいよというのが正直なところ。

(ラベルダブルクリックで別フォームを呼び出すような方法が良くないといえばそれまでですが)


この自動ラベルコピー(と呼ぶべき?)は、UIのスタイルにかかわらず、Application.EnableVisualStyles()を呼んだ事によって発生するみたいです。

試しにこんなコードを書いて角ばったUIにしても自動ラベルコピーは出来てしまう。

Module Module1
    Sub Main()

        Application.EnableVisualStyles()
        Application.VisualStyleState = VisualStyles.VisualStyleState.NonClientAreaEnabled
        Application.Run(New Form1)
    End Sub
End Module


尚、プロジェクトのプロパティで『アプリーションフレームワークを有効にする』にチェックを入れてる場合は、その下の『XP Visualスタイルを有効にする』にチェックが入っていると自動ラベルコピー状態になります。

結局のところ、自動ラベルコピーが嫌な場合は、古いUIデザインで我慢するか、個別に何か処理を加えるとか、ラベルコントロールを自作するとか…状況に応じて考えなきゃイカン感じです。



2013/02/10

[VB.net]My.Settings

開発環境をVS2003からVS2010を変更して、これは便利かも!と思ったのが
My.Settingsを使ってアプリケーションの設定を読み書きできる機能(VS2005から用意された)。

Windows7の場合、設定値が書き込まれたファイル、”user.config” は
C:\Users\[ユーザー名]\AppData\Local\[会社名]\ の中に
[アセンブリ名.exe_Url_*******] というフォルダが作られ、
更にその中にバージョン名のフォルダが作られ、その中に保存される。

*****ってのは実行ファイルの場所を表してるんだけども
困ったことに実行ファイルを移動させてしまうと、このフォルダも新たに作られて、
結果、保存した設定を読み出す事が出来なくなる。


自分が作ってるアプリケーションはフォルダごと移動させたり、名前を変更したりして使う習慣が根付いちゃってるので、残念ながらこの機能は使えないなー。

おとなしく今まで通りiniファイルで読み書きするのが吉か。



2013/01/13

VS2003の環境をVS2010へ

 以前、VS2003で作ったソフトは今も使われているのだが、あれこれ不具合が出ているにも関わらず、開発環境が無くて放置状態だ。
おまけに会社PCがいずれWin7に代わるとなると、まともに動くのかわからないので心配でもある。(一応動くみたいではあるが)

仕事の話なので本当は会社でやりたいが、そうも言ってられない状況なので自宅色々とやる事にした。
やる事は、開発環境の再構築(VS2003→VS2010)と、対象フレームワークのアップグレード。対象フレームワークは、会社にあるXPマシンでも動き、尚且つ将来的にWin7でも動く様に.NET3.5あたりを狙う。
Win7で動けばあの会社の事だ、10年くらいは大丈夫だろう。その後はもう他の人に任せる事にする。

ソフトはデータベース(mdb)を使ってあれこれ管理する、といった有りがちなもの。ADOXを使ってデータベースファイルを作成したりする部分もある為、不安もあったが兎に角試す。


VS2010Expressを入れて、例のVS2003で作ったプロジェクトを開いてみると変換ウィザードが立ち上がり、何の文句も無く変換が終わった。うろ覚えだが、VS2005やVS2008あたりで試した時は色々怒られたような気がしたのだが…(まぁ警告はいっぱい出た)。

これは良いと試しにデバッグビルドしてみると、速攻でエラーで停止。エラーメッセージは以下の通りだ。

System.BadImageFormatException はハンドルされませんでした。
  FileName=Interop.ADOX, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null
  Message=ファイルまたはアセンブリ 'Interop.ADOX, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。
  
意味わからん・・・。

しかし、同じような状況に陥った方はやはり多かったようで、ネットをうろうろしてたら割とすぐに解決できた。原因は、(自分の環境がWin7 64bitなので)64bit向けにコンパイルしているのに、32bitのInterop.ADOX.dllを読み込もうとしたから、という事らしい。なるほど「間違ったフォーマットだ」というのはそういう事か。しっかしわかりにくいメッセージだ。

対策のひとつとして、コンパイルのターゲットプラットフォームをAnyCPUからX86にすれば良いとの事だが、Explessではそのような事が出来ない。
なので、プロジェクトを閉じておき、「ファイル」→「ファイルを開く」で、対象となる .vbproj ファイルを開き、直接編集する。

  
    x86
    Local
    8.0.30319
    2.0
    {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx}
    Debug

上記のように、3行目を追加してやると良い。


とりあえず一歩前進できた。

2012/11/05

懸念事項

OSをWindows7に移行しようという計画を会社は進めているようです。
この話を聞いたのは随分前ですが、XPですらそろそろちょっと…という感じなのに、Win2Kが現役だなんてちょっと厳しいですよね。

Win7に切り替えるのはまぁ良しとして、個人的に懸念事項が一つあったので久々にIT情報系サイトを覗いてみました。

懸念事項とは .NET Framework(どっとねっとふれーむわーく)の事。これは.NETアプリケーションの動作環境と説明されていますが、誤解を恐れず簡単に言ってしまうと.NETアプリを動かすエンジンみたいな物なのです。そして、これには色々なバージョンが存在します。

自分が過去に作った定量ソフトは.NETFramework1.1で動くようになっていて、そのへんWin7で動くのかな?と心配になったのです。

http://www.atmarkit.co.jp/ait/articles/1210/26/news086.html


上記URLにてWin7の項目を見たところ

Ver.1.1はインストールできる場合もあるが、マイクロソフトはサポートしていない

場合もある
場合もある
場合もある

 ちょっと何言ってるのかわかりませんね。
「インストールできるが」ではなく、「できる場合もある」だなんて。

そう言えば自分はWin7(64bit)でした。
百聞は一見にしかず、と言いますから試しに定量ソフトを起動してみると…あれ、難なく動いてしまいました。勿論1.1は入っていません。

まぁしかし全部の機能を試したわけじゃないし、恐らく難しいコードを書いてない分たまたま動いた、という認識でいいのかもしれません(そんなのあり得るのか?!)

どのみち頭が痛いです。もう知らん顔するかなぁ


一応、自分メモ用として下記リンクを残す。

どうする? NET Framework 1.xアプリケーションの今後

2012/05/22

ListViewのカスタマイズ

ListViewをカスタマイズして使う際、パフォーマンス的な観点からAdapterクラスのgetView()メソッド内ではView(convertView)の再利用が推奨されています。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
 if (convertView==null ) {
  convertView = inflater.inflate(R.layout.xxxxxx, null);
 }
 //データをセットする処理など

    return convertView;
}

一般的にListViewは同じビューを繰り返し表示させて使う為、ビューの再利用は上記で良いのですが、データの内容によってビューがコロコロ変わる様な使い方をすると、渡されたビューが使いたいビューと異なり、NullPointerException等の問題が発生する場合があります(アクセスしようとした子ビューが無い等の理由で)

そのような時はinflateするレイアウトにidを付与しておき、渡されたビューが同じかどうかの判断材料として使います。
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  //これはリストビューに表示するデータを表現したクラスです
  JobProcess item = (JobProcess) getItem(position);
  //データのタイプに合わせてビューを準備する  
  switch (item.getType()) {
  case JobProcess.SUBTITLE:
   if (convertView==null || convertView.getId()!=R.id.subtitle ) {
    convertView = inflater
      .inflate(R.layout.contents_subtitle, null);
   }
   TextView tvSubTitle = (TextView) convertView
     .findViewById(R.id.textSubTitle);
   tvSubTitle.setText(item.getProcessText());
   break;

  case JobProcess.PROCESS:
   if ( convertView==null || convertView.getId()!=R.id.process) {
    convertView = inflater.inflate(R.layout.contents_process, null);
   }
   TextView tvCNO = (TextView) convertView.findViewById(R.id.tvCNO);
   tvCNO.setText(item.getProcessNo());
   TextView tvProcText = (TextView) convertView
     .findViewById(R.id.tvProcText);
   tvProcText.setText(item.getProcessText());
   break;
  default:
   
   break;
  }

  return convertView;
 }

Tagを利用してない場合はそこに何か目印を付けるのもアリだと思います。
  case JobProcess.NOTES:
   //
    if (convertView==null || !convertView.getTag().equals("notes")) {
        convertView = inflater.inflate(R.layout.contents_notes, null);
        //タグに目印をセット
        convertView.setTag("notes");
    }
    TextView tvNotes = (TextView) convertView.findViewById(R.id.tvNotes);
    tvNotes.setText(item.getProcessText());
 
  break;

しかしビューを何種類も用意すると、データの『並び方』によっては再利用率がぐっと落ちますね。今自分が作ってるアプリではリストビューをスクロール(=ビューが再利用される)するほどデータ量が無いので良いと思うのですが。


2012/05/13

トラノマキ その6

独自に作ったライセンス認証が通らない原因がやっと分かりました(結局SSL通信自体は上手くいってました)。

社内の人にテストしてもらった結果Android2.3端末だけNGだった為、同エミュレータを使って確認してみると、あるデータを複合化する際にjavax.crypto.BadPaddingException が発生している事がわかりました。この例外の説明を読んでも意味不明なのですが、早い話『こんな鍵つかえねーよ』って所でしょうか?

2012/05/11

トラノマキ その5

テストバージョンをリリースしました …が、早くもバグをいくつか発見。

  • 圏外の時に更新処理をすると落ちる(タイムアウト処理の書き忘れ)
  • ラインセンス認証が出来ない(致命的)

1つめは分かるからいいとして、問題はライセンス認証。よく解らないままSSL通信やってるから、まぁありえる話ですが…。いまだ疑問に思ってる証明書がどうたらって話、きっとそれ関わってる感じがします。

でもどうして自分の端末では上手くいったんだろう??

これは苦労しそうな予感…

2012/05/07

トラノマキ その4

大分完成が近づいてきました(ただしクライアント側の話)。

OutOgMemoryErrorの対策

bmpオブジェクトをリサイクルするだの色々あったのですが、トラノマキではImageViewを1つしか使っていなくて意味が無さそうだったので、画像を縮小して読み込む方向で解決できました。(参考記事:画面に合わせて画像を縮小して読み込む

ライセンス認証もどき

PHPの勉強も兼ねていたし、SSL通信(HTTPS通信)や暗号化など初めて取り組みものばかりなのでかなり苦労しました。その苦労の甲斐あって、なかなかそれっぽい物が出来たんじゃないかと思います。
通信に関しては出来上がってみると通常のHTTP通信とさほど変わりないコードなんですが、未だ謎は多いですね。このあたりに手をだすなら通信技術の知識が必須だと痛感いたしました。


更新処理のパフォーマンス改善

いくつか前のエントリでも書きましたが、更新処理に時間がかかり過ぎていたのでアルゴリズムを大幅に見直しました。

変更前では目次ファイルを走査し、それぞれのファイルに対しサーバー側とSDカード内の更新日を取得し比較を行う、という方式でしたが、この方法だと (1)サーバー上に無いファイルも比較を行ってしまう (2)ファイル毎にHTTP通信によるオーバーヘッドが発生する という2つの問題があります。

そこでサーバー側に『存在しているファイルとその更新日』をリストアップするPHPスクリプトを配置し、Android端末ではそのリストを取得、そしてそれを元にしてSDカード内ファイル更新日と比較を行う、といった方式に変更しました。

この変更によりパフォーマンスは以下のように改善しました(単位はミリ秒)


とまぁ、ドヤ顔でグラフを載せていますが最初に考えた方法が酷すぎるってことですね(このままリリースしなくて本当によかった・・・)。


という事で、あとは多少リファクタリングを進めてそれが終わったら次のステップに入る予定です。

2012/04/30

トラノマキ その3

細かい部分の作りこみが完了しました。
  1. 通信エラー時のメッセージ表示
  2. 目次の唯一展開オプションの動作実装
  3. 手順書ファイルのプロパティ表示
  4. 他の画像ビューアから戻った時の挙動の修正
4項については、参考画像の拡大表示を他の画像ビューアに委託する処理に関してなのですが、拡大表示させた後にバックキーで戻ると同じ画像が2度表示され、正規の動作とは言え少し違和感を感じる部分でした(手抜きの副作用とも言う)。


呼び出し元のActivityはViewPagerなので、戻った時に手順書が表示されていれば違和感も解消されそうです。

そこで、ギャラリーの呼び出し方法を『startActivity』から『startActivityForResult』にしてコールバックを受け取るようにし、onActivityResultにてViewPager#scrollTo(x,y)を使って手順書のページへ強制的に戻す処理を追加しました。なかなかいい感じです。


忌むべき存在 ”OutOfMemoryError”

今まで真面目にAndroidアプリを作ったという経験は少なく(クソドラムを手掛けた事実は闇に葬る)、メモリ管理に関しては無頓着なまま作り続けてきましたが、今回は比較的大きな画像を扱う事もあって、予想されていたOutOgMemoryErrorがついに発生してしまいました。

『目次から手順書へ画面遷移』の繰り返しで出る同エラーは、System#gcでGCを呼び出す事で回避できました。しかし手順書の『リンクテキスト』で大きな画像を使った手順書へのリンクを繰り替えして落ちてしまう問題は解決できません。

鋭意調査中。


2012/04/25

トラノマキ その2

ファイルを更新する部分がほぼ完成。おかげでテストが随分と楽になりました。あとはコネクションタイムアウト等で更新に失敗した時のメッセージを出したいところですが、この処理はバックグラウンドスレッドで行っているので少し頭を悩ませています…。

ずっと同じ部位にかじりついてると飽きてくるので、手順書の表示部(ListView)を改良してみました。

元々『サブタイトル』『手順』の2つの表現要素しか無かったところに新たな3つの要素を追加しています。

注意を促す『注釈』、補足説明のような内容を表す『ワイドテキスト』(←少し命名に疑問)、他の手順書へリンクする『リンクテキスト』の3つです。特にリンク機能はスマホならではのメリットで、なかなか良いんじゃないかと思います。

改良したとは言え文字ベースの手順+参考画像1枚だけという制約に変わりは無く、表現力はまだまだ乏しいです。

技術力+やる気があれば、紙媒体同様、表現力豊な物を作る事も可能でしょうが、そこまでするならブログにでも手順書をあげたほうが絶対早いと思います。

しかし、そうすると結果的に閲覧時の軽快さやメンテの手軽さが失われてしまいますし、セキュリティー上の問題もあります(例によってどうでも良さそうですが、やはりうるさい人は居るもので…)

実はトラノマキの仕様を検討する際、iPhoneユーザーもカバーしたくて、ブログやEvernote、GoogleDocs 等Webを利用する案も検討していたのですが、先述の理由により断念したという経緯あってのAndroidアプリなのです。

しかし使ってるデータはただのXMLなので、iPhoneアプリを作れる人さえ居れば解決しそうな問題ですが・・・多分企業レベルで動かないと完成しても配布すらできない予感がしますね(未調査)

まぁいずれは何らかの手段で解決したいところではあります。

2012/04/24

Intentを使いギャラリーで画像を表示する

トラノマキでSDカード内に配置された画像を表示するだけビューがあります。これは何の変哲もないImageViewで、表示する以外の機能は無いのですが、ユーザーが画像を拡大して見たくなる場合もあるだろうと考え、他の画像ビューア(ギャラリー等)にインテントを投げるという実装を試みました。

有名なファイルマネージャ『アストロビューア』で画像ファイル名をクリックしたときのあの動作です。

ところがこういったサンプルがありそうでなかなか見つからず(調べ方が悪いのか需要が無いのか)おかげで3日くらい苦しみましたが、アストロビューアのLogCatを眺めていたところ解決に至りました。

ちなみに日本Androidの会メーリングリストで同じ悩みを持っている人が居て(未解決でしたが)、そのやりとりがヒントになりました。

前置きが長くなりましたが、以下がサンプルです(一部抜粋)


String filename = "SDカードのファイルパス";
//コンテンツプロバイダのURI取得
Cursor c = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.ImageColumns.DATA + " = ?", new String[]{filename}, null); 
c.moveToFirst(); 
String contentname = "content://media/external/images/media/" + c.getInt(c.getColumnIndex(MediaStore.MediaColumns._ID)); 
   
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(contentname));
 
startActivity(intent);


3-5行でファイルパスからコンテンツプロバイダのURIを取得しています。コンテンツプロバイダに登録されていないファイルの場合nullが返されるので例外処理を書いた方がいいかもしれません。

自前アプリで作成・保存した、あるいはダウンロードした等のケースではコンテンツプロバイダに登録されてないので、MediaScannerConnection を使ってコンテンツプロバイダに登録させる処理が必要になります。

詳細は以下のURLを参照しください。


参考URL

MediaScannerConnectionを使って画像をギャラリーに反映させる http://techbooster.jpn.org/andriod/multimedia/5341/

contentスキーマとfileスキーマの相互変換 http://yagni.jp/android/interconversion_between_file_and_content

Android URI
http://ee72078.moo.jp/chinsan/pc/MobileApp/index.php?Android%20URI

2012/04/19

HttpURLConnectionでBasic認証を使ったサイトにアクセスする

現在トラノマキアプリでデータを更新する処理を作っています。

このアプリで使うベースとなるデータファイルはネット上に置いてあり、先ずはこれらの更新日を取得する必要があります。オープンな場所のファイル更新日を取得するだけならHttpURLConnectionを使う方法がお手軽で良い感じですが、今回は対象となるサイトにBasic認証を掛けてある為(大した情報は無いのですが保身的な人に知れると面倒なので)ひと工夫必要です。

という訳で、Basic認証を使ってネット上のファイルの更新日を取得する方法を調べてみました。

以下、一部抜粋

private Date getLastModified(String filename) {

 URL url;
 Date date = null;

 try {
  Authenticator.setDefault(new Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("userId", "password".toCharArray());
   }
  });

  url = new URL("http://www.hoge.com/" + filename);

  HttpURLConnection con = (HttpURLConnection) url.openConnection();

  con.setRequestMethod("HEAD");
  date = new Date(con.getLastModified());

 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
  return date;
}

こんな感じで良いみたいです。

上記コードでは 便宜上Authenticator.setDefault~の部分をメソッド内部に書いてますが、その必要はありません。まだ勉強中で曖昧なのですが、VMがパスワード要求を受けた時に返せるように設定しておくイメージ?


ちなみにこの方法だとID,パスは暗号化されないので、シビアな場所に使うならHTTPSと併用した方が良いとの事です。


参考URL
http://developer.android.com/intl/ja/reference/java/net/HttpURLConnection.html

2012/04/15

トラノマキforAndroid

会社で役立つツールをAndroid端末で作る、という計画はゆっくりと進んでいます。今年の初めに少し、しばらく休止後、4月に入ってまた再開。本当にゆっくりですが、自身のモチベ維持の為に書いてみます。

名前は 『トラノマキ for Android』

基本的には作業手順書なんですが、それを見れば誰でも出来るという物にはせず、あくまで”記憶を助けるツール”という事をコンセプトとしています。また、現存する紙媒体の虎の巻では困難だった情報の共有化というのも一つの狙いです。

アプリケーション自体は単純で、起動すると機種等でカテゴライズされた手順書等のタイトルがあり、それをタッチすると内容が表示されるというものです。手順書画面はViewPagerで構成され、手順を書いたリストと参考画像の画面をスワイプで切り替える、という物になります。



手順書データは端末に無い場合に自動的に取得する仕組みで、一度取得すれば内部のデータを参照します。また、データを編集/追加していく事も必要なのですが、Android端末でその作業は厳しいので別途PCソフトを用意する必要があるかなと考えています。

現在はアプリの枠組みと呼べるものがおおよそ完成した状態です。まだ最新のファイルに更新する仕組みが未実装。データを編集するソフトについては未着手(これが一番大変そう)。コンテンツを充実させる作業もあるし、まだまだ先は長い。

完成したら若者を中心に広げてもらい、末永く業務に役立ててくれたら嬉しいと思います。


2010/10/30

Androidアプリに広告表示

※ブログ移転につき再掲
※この情報は古い可能性があります。

Androidアプリへの広告掲載方法については ”Android Admob ” でググれば色々出てくるので詳細は省きますが、本日テスト的に実装してみると、何故か紹介されてる方法では広告が表示されません。

結局のところ良くわかってないのですが、一応解決したので参考として記事を書いてみます。
最近自分で広告掲載に挑戦して散々悩んだ人向けです)

まず、AdMob Android SDK がバージョンアップ(20101012-ANDROID)しているようです。

なので関係あるかな?と思ってSDKの説明書(PDF)を参照してみると、AndroidManifest.xml内の  タグの前に、以下のコードを追加しろ、という記述あり。
<meta-data android:name="ADMOB_PUBLISHER_ID" android:value="アンタのIDココ!">
<activity
   android:configchanges="orientation|keyboard|keyboardHidden" 
   android:name="com.admob.android.ads.AdMobActivity" 
   android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

<receiver android:exported="true" android:name="com.admob.android.ads.analytics.InstallReceiver">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"></action>
</intent-filter>
</receiver>
</activity></meta-data>
前のバージョンのAdMobSDKは良く知らないのですが、良くWebで紹介されてる記述に比べると内容が増えてます。

attrs.xmlでは
<attr name="testing" format="boolean" /> 
という記述もなかったので削除し、同様にレイアウトファイル上の myapp:testing の所を削除します。
<com.admob.android.ads.AdView
android:id="@+id/ad"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
myapp:backgroundColor="#000000"
myapp:primaryTextColor="#FFFFFF"
myapp:secondaryTextColor="#CCCCCC"
myapp:testing="true"       <!--  ←これも不要 -->
/>

このテストモード属性は関係ないかもしれないけど、これだけじゃテスト用の広告は出ませんでした。テスト用の広告をエミュレーターで出すには、広告を出したいActivityのonCreateで以下のようにする。
AdManager.setTestDevices( 
              new String[] { 
                  AdManager.TEST_EMULATOR  
 } );
実機でテスト広告を出したい場合は、とりあえずそのまま実機でテストアプリを実行させると、LogCatに
To get test ads on device use AdManager.setTestDevices( new String[]{"xxxxxxxxxxxxxxxxxxxxxxx"})

と、メッセージが表示されるのでこれの xxxxxxxxxxxxxxxxx の目でコピー(笑)します。通常のログだと探すの大変なので、 タグ AdMobSDK でフィルタを作っておくとすぐわかると思います。

 onCreateのコードに目コピーした値を以下のように書けば実機でもテスト広告が表示される。
AdManager.setTestDevices( 
              new String[] { 
                  "xxxxxxxxxxxxxxxxxxxxxx"
              } );

2010/06/24

買っちまった




MacマシンはおろかiPhoneすら持ってないのにコレである。


気が向いたらレビューでも書いてみようかな。
流し読みした印象では、iPhoneアプリを全く作れない事もないな、といった感じ。

Mac mini 購入検討中。


2010/06/23

プログラミングを教えるという事

私は、2003年頃から約7年間、工場で現場勤務という立場に居ながらプログラマ(※1)という職種に一人で携わってきた。

通常、開発業務というのは規模にもよるが数人のプロジェクトで遂行するのが普通で、開発スピードや業務の持続性が考慮された結果、組織内に私を軸とした開発チームを立ち上げるという構想が当時はあった。

プログラマという職種は今もなお人材不足であり、現行業務を知った者自らが開発を行うという事は、効率やコストの面から業界問わず望まれている場合が多く、あながち悪い判断では無かった様に思う。

この時私はメンバーを選ぶよう指示された訳であるが、人選よりも「いかにしてプログラミングを教えるか」という事を問題視していた。

コンピューター技術が進歩し、それに歩調を合わせる形でプログラミング技術が進歩した今となっては、xx言語入門といった書籍の内容すら本当の初心者にとって厳しいものとなっており、これ以前にも基礎的な要素を教える必要があると感じたからである。

また、共同での開発がスムーズに出来るのだろうか、と言う不安もあった。

一人での開発なら頭の中で考え、自分で分かるようなメモさえあれば十分だったが、2人以上となると最低でも設計を図にして考えを共有する手法が必要となってくる。

もはや趣味感覚でアプリケーションを作るレベルでは済まされないのである。

☆ ☆ ☆


現在は諸事情により前述した構想は無くなり、私自身会社でプログラミングをする事も無くなった。その為、教える事について悩む必要も無いわけだが、趣味としてプログラミングを始めてみたい人向けに自分がどのようにしてプログラミングを習得してきたのか、いつか振り返ってみたいと思う。


(※1)システムとして成立させる為にソフトウェア開発に留まらず色んな事を考えさせられたので殆どSE寄りですね・・・まぁ失敗に終わりましたが