AtCoder を始めようかと思っている学生たちへ

現在、全国的に情報系の学生たちの間では空前の AtCoder ブームとなっていて、
「AtCoder を始めた知り合いが増えてきて、就職活動にも活用できそうだし、この機会に自分も始めてみたいけどどうしようかな」と考えている学生も増えてきているのではないでしょうか?
結論を先に言うと「なるべく早いうちから参加しましょう」となりますが、これまでに何回かコンテストに出場してみた経験からいろいろ書いていこうと思います。

AtCoder は、競技プログラミングのコンテストを Web で実施しているサービスです。
以前は競技プログラミングといえば難解でマイナーなイメージでしたが、AtCoder では難度の低い問題から段階的に用意されており、ページも見やすくカジュアルに参加できるようになっています。
初心者向けである AtCoder Beginner Contest はほぼ毎週、土曜日または日曜日の夜にオンラインで実施されています。

AtCoder の参加者のうち7割を学生が占めています。
とくにここ1年くらいの参加者の伸びが大きく、最近の AtCoder Beginner Contest では約5000人が参加しています。
しかしこのブームに乗って就職活動に役立てようと思いつつも、「実力を上げてから参加したい」と考えている人もいるのではないでしょうか?

これに対しては「なるべく早いうちから参加しましょう」が答えです。
なぜなら、コンテストへの参加回数が少ないと、実力がレートに反映されないからです。
最低でも10回以上は参加しておかないと実力よりも低いレートになる仕組みで (リセットマラソンの効果が低い)、実力証明が欲しいと思ったときに急に参加しても実力が認定されるわけではありません。

また、AtCoder におけるレートやランク (色) のレベル感を認識しておく必要があります。こちらの記事に説明が載っています。

AtCoder には日本全国・世界の強者が集まっており、水色 (1200) 以上あればかなりの上級者だろうと考えています。
通常の学生であれば、茶色が証明されれば十分実力があると言えます。
実社会では緑色の人に遭遇するのもなかなか難しいでしょう。

初級者はまず AtCoder Beginner Contest に参加して、問題 A・B を解くことを目標にしましょう。
問題 C までは分岐、ループ、データ集計など、一般的な開発者が実務で書く程度のコードでクリアできます。
問題 D 以降は処理高速化のためのアルゴリズムの知識・経験が必要になってきます。
もし仕事でプログラミングをしているのであれば、問題 C までは正解しておきたいところです。

本番のコンテストに参加する前に、過去問を練習しておきましょう。
問題文や解答の体裁に慣れていないと本番で無駄な時間を使ってしまいます (標準入出力など)。
コンテスト中もコンテスト外のときもサイトの使い方はまったく同じなので、過去問で本番同様の練習ができます。
過去のコンテストの問題は全て公開されています。他の参加者のコードを読んで参考にするのもよいでしょう。
AtCoder Problems という有志のサイトもおすすめです。

プログラミング言語は好きなものを選んでください。
標準入出力などのよく使うコードを含めたテンプレートを用意しておくとよいでしょう。例えば C# ではこんな感じです。
https://gist.github.com/sakapon/a88697da54fc78f838baeadcc19b54c4

各問題にはテストケースが用意されていて、それらをすべてパスすれば正解 (Accepted) となります。
こんな感じで、エディターからコピー&ペーストで提出できます。

AtCoder-Sub

というわけでまずは2~3か月、毎週参加し続けるのです(沼

comments

習作のすすめ

「習作」というのは、主に芸術の分野で使われている言葉で、練習のために小作品を作ることを指します。
プログラミングにおいても習作はいいぞ、という話をします。

学生の皆さんは普段、授業などで身に付けた技術を応用して何かを制作しているでしょうか?
あるいは逆に、何かを実現するために技術を応用しているでしょうか?
創作の経験の少ない人が何か壮大なものを作りたいと思い浮かべたとしても、すぐに実現するのは難しいことだと思います。
技術の習得とその応用には乖離があるのです。技術力と創造性のマッチングが必要で、いずれかが不足していても達成できません。

そこで、普段からそのギャップを埋めるための練習をしておくことが求められます。
ブログのネタを例に考えればわかりやすいと思います。
最近習得した技術についてブログの記事を何か書くことになったとして、他の人が作ったチュートリアルを手順通りに実施してそれについて書く・・・というのでは物足りないですよね。
例えば、自分なりの視点でどういう場合に役に立ちそうかを考えながら技術検証し、自分の興味の延長にあるサンプルを作るという方法が考えられます。これが習作です。
いろいろな人のブログ記事を見れば、このタイプがかなりあることに気づくでしょう。ブログのネタとしてなんとなく「ちょうどええ」範囲があると思います。

習作の結果として前例に重複することもあるとは思いますが、それはかまいません。
自分で考え出したものを自分で解決して作ってみることが成長につながります。
初めて使う技術の検証と軽い創作を同時に実施するという点で一石二鳥であると考えています。

一見それほどでもないアイデアのものでも、実装してみると知らなかった機能に出会えたり、あるいは、考えていたことが実現不可能であることがわかったりします。
その結果から技術を深掘りしていくこともあれば、アイデアを別の作品に昇華させていくこともできるでしょう。
習作では、技術力と創造性の向上の両面があることがポイントです。
技術検証や創作の練習を通して、今後の引き出しを増やし、何ができるかわかるようになります。

英語の表現を新しく覚えたら自分が日常生活で使いそうな文にアレンジしてみたり、
微積分を覚えたら乗り物の速度・加速度や目的地までの距離を概算してみたり、
身に付けたことを普段から社会に応用しているか、そのための視点を持っているかが大切になるのです。

参照

comments

NT京都2019に出展しました

2019年3月24日 (日) に西院春日神社・春日幼稚園で開催された NT京都2019 に、
PC 用 TAS 開発環境 Speedrunner を出展しました。

Speedrunner-2.0.4-VS

「NT」はニコニコ技術部のことで、ネタもの系ものづくりの展示会です。
2010年にニコニコ動画で 【TASさんの休日】mixiアプリ 四則演算ゲーム 92問正解 などの TAS 動画を投稿しており、そのときに開発したツールを実演しました。

なお、TAS とは Tool-Assisted Speedrun の略で、ツールの補助によりゲームを高速でプレイすることを指します。一般には各ゲーム機のエミュレーターを利用することが多いですが、これは PC (Windows) 上での TAS となっています。
最近では RPA (Robotic Process Automation) というキーワードもあり、原理的にはこれも同じです。

また、ツールをバージョンアップして、Visual Studio の GUI でワークフローを組めるようにしました。

機能:

  • PC のマウス・キーボード操作を記録
  • Visual Studio の GUI でワークフローを作成
  • ワークフローを実行
  • いちおうプログラミングもできる

次の動画は円周率を求める例です (2倍速)。最後に計算結果が表示されています。

NT京都は、今までに見た展示会の中で最もカオスでした。
発想の源が狂っているものが多いです。既存の技術なのに「そんな使い方するのか!?」という驚きがあって素晴らしいです。

IMG_20190323_175834

IMG_20190324_100804 IMG_20190324_132946

IMG_20190324_110617 IMG_20190324_101859

IMG_20190323_164516

comments

2018年度 活動まとめ

2018年度の活動をまとめてみました。

できごと

執筆

各種リンク

前年度→ 2017年度 活動まとめ

comments

2017年度 活動まとめ

2018年度の活動まとめを書こうと思ったら、そういえば2017年度の活動まとめがまだなかったので書いておきます。

できごと

各種リンク

次年度→ 2018年度 活動まとめ

comments

11月祭に「過去環境ラボ」を出展しました

未来環境ラボの坂本です。

未来環境ラボは 11月9日 (金) 〜 10日 (土) の2日間、学院祭である11月祭の企画として「過去環境ラボ」を出展しました。
「過去環境ラボ」とは、KCG コンピュータミュージアム所蔵の旧式のコンピュータを起動させる試みです。

動機

KCG は1963年創立で55年の歴史を持ち、過去に実習用に使われてきた汎用機やパーソナルコンピュータ (PC) が校内で展示されています。この KCG コンピュータミュージアムは、情報処理学会の分散コンピュータ博物館の第1号に認定されています。

以前より訪問客や教職員の方たちから「昔のコンピュータを復活させてほしい」という要望があり、将来は汎用機なども起動させることを見据えた壮大なプロジェクトが発足しました。
つい不覚にも興味を持ってしまった方は、Facebook の公開グループ「過去環境ラボ」にぜひご参加ください。当時の知識・経験を活用して運営に協力していただけるとなお助かります。

展示内容

今回は初回の試みということで、PC を数台起動する程度とし、大規模な宣伝はせずに密やかに実施しました。展示内容は、レトロゲーム体験およびプログラミング体験が中心となりました。

  • SHARP MZ-80K (情報処理技術遺産)
    • BASIC プログラミング
  • NEC PC-6001
    • ゲーム
    • BASIC プログラミング
  • TOSHIBA J-3100
    • C言語プログラミングの予定だったが環境を構築できず (コンパイルを開始すると動作停止)
  • Apple iMac
    • PostPet

など

NEC PC-6001 用のゲームの中に「ハイジャンプ」という中毒性の高いレトロゲームがあったこともあり、大盛況のブースとなりました。

PC-6001 ハイジャンプ

BASIC でプログラミング

今回はとりあえず「起動できそうなコンピュータの電源を入れるだけ」でもよかったのですが、ソフトウェアエンジニアとしては、これらの歴史的名機を前にして起動だけして終わりというわけにはいかないでしょう。

というわけで私は BASIC というプログラミング言語を初めて勉強し、この2日間は BASIC で数値計算をさせるプログラムを書いていました。実質的にハッカソンをしていたことになります。
今回書いた BASIC のソースコードや各端末の起動方法のメモを Past-Lab (GitHub リポジトリ) にまとめてあります。

他にも TOSHIBA J-3100 で C 言語を使えるようにする予定だったのですが、こちらは環境構築がうまくできず残念でした。

SHARP MZ-80K でピタゴラス数を列挙:
MZ-80K ピタゴラス数

NEC PC-6001 で円周率 π を計算:
PC-6001 円周率 π

続編

来年の11月祭でもパワーアップして出展する予定です。

参照

comments

Firebase無しでGoogle ML Kitを試す

未来環境ラボの中口です。衝撃です。衝撃。去る5月11日に、毎年様々な技術が発表されるGoogleのイベント、Google I/O 2018にて、Google ML Kitが発表されました。何が衝撃かって、その簡単さです。ML KitはGoogleが提供する機械学習フレームワーク(TensorFlow)や機械学習クラウドサービスをAndroid端末で使うためのSDKで、非常に簡単に機械学習アプリを作ることができます。

本来はFirebaseというクラウドサービスと連携して使うことが想定されていますが、オフラインのみでも動作します。早速サンプルを動作させてみましょう。

Android Studioのインストール

Android用のSDKなので、Android Studioが必要です。最新版をダウンロード、インストールして下さい。

GitHubからサンプルをクローン

Android Studioを起動し、起動画面で[Check out project from Version Control] → [GitHub]を選んで下さい。

サンプルのURLは下記です。

Clone後は様々なサンプルプロジェクトが見えている状態で、他のプロジェクトがビルドに失敗することもあるので、ML Kitだけにしましょう。[File]→[Open]と選択して、quickstart-androidディレクトリ内の、mlkitディレクトリを開いて下さい。

google-services.jsonの作成

mlkitをビルドするには、google-services.jsonというファイルが必要です。mlkitはGoogle Firebaseというサービスの利用を前提としていて、プロジェクトをビルドする際にもFirebaseから取得した設定ファイルがあるか、その内容が正しいかが検証されます。ただし端末上で動作する機能を利用するだけの場合は、下記のファイルを用意すればOKです。mlkitプロジェクトのappディレクトリ内に、google-services.jsonという名前でファイルを作成し、下記内容をペーストして保存して下さい。

{
  "project_info": {
    "project_number": "",
    "firebase_url": "",
    "project_id": "",
    "storage_bucket": ""
  },
  "client": [{
      "client_info": {
        "mobilesdk_app_id": "1:1:android:1",
        "android_client_info": {
          "package_name": "com.google.firebase.samples.apps.mlkit"
        }
      },
      "oauth_client": [],
      "api_key": [{
          "current_key": ""
      }],
      "services": {}
  }],
  "configuration_version": "1"
}

起動!

ではアプリを起動しましょう。PCにスマホを接続し、IDEの上の方にある、緑色の再生ボタンを押して下さい。起動すると、次のような画面が表示されます。

上のLivePreviewActivityが、カメラ映像をリアルタイムで識別するデモです。これを選びます。すると認識画面が表示されます。画面下部の、フォルダのようなアイコンをタップすると、背面カメラか前面カメラ化を切り替えられます。その横の文字列をタップすると、認識モードを切り替えられます。Face Detectionにすると、顔認識が試せます。

うまく動作しています。(写真はフレッシュマンキャンプ2018の記事から)

Google ML Kitは非常に手軽に試せるSDKです。モデルの差し替えや、Googleのクラウドサービスを使うこともできるので、いろいろと遊べそうです。

comments

Parrot Drone SDKの使い方

未来環境ラボの中口です。未来環境ラボには、ホビードローンの一つ、Parrot Mamboが置いてあります(ラボメンバーであればいつでも使えます!)。今回はこのParrot MamboをAndroidからコントロールするためのSDKをビルドする方法を紹介します。使用するPCはMacを想定していますが、Windowsでも同じ様にビルドできるはずです。

Parrot Mambo

いわゆるホビードローンと呼ばれているもので、200g未満の、飛行許可申請のいらないドローンです。申請がいらないと言っても、重要施設の周辺や公園など、飛行が禁止されている場所も多いこと、そもそも軽いので風邪に弱いことから、屋内で飛ばすのが良いです。未来環境ラボにあるのは、Parrot Mambo Missionという、Mamboにキャノン砲やアームが付属したモデルに、さらにFPVのパーツ、前方カメラとスマホ用ゴーグルも加えたものです。

Parrot Drone SDK

このParrot Mamboや、Parrot社が発売している他のドローンを制御するためのSDKやサンプルが、GitHubで公開されています。Android用とiOS用があり、さらにはドローン内部で使用されているソフトウェアも公開されています。今回はAndroid用のサンプルを実際に動作させてみましょう。

Android Studioのインストール

Android用サンプルを利用するには、Android Studioが必要です。ダウンロードしてインストールしておきましょう。

サンプルのClone

Android Studioを起動して、GitHubからソースをcloneしましょう。まず起動画面で、[Check out project from Version Control] → [GitHub] と選びます。

Android Studioで初めてGitHubからクローンする場合、ユーザ設定などが出てくるので、アカウントを持っている人は入力します。その後リポジトリのURLなどを聞かれます。

リポジトリのURLとして,

  • https://github.com/Parrot-Developers/Samples

を入力して、[Clone]をクリックします。

もう一度チェックアウトするかを聞かれるので[Yes]を選びます。

次にプロジェクトを作成するかインポートするかを聞かれるので、[Create project from existing sources]を選びます。この後プロジェクト名などを聞かれますが、[Next]を選び続けます。4〜5回[Next]を選ぶとIDEが表示されます。

サンプルのビルドと実行

この画面になったら、一旦ターミナルを開き、次のコマンドを入力します。

cd ~/AndroidStudioProjects/Samples/Android/SDKSample/buildWithPrecompiledSDK/
ANDROID_HOME=/Applications/android-sdk/ ./gradlew

これでSDKのビルドが行われます。環境変数ANDROID_HOMEには、Android SDKの位置を指定します。/Applications/android-sdk以外の場所にインストールしている場合は、適切に値を変更して下さい。また、既にANDROID_HOMEが設定されている場合は、./gradlewだけでもOKです。

しばらくすると、ビルドが完了します。

次にAndroid Studioに戻り、メニューから[File]→[Open]とクリックし、SamplesのAndroid/SDKSample/buildWithPrecompiledSDK/settings.gradleを選択し、[Open]をクリックします。

新たにウィンドウを開くかを聞いてくるので、[This Window]を選びましょう。その後IDEが再度表示されます。

この状態で、次の手順でサンプルを実行できます。

  1. スマホをMacに接続する。
  2. FPVカメラを接続したMamboの電源を入れる。
  3. スマホでWiFi設定を開き、Mambo_XXXXXX(Xは数字)に接続する。
  4. Android Studioの実行ボタン(緑の再生ボタン)をクリック。

以上の手順でサンプルアプリが起動し、うまくいけば次のような画面が表示されます。

上記の”Mambo_・・・”と表示されているところをクリックすると、次のような画面が表示されます。

公式のアプリよりはだいぶ見た目が簡素ですが、ソースコード付きなので、自由に改変できます。一通りの操作もできるので、頑張れば自動操縦できるかも?興味を持ったKCG生、KCGI生は、是非ラボに遊びに来て下さい。

 

comments

ランダムなデータを生成する JSON API

未来環境ラボの坂本です。

2014年に作成した Random Data Web API というものを最近改修しました。
ランダムなデータを生成するための JSON Web API です。
以下のデータを生成できます。

  • アルファベット
  • アルファベットと数字
  • バイト列
    • 16進数形式、Base64 形式
  • UUID (GUID)
  • 時刻順の ID
    • 現在の時刻をもとに、並べ替え可能な GUID を生成
    • SQL Server の uniqueidentifier 型にも対応

という感じで、内容自体はとくに変哲のない API です。
時刻順の ID は少し珍しいかもしれませんが。
また、仕様が記述されたヘルプページ、および jQuery を利用したテストページが付属しています。

Test Page

さて、どちらかというとここからが本題です。
サービスとして公開されているタイプのよくある Web API は、利用する開発者からするとすぐに利用できてとても便利ですが、提供者側の意向でサービスが終了するという問題点があります。
例えば最近では、Google の URL 短縮サービス「goo.gl」が終了予定と発表されました
無償・有償を問わずサービスが永久に提供されるとは限らないため、なるべく自身のアプリをそれに依存させず、自身でサービスを運用することが望ましいでしょう。

そこでこの Web API では、ソースコードをオープンソース ライセンスのもとで提供し、それを利用する開発者自身がサービスをホストすることを想定します。
例えば Azure Web App などの PaaS (Platform as a Service) を利用すれば GitHub から直接ビルドおよびデプロイができるため、簡単な手順でサービスの運用を開始させることができます。

詳細の方法については Azure Web App にデプロイする手順にまとめてあります。
この場合はさらに継続的デプロイが構成され、
設定したリポジトリが更新されれば Azure Web App も自動的に更新されます。

Deployment Option

また、この Web API の技術的な特徴としては、以下が挙げられます。

  • ASP.NET Web API
    • .NET プラットフォームでは、これで JSON Web API を作れます
  • ASP.NET Web API Help Page
    • ソースコード内のコメントからヘルプページを自動生成
  • ASP.NET Web API Cross-Origin Support
    • CORS (Cross-Origin Resource Sharing)
  • HTTPS 必須化

ヘルプページの多言語対応については、ブラウザーの翻訳機能を利用すれば何とか読めると思います。

Help Translation

今後もこのような Web API やライブラリを制作していくつもりです。
KCG の学生の皆さんは、プロジェクト演習などで活用してみてはいかがでしょうか。

バージョン情報

  • .NET Framework 4.5
  • ASP.NET Web API 5.2.3
  • ASP.NET Web API Help Page 5.2.3
  • ASP.NET Web API Cross-Origin Support 5.2.3
  • Blaze 1.1.10

参照

comments

MacでMovidius : 手軽に使えるディープラーニングスティック

未来環境ラボの中口です。ディープラーニングしてますか?

GoogleやFacebookなど,一部の先進的な企業で導入されだしたディープラーニングも,最近ではライブラリや学習済みモデルが無料で公開され,徐々に一般の開発者にも手が届くものになってきています。昨年度のKCG Awardsでもディープラーニングを使った学生作品が発表され,大きな話題となりました。

どんどん身近な存在になっているディープラーニングですが,実践するにはまだまだ性能の高いコンピュータが必要です。そんな中,昨年夏にIntelがUSBで接続できるディープラーニングスティック,Movidius Nural Computing Stickを発表しました。日本でもすぐに市販され,当初すぐ売り切れたようですが,今はAmazonで1万円ほどで買えます。ディープラーニングに特化したチップが載っていて,PCやRaspberry Piに指すだけで手軽に使えるとあって,今非常に注目されています。

今回はこのMovidiusを,Macから使ってみましょう。

VirtualBoxのインストール

Macから,と言いつつ,いきなりVirtualBoxをインストールします。Movidiusの公式SDKはUbuntu Linuxにしか対応していないので,まずはUbuntuをMac上にインストールします。

ダウンロードページから,最新のVirtualBox(現時点で5.2.8)をダウンロードし,インストールして下さい。Extension Packも忘れずにインストールしておきます。

VMの作成とUbuntuのインストール

まず,Ubuntu 16.04のディスクイメージを入手します。Ubuntu Japanese Teamのダウンロードページから,isoファイルをダウンロードして下さい。

次にVirtualBoxを起動しましょう。起動すると,次のような画面が表示されます。

[新規]を押して,LinuxタイプのVMを作成しましょう。

メモリは2048MBに,ハードディスクは可変サイズにして40GBにしておきましょう(余裕があればより多く確保しても問題ありません)。名前は後でわかりやすいものにしておきましょう。

作成後起動すると,利用するディスクを尋ねられるので,ダウンロードしておいたUbuntuのisoファイルを指定します。

いくつかオプションを選択するとインストールが始まるので,しばし待ちます。

インストールが終わると再起動を求められますが,再起動しても立ち上がってこないので,一旦終了(Power off)します。

Movidiusの仮想マシンへの登録

いよいよMovidiusをMacに接続します。接続は簡単で,開封してUSB端子に挿すだけ。

次にVirtualBoxの仮想マシンの設定画面を開き,ポートのUSB設定で,USB 3.0 (xHCI) コントローラを選択します(Extension Packを入れていないと選択できないので注意)。次にUSB デバイスフィルターの右側の,プラスがついたアイコンをクリックし,Movidiusを選択します。うまく認識されていないと表示されないので,その場合は差しなおしてみて下さい。

OKを押し,仮想マシンを起動して,Guest Additionsをインストールしておきます。

インストールが終わったら,同じDeviceメニューの[Shared Clipboard]から[Bidirectional]も選んで起きましょう。VMをまたいでコピー&ペーストできるようになるので非常に便利です。一旦再起動してターミナルを開き,いよいよMovidius SDKのインストールです。

Movidius SDKのインストール

ターミナルを開いて,次のコマンドを実行します。

sudo apt install git
git clone https://github.com/movidius/ncsdk.git
cd ncsdk
make install

インストールが開始されるので,しばし待ちます。

おわりました。 

次にサンプルを実行してみましょう(この時点ではまだ成功しません)。

make examples

ソースやらモデルやらがダウンロードされ,サンプルの実行が行われます。

が,赤字の2行目のところ,エラーが出て正常に実行できていません。どうもMovidiusが見つからないようです。再びVM設定に行き,USB デバイスフィルターの右側,緑のプラスのついたアイコンをクリックしてみると,何やら謎のデバイスが。

  • Movidius VSC Loopback Device

詳細は不明ですが,Movidiusは状態によって2つの名前を持っているようです。これも追加しておきます。

設定後,sudo rebootと打ち込んでVMを再起動して,起動後に右下のUSBデバイスからMovidiusを選択して下さい(名前が戻ってる・・)。

そしてこの状態からターミナルでmake examplesすると,全てのサンプルが実行できます。

個別にサンプルを実行することも可能です。例えば,次のコマンドを実行してみると,

cd examples/caffe/GoogLeNet/
./run.py

次のような画像が,

無事ギターと判別されるのがわかります。

(当初アコースティックギターの画像を載せていましたが,ソースはエレキギターを参照していましたので修正しました。)

おわりに

だいぶ長くなってしまいましたが,Movidius Neural Stickの使い方を一からざっくり解説しました。1万円程度と決して安くはないデバイスですが,手軽に使えるので,アイデア次第でいろんな応用が可能です。今は学習済みモデルもたくさん公開されているので,いろいろ組み合わせて遊んでみてはいかがでしょうか。

 

 

comments