英語の勉強のススメ

2012/11/09 19:11:05

 リーディング・エッジの吉永彰成です。これまでプログラミング言語やプログラミングコンテストについての記事を執筆してきましたが、今回は趣向を変えて、英語の勉強について書いてみようと思います。私は空き時間に趣味で数学と英語を勉強しており、特に最近は専ら英語ばかり勉強しています。また、日常的に英語の勉強に関する情報をブログや市販の書籍から集めています。今回はオンライン上で無料で利用できる英語の学習リソースを3つ紹介します。

■[英語発音入門]

 私は音声CD付きの教材で勉強するときは、原則的に英文を音読しています。音読はプロのナレーターが読み上げる音声を聴きながら、その音声から少し遅れて本文を見ながら行っています。プロのナレーターの発音をできるだけ自分で再現できるようになるまで音読を繰り返します。このときカタカナ英語で発音すると英語の発音のために必要な口や舌の筋肉が鍛えられず音読の効果が期待できないため、必ず音読の前に英語の個々の音素の発音を確認するようにしています。私は市販の書籍で発音を確認しているのですが、Webにも発音の教材がいくつかあります。[英語発音入門]はその中の一つであり、大学の先生が作成された教材です。日本人が苦手な音素の発音が分かりやすく解説されています。

■ニュースで英会話

 「ニュースで英会話」は、NHK国際放送局で放送された英語ニュースを題材として、さまざまな方法で英語のトレーニングができるサイトです。まず、英語のトランスクリプト(音声を文字に書き下ろしたもの)があるため、音読の教材として利用できます。また、プロのアナウンサーが読み上げたゆっくりめのスピードの音声とナチュラルスピードの音声が聴けます。これは音読のお手本としてだけでなく、シャドーイング(音声に少し遅れて発音すること)の教材としても利用できます。さらに、センテンス(文)毎の音声の再生もできるため、ディクテーション(聞き取った音声を書き取る事)の練習もできます。

■BBC Learning English

 アメリカのCNNやイギリスのBBCのニュースを聴いて、リスニングの練習をしている方も多いと思います。その中でも特におすすめなのがBBC Learning Englishです。このサイトには英語の学習者向けのニュース教材が数多くあるのですが、個々のニュース教材の音声(MP3ファイル)とテキスト(PDFファイル)がダウンロードできるため、「ニュースで英会話」と同様にさまざまなトレーニングが可能です。

 私のお気に入りは「6 Minute English」です。教材1回分が約6分で構成されており、BBCで放送された世界中のニュースを題材として、少しゆっくりめのスピードでニュースの解説が聞けます。日本のニュースが話題になることもあります。また、テキストには重要語彙(ごい)の意味が英英辞書のように英語で書いてあり、教材の最後にはアナウンサーが重要語彙を1つずつ発音してくれます。さらに、毎回ニュースの内容に関するクイズが一つあるので、聴いた英語の理解度を試せます。

 以上で教材の紹介を終わります。今回は3つのサイトを紹介しましたが、英語に関心のあるエンジニアの皆さんに少しでも役に立てれば幸いです。日常の英語の勉強の結果を定量的に計る方法として、TOEICテストを受験することが考えられます。私の友人のエンジニアの一人は、英語の勉強を継続的に行った結果、400点から900点にスコアを上げました。私は今年の10月からTOEICの公開試験を連続で受験し始めました。今年11月と12月の試験は申し込み済みです。

 オンラインの英文添削サービスを利用して英作文の勉強もしているので、TOEIC Speaking & Writingテストも近い将来にチャレンジしたいと思います(ちなみに、Speakingテストには音読の問題があります)。英語の勉強の成果を客観的に確認したいため、今のところ特にTOEICに特化したテクニックの勉強は行っていません。普段は、市販のCD・DVD付き発音教本やTOEIC新公式問題集Vol.1~Vol.5で音読・シャドーイング・ディクテーションの方法で勉強しているのですが、発音の参考にしたり、違う教材で気分転換をしたりするために上記のサイトも利用しています。

configure の作り方 ~まだ Makefile を書いていませんか?~

2012/08/01 12:37:49

 リーディング・エッジ社の末広です。

 Makefile を生成してくれる「configureスクリプト」の作り方を簡単に紹介します。

 configureを利用する利点は以下のようなものです。

  • 何も書かなくてもヘッダの依存関係を自動で調べてビルドする
  • yacc や lex といったツールも拡張子で判断してバイナリにしてくれる
  • ビルド環境のヘッダやライブラリの有無のチェックを自動で行ってくれる
  • configure の実行時のマシン環境をlogとして保存

 中でもトラブルシューティングに必要なマシン環境のlogは重宝します。

 configure は autotools というツール群によって作ることができます。

■autotools とは

 autotools は、automake,autoconfig などの autoXX と名付けられたツールの総称で、ユーザーからは、 configure という実行形式で提供されるものをいいます。

 以下のような設定をした Makefile 、ヘッダファイルの生成を行います。

  • C,C++を利用するうえで、OSやコンパイラなどの環境に依存する、システムコール、ライブラリが存在しているかのチェック
  • コンパイル、インストールするための環境を自動設定
  • インストール先の設定
  • クロス用のツールチェイン(コンパイラ、リンカ、スプリッタ等)を Path から検索を行いビルドの設定

 これによって、Mac OS、商用UNIX、Linux、BSD、Windows、TOPPERS、OSなどの環境の組み合わせでも、単一のソースコードで実行可能なソフトウェアを開発するための基盤となっています。

クロスコンパイル環境であっても、configureの引数--hostに toolprefix (armの場合、arm-target-linux-gnueabiなど)を記述することで、自動的に必要なツールチェイン・ライブラリの有無を調べてくれます。ただし、新しいバージョンでは――hostを指定する場合――buildにビルドするマシンのアーキテクチャを記述する方法が推奨されています。

■configure作成スクリプト

 あまり使わないのですぐに忘れてしまうため、自分はテンプレートを作って、 congfigure を作成するまでを全部やってくれるシェルを利用しています。

そのシェルが以下のようなものになります。

=========

#!/bin/sh
cat >>Makefile.am <

#testと言うプログラムをビルド、インストールするためのサンプル

#ビルドしてインストールするプログラム名
bin_PROGRAMS=test

#test_CFLAGSはtestをコンパイルする際のコンパイルオプション
#../configureなどルートディレクトリ以外で実行した時のインクルードディレクトリの指定
test_CFLAGS=-g -I @srcdir@/include/
#test_CXXFLAGS はC++ の場合のコンパイルオプション
#test_CXXFLAGS is test package C++ compiler option

#test_LDADDはtestが利用するライブラリ
test_LDADD= -lm

#test_SOURCESはtestのソースコード(複数可)
test_SOURCES=test.c

#ライブラリ用の設定
#インストールするヘッダファイル
include_HEADERS=test.h
#ライブラリ作成する際のライブラリ名
lib_LIBRARIES=libtest.a
#libtest.aのソースコード
libtest_a_SOURCES

#ビルドしないけどインストールするファイル
#prefixオプションで指定したディレクトリ以下の/share/パッケージ名に配置される
pkgdata_DATA=setting
#C言語からdefineとして参照する
AM_CFLAGS = -DEVENTTABLE_CSV='"$(pkgdatadir)/setting"'

#再帰的にmakeを実行するディレクトリの指定
SUBDIRS= subdir subdir2/subsubdir
EOF
vim Makefile.am
autoscan
touch NEWS README AUTHORS ChangeLog
awk '{if(/AC_INIT/){ print "AC_INIT(FULL-PACKAGE-NAME, 0.0.1, name@hoge.jp)";print"AM_INIT_AUTOMAKE" }else{ print $0} }' configure.scan > configure.ac
vim configure.ac
aclocal
autoheader
autoconf
automake -a -c

=========

 プログラマにとって、便利でもあり面倒な Makefile は、コンパイル環境構築には欠かせないものです。ところが、ソースコードのフォルダ管理と各種ツールのバス設定が煩雑になってくるとメンテナンスが難しくなってきます。最近の統合開発環境では GUI によって自動生成を行なってくれる場合もありますが、昔からある GNU ツールの開発環境の「configure」スクリプトが基本となっているので一度チャレンジしてみてはいかがでしょうか?

より詳しい設定などは書籍やman、infoなどをご覧ください

GNU Autoconf/Automake/Libtool

競技プログラマの間で名高い、オンラインジャッジまとめ

2012/07/09 15:19:18

 リーディング・エッジ社の吉永彰成です。以前言語マニアが勧めるプログラミングコンテストまとめというコラムを書いたところ、私の想像以上に多くの人にご覧頂きました。今回は、プログラミングコンテストと関連して、一般にオンラインジャッジと呼ばれるいくつかのサイトをご紹介します。

■オンラインジャッジについて

 オンラインジャッジは、与えられた問題を解くソースコードを提出すると、そのソースコードが正確かどうか判定してくれるWebサービスです。具体的なサービスの内容は下記の通りです。

  • 無料で利用できますが、利用前にアカウントの登録が必要
  • 簡単なものから難しいものまでさまざまなレベルの問題が与えられる
  • サンプルのインプット(入力)とアウトプット(出力)が与えられる
  • プログラムの実行時間の制限とメモリの使用量の制限が与えられる
  • 使用できるプログラミング言語は、各オンラインジャッジで異なりますが、C++、Javaなどを使える
  • 問題を解くソースコードを提出すると、そのソースコードがビルドされて、バグの有無やプログラムの実行時間、メモリの使用量などをチェックするテストが実行される
  • テスト実行後、結果(正解/不正解/時間制限オーバー/メモリ制限オーバー)やプログラムの実行時間、メモリの使用量、使用したプログラミング言語などが表示される

 問題の内容は、基本的なアルゴリズムの実装能力を試すものから数論やグラフ理論のような高度な数学・計算機科学の知識が必要となるものまで、実に多種多様です。多くの問題では、複数の解法で解けるため、平凡な発想で力任せ(ゴリ押し)で長時間かけて解く人もいれば、高度な発想で美しくエレガントなソースコードを素早く書き上げる人もいます。利用者のスキルに応じて、プログラミングの実技試験対策やプログラミングコンテストの練習として利用できます。

 以下では、日本の競技プログラマの中で知名度の高いオンラインジャッジをいくつかご紹介します。

■PKU JudgeOnline

 PKU JudgeOnlineは、北京大学のオンラインジャッジです。PKUやPOJという略称で親しまれています。主な特徴は下記の通りです。

  • 競技プログラマならば、誰もが知っているオンラインジャッジ
  • 時々、プログラミングコンテストが開催されている
  • 使用可能な言語は、C、C++、Java、Fortran
  • 問題数は3000以上
  • 問題文は英語ですが、中には日本語に翻訳されている問題もある

■AIZU ONLINE JUDGE

 AIZU ONLINE JUDGEは、会津大学のオンラインジャッジです。AOJという略称で親しまれています。主な特徴は下記の通りです。

  • 日本のオンラインジャッジ!
  • 時々、プログラミングコンテストが開催されている
  • 使用可能な言語は、C、C++、Java
  • 問題は、日本情報オリンピックやACM国際大学対抗プログラミングコンテストなどの過去問
  • 問題文は英語ですが、日本語の問題もある

■その他のオンラインジャッジ

 前回ご紹介したプログラミングコンテストTopCoderCodeforcesでは、過去問が公開されており、ソースコードの提出及びテストが可能のため、オンラインジャッジとして利用できます。

■オンラインジャッジの活用方法

 オンラインジャッジの問題やプログラミングコンテストの過去問を解いた人の中には、解いた問題のソースコードをブログで掲載している人もいます。例えば、TopCoder部でリンクされているブログを見てみて下さい。この中には、RedCoderと呼ばれるTopCoderの上位者のブログもあり、着眼点や解答に至るまでの思考過程が、非常に参考になります。

■参考書

 前回ご紹介した『プログラミングコンテストチャレンジブック』の第二版が出版されています。この第二版では、PKU JudgeOnline、AIZU ONLINE JUDGE、Codeforcesの問題が練習問題として参照されています。

■最後に

 最近では、日本でも、エンジニアのプログラミング能力を見るため、プログラムを書いて提出するシステムを採用試験として導入する企業が現れ始めました。上記のようなオンラインジャッジで問題を解き、優れたプログラマのソースコードを読む事で、アルゴリズムとデータ構造の知識を深め、実装力を磨く事で、このような試験に対しても有利になれるのではないでしょうか。

草の根勉強会のススメ

2012/01/05 15:12:21

■草の根勉強会へのきっかけ

 こんにちは、リーディングエッジ社でAndroidの開発を行っている山本昭弘です。

 私はAndroidの開発を2009年ぐらいから行っております。当時はまだAndroidが出たばかりで、まったく情報がなく、ほとんどがWeb上で調べていました。日本ではAndroidの会が一番有益な情報を提供してくれて、かつ、草の根の勉強会の開催通知をMLで公開してくれました。

■衝撃的な勉強会

 私はそれほどフレンドリーな人間ではないのですが、ちょっとだけ勇気を出して出席をしてみました。開催する料金は無料~1000円程度が多くて、会費も場所代やお茶代だったりと安いのが多いです。一番衝撃だったのが、「ギークな人たちが多い」です。私もJavaの経験が10年以上あり、多数の修羅場現場を経験しているのでそれなりに技術には自信がありましたが、勉強会に出でて見事にその自信が打ち砕かれました。

Image

■ギークな人

 いつもは「技術力が高い人が集まらないなぁ」と嘆いていたのですが、ここにはたくさん集まっていて、かつ、親切丁寧に教えてもらえます。資料も丁寧なものが多く、ディスカッションも濃いものが多いです。

■弊社でも開催してます

 今は、そう言った草の根勉強会の魂を引き継ぎ(?)私自身が草の根勉強会の手伝いをしたり、実際に開催もしています。

 もしこの文章を見て、御興味を持った方がいましたら勉強会に参加してみてはどうでしょうか。

 ちなみに、弊社で2012年1月21日にAndroidOpenGL勉強会を開催しますので、よろしければどうでしょうか。会費はみんなで食べるお菓子です。持ってこなくてもOKですよ。

Photo_3

 こんな感じでやってます!

 

言語マニアが勧めるプログラミングコンテストまとめ

2011/12/16 10:44:13

 リーディング・エッジ社の言語マニアの吉永彰成です。今回は、プログラミングコンテストを紹介したいと思います。

プログラミングコンテストについて

 プログラミングコンテストは、世界中のプログラマが集まり、コーディング能力を競い合う競技です。 ある課題について、アルゴリズムとデータ構造の知識を駆使し、C++などのプログラミング言語でソースコードを素早く書き、正確にデバッグする能力が必要になります。 オンサイトで行われるコンテストとオンライン上で行われるコンテストがあります。この記事では、オンライン上で参加できて、私が参加したことのあるコンテストを紹介します。

TopCoder

 TopCoderは、オンライン上で参加できるプログラミングコンテストの中で最もメジャーなコンテストの1つです。TopCoderでは、様々なコンテストが開催されていますが、中でもSingle Round Mach (以下SRM)は月に3回程度開催されており、参加し易いコンテストです。

 参考のため、SRMのルールを簡単に説明します。SRMでは、75分のコーディングフェーズの間に、3つの課題についてソースコードを書き提出します。使用できる言語は、C++、Java、C#です。1つの課題毎に好きな言語を使ってコーディングする事ができます。私は毎回C++で書いています。なお、課題文は英語です。出題者への質問や他の参加者との交流も基本的に英語で行います。

 コーディングフェーズ後に5分間の休憩を挟んで、15分間のチャレンジフェーズがあります。チャレンジフェーズでは、他の参加者のソースコードを見て、バグを見つけ出します。他の参加者のプログラムに入力を与える事ができ、バグを誘発する入力を与えると、自分に得点が加算されます。

 チャレンジフェーズ後にシステムテストがあり、作成したソースコードが正確な解を出力するかどうか詳細に試験されます。試験に合格した場合、その課題の難易度と提出するまでの時間によって得点が加算され、最終的なコンテストの結果が出ます。

 コンテストの結果によって、各参加者のレーティングが変動します。レーティングが1200未満の人はDivision 2、1200以上の人はDivision 1に振り分けされます。レーティング2200以上の人はRed Coderと呼ばれ、相当の実力のある人しか到達できない狭き門です。

Codeforces

 Codeforcesもオンライン上で参加できるメジャーなコンテストです。月に3回程度開催されています。使用できる言語が豊富で、C++、Java、C#の他、Python、Ruby、Haskell、Scala等が使用できます。私はC++かPythonで参加する事が多いですが、たまに気分転換でC#も使います。課題文は英語です。

Google Code Jam

 Google Code Jamは、Googleが主催するコンテストで、年1回開催されています。使用できる言語は、すべてのプログラム言語です。勝ち抜き戦で、Qualifier (予選), Round 1A, Round 1B, Round 1C, Round 2, Round 3, Final (決勝戦)があります。予選では、全ての課題について、異なる言語を使ってコーディングする人がいて、一種の名物になっています。私は、C++とD言語で参加しています。課題文は英語です。

Ant_4

東京大学プログラミングコンテスト

 東京大学の学生が年1回に主催するコンテストです。初心者から上級者まで参加できるコンテストになっています。コンテスト後行われる懇親会では、普段TopCoderやCodeforcesで腕を競い合っている参加者と交流する事ができます。課題文は日本語です。

参考文献

 これからプログラミングコンテストに参加したいと考えている方に、まず読んで頂きたいのが、『プログラミングコンテストチャレンジブック』です。プログラミングコンテストの練習問題と定石がまとまっていて、アルゴリズムの基礎について解説も丁寧に書かれている名著です。著者は東京大学大学院にて計算機科学を専攻する大学院生です。私は東京大学プログラミングコンテストの懇親会でこの本の3名の著者(右の画像)と最強最速アルゴリズマー養成講座の高橋直大さんからサインを頂きました。

参考サイト

 TopCoder部では、主要なプログラミングコンテストの日程を確認したり、各参加者の現在のレーティングを一覧で確認したりする事ができます。TopCoder部では、ブログを公開する事ができ、各コンテストで書いたソースコードを解説付きで公開している参加者も多数います。

最後に

 プログラミングは楽しいものです。しかし、開発エンジニアの中には、納期に追われてばかりで、プログラミングの楽しさを忘れている方も多いのではないでしょうか。そういう方は、是非とも趣味としてプログラミングコンテストに参加し、アルゴリズムを考える力を養いながら、プログラミングの楽しさを再発見していただきたいと思います。

ビジネスパーソンとしてのエンジニアに必要なこと

2011/06/07 17:10:25

 初めまして、株式会社リーディング・エッジ社のエージェントの加藤です。今回、飛び入り参加させて頂きます。

 職業柄、私の周りにはたくさんのエンジニアがいます。日々会話をする機会もあります。そのエンジニア達に、エンジニア視点から一歩離れて伝えたいことを書かせていただきます。

■私の気づき

 まずは自分自身のことなのですが、「リーダーとして何が必要なのか」「どうすれば、得たい結果を得ることができるのか」といった内容を、ビジネス本やセミナーで学ぶ中で、いろいろな著者や講師の方々の考え方に触れています。初めのうちは惑わされることもあったのですが、言葉の使い方や手段・手法は異なっていても、基本的にはほとんど同じことを言っていると今は理解しています。目的を持って行動すること、原理原則に反してはいけない、矢印を相手では無く自分に向けること(他責では無く自責)が大切だということです。

■自分の将来って?

 「将来どんなエンジニアになりたいですか?」時々、こんな質問をすることがあります。「SEになりたい」「マネージャを目指したい」、このような答えが返ってくることが多いのですが、時には「現在の仕事で精一杯で、具体的にはありません」と言う人もいます。目の前の目標の1つひとつはどうでも良いとは言いませんが、あくまでも目的達成の途中経過でしかありません。もっと遠い将来の自分や、大げさかもしれませんが、どんな人生をおくりたいか、ということに焦点を当てることが大切だと思います。明確な目的達成イメージを持つことが、自分にとっての成功を後押しするのではないでしょうか。未だ夢の途中だとは思いますが、スポーツ選手のイチローや石川遼などは、子供の頃に今の自分を言葉にしています。

■目に見えない大切なもの

 私たちは、つい目に見えるものを追いかけてしまいがちです。エンジニアの方々は、日進月歩のこの業界に身を置き、資格を取得したり、新たなテクニカルスキルを身に付けていると思います。もちろん、それは大切なことです。ですが、目に見えない考え方の土台となる自分の「人格」の成長にも目を向けてみることが必要ではないでしょうか。「能力」と「人格」は、補え合えないものだそうです。確かに、どんなに仕事が出来る人でも、人格に問題を抱えていては信頼関係は保てませんし、一緒に仕事をしたいとは思えないですよね。

■仕事を面白く

 やらされ感を感じて、つまらなそうに仕事をしている人がいます。それは、とてももったいないことだと思います。私たちは平日であれば大半を仕事の時間に使っています。仕事を「押し付けられた」と思い続けるか、最初は人に勧められたとしても、最終的には「自分で選択したもの」と思えるかで、仕事の質に大きな差が生まれるのはないでしょうか。さらに、「誰か(何か)の役に立っている」と思えれば、大きなやりがいを感じるでしょう。一日の大半・・・いえ、人生の大半を仕事の時間にしているのですから、自分で選んだ自分の仕事を面白く感じたいものです。

伸びないベテランエンジニア

2011/05/16 11:14:37

 こんにちは。株式会社リーディング・エッジ社でAndroid開発を行なっている山本昭弘です。私が新入社員だったころはアセンブラで開発をしていました。その後にC言語、Java……となり、現在はAndroidの開発を行っております。この業界で20年近くやっており、そろそろこの手の話をしても良い年齢になったのと経験をしたかと思い、書きます。

■現状維持バイアスとは

 皆さん、「現状維持バイアス」という言葉をご存知でしょうか?

 現状維持バイアスとは、未知なもの、未経験なものを受け入れず、現状は現状のままでいたいとする心理作用のことです。つまり、過去の成功体験が忘れられずになかなか新しいことへ挑戦ができないことを言います。過去に実績がある人、年齢が高い人ほどいっそうこの「現状維持バイアス」がかかる傾向にあると聞きます。私の経験ですが、エンジニアの場合は過去に多大な努力をして得たスキルについても同様のようです。

Image1

■日進月歩なコンピュータソフトウエア業界

 そのスキルがずっと市場価値が高いものであればいいのですが、日進月歩なこの業界なため、そのようなことはありません。これから流行る分野だとしても、そこにどんどん人が集まってきて価値が下がってきます。高いスキルが必要な分野だから大丈夫かと言うと、その場合は使える人が少ないので、市場がどんどん小さくなってきたり、代わりになるような分野が出てきます。

 何年も同じことをやっていればいつか衰退し、必ず新しいスキルが必要となります。皆さん、冷静に状況を判断し、勇気を持って新しいことにチャレンジしましょう。

Image2

 

Pythonを使ってみよう

2011/01/25 17:24:51

 初めまして。リーディング・エッジ社に勤務している言語マニアの吉永彰成と申します。現在、Java言語を使ってAndroidアプリを開発しております。

 私は今まで、オブジェクト指向から関数型に至るまでさまざまなプログラミング言語を勉強してきました。最近は、その中でも特にPythonに興味を持って勉強しています。そこで、今回は私が個人的に「Pythonで素晴らしいと思っている特徴」をご紹介したいと思います。

■ Pythonについて

 まず、Pythonの概要を簡単にご紹介します。Pythonは現在Googleに勤務するGuido van Rossum氏によって開発された、オープンソースのスクリプト言語です。オブジェクト指向プログラミング、関数型プログラミング、ジェネリックプログラミングをサポートしており、プログラマの目的や習熟度に応じてさまざまなスタイルでプログラミングが可能です。日本でも多くの使用実績があり、構造解析ソフトウェアの組み込みのスクリプト言語として採用されていたり、流行のソーシャルアプリの開発でも使用されていたりします。また、現在は日本語の解説書やWebサイトなどの情報源も充実しているため、非常に学習しやすい言語だと思います。開発環境としては、Python本体に付属のIDE(統合開発環境)の他、EclipseのプラグインであるPyDevなどがあります。私はPyDevを使用しています。

■ 「リスト」と「リスト内包表記」

 それでは、私がPythonの中でも特にエレガントだと思っている、「リスト」と「リスト内包表記」をご紹介したいと思います。リストはPythonの基本的なデータ構造で、下記のように定義します。

a = [0, 1, 2, 3]

 aは0から3までの整数を要素として持つリストです。Pythonリストは可変長配列として実装されていて、C++のstd::vectorやJavaのjava.util.ArrayListで実装されているような操作を行うことができます(Pythonでは、各行の#より右の部分はコメントになります)。

b = a[0]       # aの0番目の要素「0」を取り出してbに代入
c = []         # 空のリストcを生成
c.append(4)    # cに「4」を追加 (結果、c == [4]になる)
c.append(5)    # cに「5」を追加 (結果、c == [4, 5]になる)
d = a + c      # aとcを連結してdに代入 (結果、d == [0, 1, 2, 3, 4, 5]になる)

 上の例では、最終的に0から5の整数を要素として持つリストdを生成しました。今度はdから偶数の要素だけを取り出したいと思います。このような場合、「リスト内包表記」を使用すると、下記のように書くことができます。

e = [x for x in d if x % 2 == 0]   # (結果、e == [0, 2, 4]になる)

 これは日本語に翻訳すると、「リストdの中の各要素xに対して、x % 2 == 0を満たすxを要素として持つリスト」をeに代入するという意味になります。もう1つリスト内包表記の例を出します。dの各要素を2乗したい場合、下記のように書くことができます。

f = [x ** 2 for x in d]            # (結果、f == [0, 1, 4, 9, 16, 25]になる)

 これも日本語に翻訳すると、「リストdの中の各要素xに対して、x ** 2 (xの二乗)を要素として持つリスト」をfに代入するという意味になります。なお、リストeとfが表現している集合を数学の集合の内包的記法で表現すると、下記のようになります。下記をご覧になると、上記のコードの意味がよりイメージしやすいかもしれません。

Eq1

Eq2

 (ここで、x≡0 (mod 2)はxが2で割り切れることを表します)

 このようにPythonの内包表記は、数学の集合の内包的記法に対応するように、for、if、inというキーワードをうまく組み合わせて表現していることがお分かりになると思います。

■ 「NumPy」「SciPy」「matplotlib」

 次に「NumPy」「SciPy」「matplotlib」というPythonのライブラリをご紹介します。NumPyとSciPyは数値計算ライブラリ、matplotlibは可視化ライブラリです。これらのライブラリを組み合わせることで、1つのPythonコードの中で数値計算と計算結果の可視化が同時に行うことができます。ここでは、NumPyでsinカーブを作成し、matplotlibで表示する例をご覧に入れます。Pythonコードは下記のようになります。

# -*- coding: utf-8 -*-
import numpy                        # NumPyをインポートする。
import pylab                        # matplotlibをインポートする。
N = 51                              # サンプリングする点を数を指定する。
xs = numpy.linspace(0, 1, N)        # 0から1の間で均等にN点を選びリストxsに格納する。
ys = numpy.sin(2 * numpy.pi * xs)   # sinカーブを作成する(引数にリストを渡していることに注目!)
pylab.plot(xs, ys, 'bo')            # 青い(b)点(o)でsinカーブを描画する。
pylab.plot(xs, ys, 'r-')            # 赤い(r)線(-)でsinカーブを描画する。
pylab.xlim(0.0, 1.0)                # X軸の描画範囲を指定する。
pylab.ylim(-1.5, 1.5)               # Y軸の描画範囲を指定する。
pylab.show()                        # sinカーブを実際に表示する。

 ここで、numpy.piは円周率です。また、6行目のys = numpy.sin(2 * numpy.pi * xs)は下記のコードと等値です。

ts = [2 * numpy.pi * x for x in xs]
ys = [numpy.sin(t) for t in ts]

 このコードを実際に実行すると下の図のようなグラフが表示されます。

Zu01

 いかがでしょうか。この例は単純でしたが、NumPy及びSciPyは大規模な行列計算やLegendre多項式などの高水準の数学関数をサポートしている本格的な数値計算ライブラリのため、より高度で複雑な計算を行う事ができます。また、matplotlibは3次元の等高面なども描画が可能です。詳細は各ライブラリのリンク先の公式サイトをご覧ください。普段MATLABなどの高価で高機能な数値計算ソフトウェアを利用しているが、オープンソースでフリーな数値計算ソフトウェアにも興味のある方は、このPython+NumPy +SciPy +matplotlibの組み合わせも有力な候補になるのではないかと思います。

■ 参考文献

 最後にPythonの参考文献をご紹介します。Pythonについてご興味を持ったので、言語仕様と標準ライブラリについて手早く把握したいという方は、Webで無償で公開されているPythonチュートリアルをお読みになることをお勧めします。

 このチュートリアルで勉強して、より高度なPythonの活用方法を知りたい方は、「エキスパートPythonプログラミング」という本に挑戦されるとよいでしょう。チュートリアルを読むだけでは得られない言語仕様とライブラリを駆使した高度なテクニックを身に付けられます。

Androidの隠されたパワー~技術者をこう変える~

2010/12/27 17:25:00

 はじめまして、リーディング・エッジ社 教育サービスマネージャの満岡です。Androidが注目される中、そこに秘められた力と、エンジニアとしての可能性をお伝えします。

■自分はこんな人

 最初の開発は、電話局にある巨大な交換機のソフトウェアでした。割り当てられたマシン時間でしか実機を触れないことに嫌気がさして、組み込みの世界へ飛び込みました。それからは、ドライバ開発やOS移植など、ハードウェアに近いところで仕事をしてきました。その後、組み込みLinuxでオープンソースに魅せられ、数年前から自ら(勝手に)ビジョンを持ち、「エンジニアに陽を当てる」活動を行っています。

■会社の中でのエンジニアの「仕事」ってなんだ?

 会社では、経営陣が予算を決め、営業陣が売ります。技術陣は、売り上げの根底を支えていながらも、社内の立場としては弱いのが現状です。それは、エンジニアは「作り上げる」ことが仕事でありながら、仕事の多くを営業陣が決めるからです。そこには絶対的な力関係が存在します。そこで、技術陣が価値を高め、単独で仕事を取ることができたらどうでしょう? 力関係が変化するはずです。

■生涯エンジニアと職業エンジニア

 皆さんは、新しいモノやソフトを手にしたとき、こんなことを感じたことはないでしょうか?

 「これ、どうなってるんだ?」「どうやって動いているんだ?」「少し改良してみたいな」

 エンジニアが誰しも持つ好奇心・探究心が、実は自らの価値を高める重要な要素なのです。私は、エンジニアには2つのパターンが存在すると思っています。

  • 技術に興味を持って、自らの意思で夢中で「作り上げる」 →『生涯エンジニア』
  • 仕事として割り切り、与えられたミッションをこなす →『職業エンジニア』

 現在、注目されている技術者の多くは、「生涯エンジニア」であると考えます。

■興味を持ったことを生かす方法

 生涯エンジニアは、自らのために時間とお金を投資します。そのことが、価値のあるエンジニアとなって、実は後で自分に大きく返ってくるベースになります。ただし、「価値」を判断するのは自分以外の人間です。どんなにいい技術者でも、実績・存在が他人に知られなければ「価値」はありません。そのために、「目立つ」必要があります。コミュニティに参加したり、ブログやTwitter、SNSなどを活用して発信したりして、同じ技術に興味を持った人々と知り合うことが重要です。

■なぜAndroidか?

 「オープンソース」「Java」「クラウド端末」「Google」「Linux」「スマートフォン」――Androidは、生涯エンジニアが活躍できる、興味を持つポイントを複数持ち合わせています。つまり、興味を持ったエンジニアが多く存在し、自らの活動を見てくれる(評価してくれる)機会が多いのです。

 現在、そこで「目立つ」ことにより直接的な仕事に繋がっていく流れが発生しています。近い将来、営業陣は、世の中で誰がどのように「目立っている」かを把握しているだけで、売り上げを上げていくようになるかもしれません(すでに知っている人に頼めれば、短納期で品質のいいものができるのですから……)。

 本内容の詳細は、リーディング・エッジ社で定期開催されている無料ナイトセミナーにおいて、以下のタイトルで講演しています。技術者がどのように実績を作ればいいか? Androidが生む新しいサービスの可能性は? など、具体例をあげてお伝えしています。

 「Androidが技術者に提供する新たな可能性 ~今、採用したい人材とは?~」

 どなたでもお気軽に参加可能です。よろしければぜひ。

Androidって意外と簡単!

2010/12/09 17:50:00

■自己紹介です

 皆さま、初めまして。リーディング•エッジ社の超絶敏腕Android開発者こと尾日向 洋皓(おびなた ひろあき)と申します。

 ……大嘘をつきました。敏腕開発者ではまったくありません。ごめんなさい。

 実は私は、今年10月にリーディングエッジ社に入社して、Android関連の開発(というか勉強でございます)に携わっています。

 以前の会社で2年半ほどJavaを用いたWebアプリケーションの開発を行っておりましたが、Android関連の開発はまったくの初心者です。初めましての今回は、「初心者が触ってみたAndroid」というテーマで書かせていただきたいと思います。

■Androidに対するイメージ

 私がAndroidという単語を初めて知ったのは、今から3年ほど前に参加したGoogleのカンファレンスでした。

 カンファレンスに一緒に参加した先輩に「おびちゃんはAndroidって知ってる? 多分、今後主流になるから見ておきなよ」と言われて、初めてAndroidという単語を知りました。

 その時のセミナー内容は「Androidで実現できること」というテーマでした。セミナー中に実機デモを行っているムービーを見たのですが、とても衝撃を受けたのを覚えています。

 デモの内容は、携帯電話のGPSで位置を取得してマップを表示、現在地を拡大してストリートビューを表示する、というものでした。まるで、SF映画の世界のように感じました。今では当たり前のように搭載されている機能ですが、その当時はとても感動しました。

 Androidに対して開発をしてみたい、という憧れはありましたが、当時SFのように感じた技術です。「難しいだろうな、俺には無理だろうな」と思い、諦めていました。

■Androidを体験してみて

 先に書きましたように、リーディング・エッジ社に入社して、初めてAndroidのアプリ開発を体験しました。

 私が思った感想を正直に書きます。

 「あれ、意外とAndroid楽じゃね(笑)」

 そうなんです、意外と簡単だと感じてしまいました。これは、私が超絶敏腕プログラマだからではなく、もっととんでもなく難しいものを想像していたからだと思います。私が3年前に見て難しくてできるはずがないと思っていたGoogle Mapsを表示するアプリケーションも、表示するだけならすぐにできてしまいました。

■意外と使えた今までの経験

 どうして私が、Google Mapsアプリを簡単に作ることができたのでしょうか?

 それは私が、浅いながらJavaの経験があったことと、Google MapsのAPIを使用したからです

・開発言語はJava

 Androidアプリを開発する言語はJavaです。私はWebアプリの開発経験しかありませんが、基本的な言語仕様、開発環境としてEclipseを使う点など、過去に経験した知識をそのまま使うことができたので、Android開発に入りやすく感じました。

・Google Maps API

 Google Mapsを作成するためにはGoogle Maps API を使用します。使用するために複雑な設定などは特に必要なく、MapViewをnewしてGoogle MapsのAPIキーを取得するだけ。表示だけなら簡単に行えます。

■まとめ

 複雑な設定などは特に必要なく、これまでJavaをやっていた方でしたら比較的入りやすく感じると思います。皆さまもぜひ挑戦してみてください。

@IT Special 注目企業
@IT Special ラーニング

エンジニアライフ 最新の投稿コラム

@IT自分戦略研究所 新着記事

コラムニスト プロフィール

哀T戦士
インフラ系・開発系と担当している仕事はそれぞれだけど、Linuxをこよなく愛するリーディング・エッジ社のエンジニアたち。

2013年5月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

バックナンバー

月間バックナンバー

検索

Powered by TypePad
- PR -
@IT Special 注目企業
インデックス

イベントカレンダー

アクセスランキング

もっと見る

@IT Special ラーニング