プログラムの最近の情報



ASP.NET 4.5新機能概説

(http://www.atmarkit.co.jp/ait/articles/1303/08/news072.html)

でも触れられている、SignalRという新しい技術についての記事が

あったので紹介します。

Webアプリケーションは元々コネクションレスのクライアントサイドからの

一方的な同期通信が基本となっていました。

※これはHTTP(Hyper Text Transfer Protocolの略からもわかるように)

プロトコルの元々が、インターネット上のサーバに配置された文書や画像を

タグ付けされた情報(HTML)として取得し閲覧するという目的から成って

います(因みにHTMLXMLの前身としてSGMLというものがあります)

その後、HTTPHTMLはホームページ、掲示板、チャットというように

動的なコンテンツを扱うようになり、さらにネットショッピング

や情報検索サイトなどシステムという形で利用されるようになり、

企業内のイントラネットでも一般的に使われるようになっているのが

現状です。

前置きが長くなりましたが...

技術的な部分ではコネクションレスのクライアントサイドからの

一方的な同期通信から、JavaScriptによる動的な画面制御、Ajax等による

非同期通信によりリッチなWebアプリケーションが開発できるようになり、

さらにはWebSocketをベースとし、Sochet.IOなど高レベルなAPIも提供され

本題のSignalRについてはWebSocketはもとより、RPCを使用した、Hub

という高レベルなコネクション型APIが提供されています。

今後はこれらの技術の進歩により、コネクション型で非同期通信を利用する

ことにより記事の中でもあるようにサーバサイドからのプッシュ型のアプリ

ケーション開発も簡単に構築できるようになり、Webアプリケーションの

可能性がさらに広がると思われます。

http://www.atmarkit.co.jp/ait/articles/1303/19/news099.html

編者:日経ソフトウェア

発行人:桔梗原 富夫

編集長:田島 篤

発行:日経BP社

178ページ

1,886円+税

 

内容

2010年10月2日にHTC Desire(X06HTII)が発売されました。

Android2.1搭載のスマートフォンで、iPhone4に次ぎ、評判は上々のようです。

さすがにiPhone4の勢いほどではないけど、アプリケーションの開発という点では、

より柔軟・オープンであり、今後に期待できます。

 

さらにHTC Desire(X06HTII)は、2010年10月8日には、Andoroid2.2へアップデート

可能で、加速度的にiPhoneを凌ぐ勢いとなりそうです。

 

さて、前置きが長くなりましたが、この書籍では、こういった状況を踏まえてかどうか、

アプリケーションの開発について、2大スマートフォン(もちろんIPhoneとAndroid)の

両方のプログラミングについて書かれた最新の書籍になります。

 

私の場合は、Mac環境、Apple製品を好んで利用しないため、必然的に、Javaでの

開発が手軽にできるAndroidとなった訳ですが、スマートフォンの開発については、

やはり、iPhone、Android両方の知識について理解する事も大切です。

 

この書籍ではタイトルのとおり、"入門"ではありますが、こうした2大スマートフォンの

アプリケーション開発について、両者を比較しながら、体系的に、手軽に学べるという

点では、とても有用なバイブルとなると思います。

 

日経ソフトウェアの過去の記事から作られているムック本ではありますが、

基本的な知識と、技術がしっかり学べると思います。

今の時代の、システムエンジニア、プログラマの基礎知識としても、

知っておくべき内容がたくさん詰まっていると言えます。

 

目次

 

第1章 作って楽しい!

  • Part1 iPhoneプログラミング入門 効率的に始めるための4大ポイント!
  • Part2 iPad専用のスプリットビューとポップオーバーでRSSリーダーを作る
  • Part3 Androidで作って楽しむ弾幕系シューティングゲーム
  • Part4 iPadプログラミング入門 高速動作と大画面を生かす!パーティクルによる電光掲示板アプリを作る
  • Part5 開発者が明かすニコニコ生放送のiPhoneアプリはこうして生まれた

 

第2章 Androidの基礎を極める!

  • Part1 最も重要な「Activity」を理解する
  • Part2 音声読み上げアプリケーションを作る
  • Part3 Intentで超簡単アプリケーション連携
  • Part4 実例で学ぶIntentの使い方
  • Part5 Androidの秘密兵器、Serviceを理解する
  • Part6 Serviceに独自のinterfaceを持たせる
  • Part7 データ共有に必須のContentProvider
  • Part8 アプリにContentProviderを実装する

 

第3章 達人への第一歩

  • Part1 16個のサンプルで一目瞭然高度な機能がすぐに使える!
  • Part2 最速で学ぶObjective-C メモリー管理をマスターすればObjective-Cがわかる!
  • Part3 最速で学ぶObjective-C GUIプログラム作成に必要な概念をマスターしよう
  • Part4 iPhone実践プログラミング 電子コンパスを使ったアプリを実機で動かそう
  • Part5 iPhone実践プログラミング MapKitで地図アプリを作ろう
  • Part6 Phone実践プログラミングGameKitを使ってBluetooth通信対戦ゲームを作ろう
  • Part7 Javaエンジニアから見たiPhone/Androidアプリ開発記

 

付録 開発環境のセットアップ

 

ポイント

2大スマートフォンのアプリ開発が同時にわかる!

世界的なブームとなっているiPhone/iPadとAndroidのプログラミングを同時に

学びましょう。iPhoneプログラミングの基本、Objective-C、iPadの画面サイズを

生かすアプリの作り方、Androidの4大構成要素(Activity,Intent、Service、

ContentProvider)、Androidで作る弾幕系シューティングゲームなど、多彩な内容

を詰め込みました。iPhone/iPadとAndroidの類似点と相違点を把握しながら学べ、

それぞれのOSに対する理解も深まります。

 

補足

iPhone/iPadの開発は、通常Mac上での開発となりますが、

C#環境でも開発することがが可能なようです(Mono環境)

これは、開発の生産性においても、Windowsプログラマにとっても、

とても可能性の広がる事だと思います。Appleの対応についても、

もっともっとオープンになればうれしいことです。

 

 

 

著者: 川俣 晶

発行社: 瀬川 弘司

発行: 日経BP社

発売: 日経BPマーケティング

発行日: 2010年7月26日

315ページ

2,800円+税

 

内容

ぜひ押さえたいC#開発のポイントが満載!

最新テクニックをマスターする35のテーマ

どこからでも読めてスキル倍増!!

 

ポイント

この本は、いわゆる入門書ではありません。

Visual Studio 2010 の登場とともに、.NETフレームワークが、

バージョン4.0となり、C#も、Visual C# 2010にバージョンアップした。

 

C#は、Visual Studio 2008(.NET 3.5)より、LINQをはじめ、言語仕様も

大きく強化されてきており、本書ではそういった新しくなった言語仕様の

解説はもちろん、新しい機能を使いこなすための、超・実践的なテクニックを

わかりやすく解説しています。

 

本書を理解することで、これまでのシステム開発での開発生産性、効率性の

向上はもとより、Visual Studio 2008(.NET 3.5)、Visual Studio 2010(.NET 4.0)

を利用することにより、これまでと違った新しいスタイルのプログラム開発への切換

えが可能になってくると思います。具体的には以下のような、テクニックについて

解説されています。

 

特に、C#4.0の新機能である、

  • 動的型付け変数
  • オプション引数・名前付き引数
  • ジェネリックの反変性・共変性

についての解説は必読ですし、利用価値の高い新機能であることは間違いありません。

 

目次

第1部 基本編

  • 第1章 言語の特性とパターン
  • 第2章 静的(static)なクラスとその意義
  • 第3章 さまざまな型変換(キャストの話)
  • 第4章 型について知ろう(decimalとdouble/floatの違い)
  • 第5章 フィールド (メンバー変数) とプロパティはここが違う
  • 第6章 引数の省略と理解性の高い引数(named/optional parameters)
  • 第7章 nullを受け入れるか? 排除するか? (null許容型とnull合体演算子)
  • 第8章 複数の値の返し方(参照渡しとパック)
  • 第9章 COMと64ビットへの対応
  • 第10章 型を書かなくても強い型付け(varとジェネリック)
  • 第11章 共変性(covariance)と反変性(contravariance)
  • 第12章 スレッドプールとWebアプリの問題

第2部 構造編

  • 第13章 属性(Attribute)の使用
  • 第14章 部分クラス(partial class)でクラスを分ける
  • 第15章 リフレクション(Reflection)を活用する
  • 第16章 動的にアセンブリをロードする
  • 第17章 モジュール(.netmodule)の意義
  • 第18章 名前空間とモジュールの分割(using、extern)
  • 第19章 privateメンバーを覗く方法

第3部 LINQ編

  • 第20章 LINQの基本を理解しよう(LINQという式/LINQというメソッド)
  • 第21章 ソースが2つあるクエリ式
  • 第22章 LINQ to SQL で楽々クエリ
  • 第23章 LINQ to XML で楽々XML文書処理
  • 第24章 ラムダ式とdelegate
  • 第25章 ラムダ式と"外の世界"とのやりとり
  • 第26章 C# における列挙型(enum)
  • 第27章 yeild returnとLINQ
  • 第28章 遅延実行とレイジー評価

第4部 ダイナミック編

  • 第29章 リフレクションの活用
  • 第30章 どっちが正解? 静的 対 動的(dynamicクラス)
  • 第31章 DynamicObject から継承した独自のdynamicクラス
  • 第32章 ExpandoObjectを使用した dynamic オブジェクト

第5部 パラレル編

  • 第33章 並列で行こう!(並列プログラミングの基礎)
  • 第34章 データ処理における並列プログラミング(並列LINQ、PLINQ)
  • 第35章 並列プログラミングのデバッグとプロファイリング

 

業務アプリに限らず、いろいろなプログラム作成を経験していると、

タスクトレイ(通常画面右下の時計が表示される場所)へアプリケーションを

常駐させて(タスクバーに出さずに他の作業の邪魔にならないように)動かしたい

事は必ず1度や2度はあるのではないかと思う。

 

C#(.Net Framework)では、タスクトレイへアプリケーションを格納するための

クラスが標準で備わっている。それが、タイトルにもある、NotifyIconである。

使い方はいたって簡単であり、タスクトレイへの常駐だけでなく、アイコンの設定、

バルーン表示機能(吹き出しのようなメッセージが一定時間表示される機能)や、

ヒントメッセージ、コンテキストメニューの設定がとても簡単にできるが、

細かい動きを気にすると、少しテクニックが必要になるので書いておきます。

※細かい動きと言っても、常駐アプリケーションを使用する場合には大抵必要になる

だろう動きだと思うので、調べると結構同様の対応策が検索できる。

 

まずは、NotifyIconの使い方も含め、

1.NotifyIconをフォームに張り付ける。

2.NotifyIconのVisibleプロパティをtrueにし、Iconプロパティに表示したいアイコンを
  指定すると、これだけでアプリケーション実行時にタスクトレイにアイコンが表示

  される。また、タスクバーにアプリケーションのタスクを表示させないためには、

  ShowInTaskbarプロパティをflaseに設定します。

3.Titleプロパティの内容が、ヒントメッセージになり、BalloonTip?プロパティを設定

  し、ShowBalloonTipメソッドでバルーンを一定時間表示できます。

4.ここまでは、簡単な設定だけでうまくいくのですが、アプリケーションのウィンドウは

  最小化するとタスクバーには表示されないのですが、デスクトップ領域に表示されて

  しまいます。また、閉じるボタンを押した際にアプリケーションが終了するのではなく、

  画面は消えるが、タスクトレイには常駐されたままにしたいというのが一般的な機能

  でしょう。

5.結論から言うと、WndProc というメッセージの処理をつかさどるメソッドをオーバ

  ライドすると自由にアプリケーションの動作を制御することが可能なので、

  この方法がベストでしょう。ただ今回は、極力簡単で分かりやすい方法で

  できないかを探しており、少し動作的に微妙な点はあるが、メッセージを使用せず、

  WindowStateプロパティを制御するだけでもうまく動かすことはできた。

6.WndProcの制御も覚えれば簡単なので、ハードルは高くないと思われるが、今回は

  せっかくなので両方の方法のサンプルを書いておきます。

 

コードサンプル


前提条件

・フォームにNotifyIcoonコントロールを張り付ける

・NotifiIconのVisibleをtrue、ShowInTaskbarプロパティをfalse、Iconプロパティを設定

 

a)WndProcを使用する方法

    public partial class Form1 : Form
    {
        private int    WM_SYSCOMMAND = 0x112;
        private IntPtr SC_MINIMIZE   = (IntPtr)0xF020;

        public Form1()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            //最小化されたときにフォームを非表示にする
            if ((m.Msg == WM_SYSCOMMAND) && (m.WParam == SC_MINIMIZE))
            {
                this.Hide();
            }
            //上記以外はデフォルトの処理をおこなう
            else
            {
                base.WndProc(ref m);
            }
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            //タスクトレイのアイコンダブルクリックでフォームを表示、アクティブ化
            this.Show();
            this.Activate();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //フォームを閉じる時、タスクトレイに表示されている場合は閉じずに非表示
            if (notifyIcon1.Visible)
            {
                e.Cancel = true;
                this.Hide();
            }
        }

        //NotifyIconのコンテキストメニューに追加した「閉じる」メニュークリックイベント        
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            //NotifyIconのコンテキストメニューで閉じるメニューを実行した場合
            //NotifyIconを非表示にしてアプリケーションを終了する
            notifyIcon1.Visible = false;
            Application.Exit();
        }
    }

 

b)WindowStateプロパティを使用する方法

→この方法の場合は、あくまで最小化の処理が発生していることになるので、

最小化のアニメーションが表示されてしまう、再表示する場合に、フォームの状態を

再設定するため、画面がちらつく場合があるなど微妙に動作が気になる部分も残る。

    public partial class Form1 : Form
    {
        //ウィンドウの状態を保存するためのフィールド
        private FormWindowState windowState;

        public Form1()
        {
            InitializeComponent();
            windowState = WindowState;
        }

        private void MainForm_ClientSizeChanged(object sender, EventArgs e)
        {
            //ウィンドウが最小化された場合はフォームを非表示
            if (this.WindowState == FormWindowState.Minimized)  
            {  
                this.Hide();
            }
            //最小化以外の場合はウィンドウの状態を保存しておく
            else
            {
                windowState = WindowState;
            }
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            //ウィンドウを表示、保存しておいた状態に戻し、アクティブ化する
            this.Show();
            this.WindowState = windowState;
            this.Activate();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //フォームを閉じる時、タスクトレイに表示されている場合は閉じずに非表示
            if (notifyIcon1.Visible)
            {
                e.Cancel = true;
                this.Hide();
            }
        }

        //NotifyIconのコンテキストメニューに追加した「閉じる」メニュークリックイベント       
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            //NotifyIconのコンテキストメニューで閉じるメニューを実行した場合
            //NotifyIconを非表示にしてアプリケーションを終了する
            notifyIcon1.Visible = false;
            Application.Exit();
        }
    }

オブジェクト指向と言いつつ、クラスをインスタンス化させたくない場面は

よくあることです。

 

私の経験上では主に2つ。

 

  1. ユーティリティクラス
    他の色々なクラスから共通で利用されるメソッドを実装する。
    共通関数群のような使い方をするが、そのたびにクラスを
    インスタンス化して利用するのはコードもわかりにくくなるし、
    そもそもオブジェクトとして利用する意味がない。

    この場合、Java等でも同様だと思うが、staticなメソッドを定義し
    インスタンス化せずに手軽に共通メソッドを利用できるようにする。
    その際、インスタンス化自体が無意味なので、コンストラクタを
    private で宣言するのが一般的です。


    public class StringUtil
    {
        private StringUtil
        {
            //インスタンス化不可
        }

        public static Find(string source, string search)
        {
            return ...
        }
    }


  2. シングルトンクラス(シングルトンパターン)
    オブジェクトをシングルトンにしたい場合に使用する。
    シングルトンとはアプリケーション内であるクラスのインスタンスは
    唯一であることを保証するクラスのこと(例:プリンタスプーラなど)

    クラスが内部的にそのクラスのオブジェクトをひとつだけインスタンス化し、
    インスタンスが必要な場合にかならず、唯一のオブジェクトへの参照を
    返すという仕組みである。

    public class Singleton
    {
        private static obj = new Singleton();

        private Singleton
        {
            //インスタンスの取得は、GetInstanceメソッドで
        }

      public static Singleton GetInstance
        {
            return obj;
        }
    }


C#2.0からは、上記のように、無理やりコンストラクタを、privateにして

インスタンス化できないようにするという、よく考えると無理やりな手法

ではなく以下のようにスマートに記述できるようになった。

class定義の前に、staticを付加すると、そのクラスは自動的に静的な

クラスとなり、以下のような特徴を持つようになる。

 

  • 静的メンバのみを含みます。
  • インスタンス化できません。
  • シールされます。
  • インスタンスコンストラクタを含むことができません

コンストラクタを記述しても言語レベルでエラーが検出され、

コンパイルすることができなくなります。

このクラスを利用し、静的フィールド、静的メソッドだけを使用した

ユーティリティクラスやシングルトンの仕組みも簡単に実装できます。

絶対現場主義Visual C#実践講座

 

著者:丸岡 孝司 

発行日:2007年7月25日

発行者:黒田 康夫

発行所:株式会社ラトルズ

411ページ

2,600円+税

 

内容

開発の現場から生まれた実践テクニック&TIPS集。

"Visual C# プログラミング"という大海原をひとりゆくプログラマのために。

  • Chapter1 .NET FrameworkとC#プログラミング
    Visual Studioの使い方、C#コーディング方法、C#のデータ型、制御構造
    などの言語仕様に関するテクニックやTIPSを収録。

  • Chapter2 Windowsアプリケーション
    Windowsフォームやコントロールを使用した、Windowsアプリケーション
    作成のテクニックやTIPSを収録。

  • Chapter3 データベース処理
    .NET Frameworkにおけるデータベース処理に関するテクニックやTIPS
    を収録。

  • Chapter4 Webとネットワーク
    .NET Frameworkにおけるネットワーク処理について簡単に紹介。

 

ポイント

職場で一緒に仕事している人からのお勧めの一冊。借りました。

現在、C#のプロジェクトを一から作り始めて進行中なので、フレームワーク

作りの参考にしました。

 

タイトル "絶対現場主義" にもあるように、実際に現場で開発をする人たち

にとって役立つ内容となっています。

 

特に、C#プロジェクトはまだあまり経験がないけど、こんな感じでいいのかなぁ

とか、Javaのプロジェクトは経験したけど、C#ではどうするべきか・・・(悩)とか、

昔ながらのVBスタイルのプログラムは書けるけど、C#ってオブジェクト指向が

ベースだし、クラスとか、継承とか、カプセル化もいまいち良くわかんないよなぁ

とか・・そんな悩める人たちの手助けになると思います。

 

書き方も、従来の単純な解説書やリファレンス、TIPS集などとは違い、いちいち

現場目線での解説(こういう背景だからこんな疑問が発生し、こう解決すれば

良いのでは?スタイルでの記述)がされており非常に読みやすくなっています。

例示されているシーンも、一度は誰もが悩んできたであろう内容で納得できます。

(その分、普通のTIPS集では1ページで書かれている内容が3?5ページかけて

解説されていたりしますが・・)

 

特に、Windowsアプリケーションでは、開発のフレームワークをどうするべきかや、

コントロールの拡張方法、共通化などについても詳しく書かれていますので、

実際のプロジェクトの参考にできると思います。

 

最後に、Webアプリケーションの事については紹介として少しだけ解説されて

いますが、つい先日、この書籍の、"Webアプリケーション編"が出版されたよう

ですので、紹介だけしておきます。※私は.NETだと、APS.NET MVCの方に

興味があるため、こちらの書籍(MVCについては触れられていなさそう?)

なので購入するかどうかは今のところ未定です。

 

 絶対現場主義Visual C#実践講座(Webアプリケーション編)

 

  

前回は、twitterの最新のつぶやきを表示する、

簡単なアプリケーションを作成してみました。

 

ロジックとしては、twitterで指定されたAPIを呼び出し、

XML形式のデータを取得し、XPathでXMLデータを解析して

表示するといった内容でした。

 

今回は、Webの世界ではXMLより手軽に扱えるとされている、

JSON形式のデータを扱うことにします。twitterのAPIでも標準で

JSON形式のデータに対応されています。

 

今回も、C#.netを使用してアプリケーションを作成してみました。

(プログラムの機能は前回と同じです)

 

ダウンロード

20090914.jpg

※実行にはJson.NETのライブラリも必要です(ダウンロード

 

JSON形式のデータをC#で定義したクラスにマッピングすることで、

マッピング後のデータの操作が簡単・柔軟になります。

 

ソース(TwitterForm.cs)

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace TwitterApplication
{
    public partial class TwitterForm : Form
    {
        public TwitterForm()
        {
            InitializeComponent();
            lstItems.Items.Clear();
        }

        private String GetTweet(String URL)
        {
            //Request
            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(URL);
            Request.Method = "GET";
            WebResponse Response = Request.GetResponse();
           
            //Read
            StreamReader Readar = new StreamReader(Response.GetResponseStream());
            String Results = Readar.ReadToEnd();

            //Return
            Readar.Close();
            Response.Close();
            return Results;
        }

        private void btnTimeLine_Click(object sender, EventArgs e)
        {
            String URL = "http://twitter.com/statuses/user_timeline/" + txtUser.Text + ".json?count=50";
            String JSON = GetTweet(URL);
            List<Status> StatusList = (List<Status>)JsonConvert.DeserializeObject(JSON, typeof(List<Status>));
           
            lstItems.Items.Clear();
            lstItems.HorizontalScrollbar = false;
            foreach (Status StatusObject in StatusList)
            {
                lstItems.Items.Add(StatusObject.Text);
            }
            //ScrollBarSetting
            lstItems.HorizontalScrollbar = true;
        }
    }
}

 

ソース(Twitter.cs)

namespace TwitterApplication
{
    public sealed class Status
    {
        public string In_reply_to_status_id { get; set; }

        public bool Favorited { get; set; }

        public string In_reply_to_user_id { get; set; }

        public string Source { get; set; }

        public string Created_at { get; set; }

        public string In_reply_to_screen_name { get; set; }

        public User User { get; set; }

        public string Id { get; set; }

        public bool Truncated { get; set; }

        public string Text { get; set; }
    }

    public sealed class User
    {
        public string Profile_sidebar_border_color { get; set; }

        public string Description { get; set; }

        public string Url { get; set; }

        public string Screen_name { get; set; }

        public string Following { get; set; }
           
        public bool Verified { get; set; }

        public string Profile_text_color { get; set; }

        public int Followers_count { get; set; }

        public string Profile_background_image_url { get; set; }

        public string Created_at { get; set; }
       
        public string Notifications { get; set; }

        public int Friends_count { get; set; }

        public string Profile_link_color { get; set; }

        public bool Profile_background_tile { get; set; }
       
        public int Favourites_count { get; set; }

        public string Profile_background_color { get; set; }

        public bool Protected { get; set; }

        public string Time_zone { get; set; }
       
        public string Location { get; set; }

        public string Name { get; set; }

        public string Profile_sidebar_fill_color { get; set; }
       
        public string Id { get; set; }

        public int Statuses_count { get; set; }
       
        public int Utc_offset { get; set; }

        public string Profile_image_url { get; set; }
    }
}

 

twitter(ツイッター)とは、"つぶやき"という短いテキストを投稿して公開する

サービス(マイクロブログサービス)である。

 

ま、大抵の人は名前だけは知っていると思いますが、このtwitterには、API

が公開されており、簡単に呼び出して外部アプリ等と連携することができます。

 

今回は、C#.netを使用してアプリケーションを作成してみました。

  • C#.net 2008
  • .net framework2.0

ダウンロード

 

20090913.jpg

 

内容は、テキストボックスに、ユーザ名を入力して表示ボタンを押すと、

リストボックスに最新のつぶやきが50件まで表示されるというシンプルなもの。

 

APIとしては、

http://twitter.com/statuses/user_timeline/ユーザ名.xml?count=50

上記へリクエストした結果のXMLを解析して表示するだけです。

コメント"count"パラメータが取得する最大件数です。

XPathにて"//statuses/status/text"のノードリストを取得します。

 

ソースコード

using System;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;

namespace TwitterApplication
{
    public partial class TwitterForm : Form
    {
        public TwitterForm()
        {
            InitializeComponent();
            lstItems.Items.Clear();
        }

        private String GetTweet(String URL)
        {
            //Request
            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(URL);
            Request.Method = "GET";
            WebResponse Response = Request.GetResponse();
           
            //Read
            StreamReader Readar = new StreamReader(Response.GetResponseStream());
            String Results = Readar.ReadToEnd();

            //Return
            Readar.Close();
            Response.Close();
            return Results;
        }

        private void btnTimeLine_Click(object sender, EventArgs e)
        {
            String URL = "http://twitter.com/statuses/user_timeline/" + txtUser.Text + ".xml?count=50";
            String XML = GetTweet(URL);
            XmlDocument Doc = new XmlDocument();
            Doc.LoadXml(XML);
            XmlNodeList XMLNodes = Doc.SelectNodes("//statuses/status/text");

            lstItems.Items.Clear();
            lstItems.HorizontalScrollbar = false;
            foreach (XmlNode Node in XMLNodes)
            {
                lstItems.Items.Add(Node.InnerText);
            }
            //ScrollBarSetting
            lstItems.HorizontalScrollbar = true;
        }

        private void TwitterForm_Load(object sender, EventArgs e)
        {

        }
    }
}

 

 

JANコード

JANコードとは、ご存じのとおり、日本で最も普及している、

商品識別コードおよびバーコードの規格のひとつです。

 

商品のパッケージや梱包された箱に印刷されたり、シールが貼付けられ、

商品を識別するための情報として、POSシステムや、販売管理・在庫管理等、

様々なシステムで利用されています。

 

構成

JANのコード体系(構成)は以下のようになっている。

標準の13桁のコードまたは、8桁の短縮のコードが存在する。

13桁

 国コード(2桁) + メーカコード(5桁) + 商品コード(5桁) + チェックデジット(1桁)

 国コード(2桁) + メーカコード(7桁) + 商品コード(3桁) + チェックデジット(1桁)

8桁

 国コード(2桁) + メーカコード(4桁) + 商品コード(1桁) + チェックデジット(1桁)

 

日本の国コードは、"49"または"45"となっている。

 

チェックデジット

チェックデジットは、コードの入力誤りや、バーコードの読み取りミスを防止するために、

12桁のコードから算出した、誤り検出用の付加コードです。

コードを読みとった際に、再度チェックデジットを計算し、読み取ったチェックデジットと

相違がないかで確認をすることができる。

 

JANコードの作成

上記のように、JANコードは決められたルールを基に作成されていることがわかる。

特に、チェックデジットについては、作成した12桁のコードからさらに計算をおこない

13桁目のコードを算出することになる。

※チェックデジットの算出についてはここを参照。

 

そこで、簡単ではあるが、JANコード作成用のプログラムを作成してみた。

国コードは、"49"または"45"より選択し、メーカコード(5桁)、商品コード(5桁)の

タイプで入力し、"作成"ボタンを押すと、チェックデジットを計算し、13桁のJAN

コードを表示するという単純なものです。

※とりあえず最低限の対応をしてみました。

 

20090124.jpg

 

[JANコード作成]

 

(注)

C#でのプログラミングは慣れていないので、とりあえず動作するように、

調べつつ作成しています。より洗練されたプログラム記述あれば、

コメントください。

 

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace JanCodeMaker
{
    public partial class frmJan : Form
    {
        public frmJan()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cmbCountry.SelectedIndex = 1;
            txtMaker.Text = "";
            txtSyohin.Text = "";
            txtJan13.Text = "";
        }

        private void frmJan_Shown(object sender, EventArgs e)
        {
            txtMaker.Focus();

        }

        private void frmJan_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter) {
                bool forward = e.Modifiers != Keys.Shift;
                this.SelectNextControl(this.ActiveControl, forward, true, true, true);
                e.Handled = true;
            }

        }

        //チェックディジットを計算する
        private void btnMake_Click(object sender, EventArgs e)
        {
            string source = cmbCountry.Text + txtMaker.Text + txtSyohin.Text;
            if (source.Length != 12) {
                MessageBox.Show("12桁で入力してください。");
            }

            int chk1 = 3 * (Int16.Parse(source.Substring( 1, 1)) +
                            Int16.Parse(source.Substring( 3, 1)) +
                            Int16.Parse(source.Substring( 5, 1)) +
                            Int16.Parse(source.Substring( 7, 1)) +
                            Int16.Parse(source.Substring( 9, 1)) +
                            Int16.Parse(source.Substring(11, 1)));
            int chk2 = 1 * (Int16.Parse(source.Substring( 0, 1)) +
                            Int16.Parse(source.Substring( 2, 1)) +
                            Int16.Parse(source.Substring( 4, 1)) +
                            Int16.Parse(source.Substring( 6, 1)) +
                            Int16.Parse(source.Substring( 8, 1)) +
                            Int16.Parse(source.Substring(10, 1)));
            int chk3 = 10 - ((chk1 + chk2) - (((chk1 + chk2) / 10) * 10));
           
            if (chk3 == 10) { chk3 = 0; }
            txtJan13.Text = source + chk3.ToString();
            //MessageBox.Show(chk1.ToString() + "/" + chk2.ToString() + "/" + chk3.ToString());
        }

    }
}