コンピュータを使うためには C, C++, java などの様々なプログラミング言語あります。それと同時に命令をテキストで記述して実行させるスクリプト言語があります。例えば シェル, awk, perl, ruby などです。それらのスクリプト言語は行いたい処理の内容によって用いられています。このプロジェクトではUNIX/Linux を便利に使用するためのスクリプト言語によるプログラミングを勉強します。簡単なプログラミングでコンピュータに賢い処理を行わたり、自動化させたりできます。さらにシステム管理を行う上でも有用です。スクリプト言語によるプログラミングを習得したい学生やプログラミングが苦手な学生も歓迎します。
概要に述べた通りです。
選定したテキストを用いて学びます。
履修学生の興味に合せて選定します。
特になし
プログラム作成,レポートなど
http://web-int.u-aizu.ac.jp/~sugiyama/SCCP/2013/welcome.html
コンピュータセキュリティは、意図していないアクセスや認可されていないアクセス、変更、破壊行為などからコンピュータを基盤とした機器、情報、サービスを守るためのあらゆるプロセスやメカニズムを包括している分野です。これには、認可されていない行為や信頼出来ない個人からの保護だけでなく、想定外の出来事や自然災害からの保護も含んでいます。すべての授業は2時間を使って行われて、1時間の講義と1時間のハンズオン形式のワークショップで構成されます。この授業では、学生は自分で Linux の仮想マシンをセットアップしたノートパソコンを持ち込んで受講することも出来ます。
この授業は、修正される必要がある現状の構成の改善を行ったり、その脆さを明らかにするために、ローカルネットワークやアプリケーションのセキュリティ機構にどのようにアクセスを行うかを解説することに焦点を当てています。この授業の参加者は、古典的な "Plan-Do-Check-Act" という IT プロセスライフサイクルの中の "Check" 部分をどのように実行するかを学ぶことが出来ます。攻撃者が使う実際の手法を学ぶことにより、学生はインフラストラクチャの強化を行うためのより高度な知識を得ることが出来ます。
授業1: ネットワーク監査
講義
1. 大企業の典型的なネットワーク構成
2. 脆弱性スキャンやパッチ管理とは何か
3. Metasploit の利用
4. ピボット選択(マルチレイヤ攻撃)
ワークショップ
1. ネットワークスキャンハンズオン
2. Metasploit を利用した Windows での既知の脆弱性攻撃
3. meterpreter シェルを利用した別ホストの攻撃
4. Metasploit の攻撃用ソースコードの修正
授業2: バイナリセキュリティ
講義
1. プロセスメモリの概要
2. バッファオーバーフロー
2.1 スタック領域を利用したタイプ
2.2 ヒープ領域を利用したタイプ
3. フォーマット文字列の脆弱性
4. シェルコードの作成
ワークショップ
1. バッファオーバーフロー攻撃
2. フォーマット文字列攻撃
3. シェルコード作成ハンズオン
授業3: Web セキュリティ
講義
1. Web アプリケーションの基本設計概念と HTTP プロトコル
2. SQL インジェクション
3. クロスサイトスクリプティング
4. 論理的な脆弱性
ワークショップ
1. 単純な SQL インジェクション攻撃
2. 競合状態の攻撃
3. 専用ツールの利用: sqlmap, andiparos, zed proxy
"実践Metasploit" オライリージャパン
"Hacking: 美しき策謀 第2版" オライリージャパン
"めんどうくさいWebセキュリティ" 翔泳社
コンピュータアーキテクチャ
プログラミング
オペレーティングシステム
2度の実技試験が行われます。
http://sealpv0.u-aizu.ac.jp/moodle/
ビジュアルプログラミング言語とは、プログラムの言語要素としてピクチャ(アイコンや図形)や動画を使用するプログラミング言語です。
本プロジェクトでは、ビジュアルプログラミング(モデリング)言語である*AIDAを開発します。
*AIDAは"Animation and Images to Develop Algorithm"を意味し、*AIDAはモデル・コード・ドキュメント(説明書)を一体化して記述・管理することにより、プログラマが描く計算モデルとアルゴリズムをより直感的・直接的に表現・記述することができる次世代のプログラミング言語です。
本課外プロジェクトでは、*AIDAの開発環境の実装や*AIDAによるアルゴリズムやシミュレーションの実装を試みます。
また、本プロジェクトでは独自ビジュアル言語の開発を行うことも可能です。
プロジェクト成果物 100%
http://aida.u-aizu.ac.jp/
学生のプログラミング能力を高め、プログラミング言語・テクニック、アルゴリズム、ソフトウェア開発の知識を深めることを目的とし、実践的なプログラミングの演習を行います。学生の希望に応じて以下のコースの演習を行います:
(1)CまたはC++プログラミング言語と幅広いアルゴリズムの習得を目的とし、多くの問題をステップbyステップで解いていく。
(2)Java, JavaScript, その他WEB技術を用いて、Aizu Online Judge (AOJ)のWEBサービスやアプリケーションの開発を行う。
コース(1)を通して、学生は基本的なアルゴリズムの知識とプログラミング作法を獲得し、読みやすくエラーを埋め込みにくい構造化されたコードを書けるようになります。
コース(2)を通して、学生は小規模のWEBサービスを開発できるようになります。
1. プログラミング入門(初心者向け)
2. アルゴリズム入門(初心者向け)
3. 問題解決(コース1)
アプリケーション開発(コース2)
問題解決(演習) 100%
プロジェクト成果物 100%
http://judge.u-aizu.ac.jp/
学生のプログラミング能力と問題解決能力を高め、幅広いアルゴリズムや数論・計算幾何学の知識を深めることを目的とし、実践的なプログラミングの演習を行います。
プログラミング初心者の学生は、世界規模のコンテストACM-ICPC, Codeforces, TopCoder, Google Code Jam等のコンテストに参加するための基礎的なステータスを獲得します。経験者の学生は、これらの競技で上位入賞を目指すことができる応用力とノウハウが身に付きます。
1. プログラミング入門(初心者向け)
2. アルゴリズム入門(初心者向け)
3. アルゴリズム活用
貪欲法
動的計画法
データ構造
グラフ
ヒューリスティック探索
計算幾何学
4. コンテスト形式の演習
5. コンテスト
プログラミングコンテストチャレンジブック
世界で闘うプログラミング力を鍛える150問
最強最速アルゴりズマー養成講座
演習 50%
コンテスト 50%
http://judge.u-aizu.ac.jp/
http://www.topcoder.com/
http://codeforces.com/
http://atcoder.co.jp/
http://uva.onlinejudge.org/
いくつかの暗号を取り上げ,実際に構成・実装することによって現代暗号の基礎について学びます.
暗号は,電子情報を扱うさまざまなサービスにおける安全性確保のための基盤となる重要な技術です.本プロジェクトでは,実際にいくつかの暗号を構成・実装することによって,現代暗号の基礎について学びます.これにより,暗号の証明可能安全性および鍵生成・暗号化・復号の仕組みについて理解することを目標とします.
プロジェクトの進行を見ながら,以下の項目について取り上げます.
[暗号の構成]
1. 確率的独立性
2. 情報量的安全性
3. アクセス構造
4. 視覚復号型秘密分散法
[暗号の実装]
1. プログラミングの基礎
2. 古典暗号
3. シャミアの秘密分散法
4. RSA暗号
なし(適宜資料を配布します)
なし
プロジェクトへの貢献と成果物により評価します.
視覚復号型秘密分散法については,以下を参照してください.
http://web-int.u-aizu.ac.jp/~yodai/research/vss/vss.html
ヘリカルCTを初め、バイオイメージング技術の進歩によって、迅速に簡単に人体の断層画像を得ることが可能になります。ただ、コンピュータシミュレーションにおける使用できる人体モデルの作成は依然難しいです。今回の課外プロジェクトにおいて、Visible Human Projectの医療画像データ(http://www.umin.ac.jp/vhp/indexjpn.htm)を用いて、人体モデルを作成し、心臓不整脈、植込み除細動器除細動のシミュレーションを行う予定です。
本課外プロジェクトを通じて、医療画像処理の基本知識、器官の自動半自動抽出方法、3次元可視化の方法、コンピュータシミュレーションのやり方などを身に付けることが可能です。更に、学外講師の講演を計画するため、最先端医療技術などを教えてもらえます。
毎週木曜日5限
学習進歩によって、テーマを決めます。
ハンドアウトなどを配布
先修科目:特にない。
重要な関連科目:画像処理、数値解析。
出席:60%
発表:40%
Visible Human Projectの医療画像データhttp://www.umin.ac.jp/vhp/indexjpn.htm
今やアプリ開発は様々なWeb上のマーケットを通して、自宅に居ながらでも世界に公開し、売り捌くことが出来るようになりました。ほんの少しのプログラムの知識と、アイディアと、公開しても後悔しない勇気があれば、今すぐにでもマーケットに店を開くことが出来ます。
本SCCPでは、世界に対して、Webマーケットを通じてアプリケーションを公開していくことを目標に、Androidの基礎から応用(OpenGLES,
クラウド連携, ARツール)までを勉強し、自分のアプリケーションのアイディアを形にすることを学んで行きたいと思います。
基本的には4月開講で通年での講座となります。途中参加も可能ですが、その場合はそこまでの基礎部分を独習して頂く形になります。また、既にAndroidを勉強して経験を持っている人は、応用トピックを進めてもらいながら、自分のアプリ開発を中心に授業を受ける形になります。
本SCCPの目的は、『Androidアプリケーションを一から企画し、作れるようになる』事です。既にAndroidは世の中の一プラットフォームとして地位が確立され、この上で多くのサービスが動くことになりました。
SCCP中では、サンプルコードを解説しながら、一つ一つアプリケーションを作成して行くことを学びます。また、過去にAndroidアプリケーションプログラミングを行った経験のある人達は、この時間を使って色々なアプリをどんどん作っていく事を目的としています。
最終的に、自分でPlay Marketにアプリケーションを公開出来る所まで行きます。
年間計画(大凡の見積もり。個人ベースで調整):
初級者 中級者(Java履修済) 上級者(過去の本SCCP経験者,ADK経験者)
4月-5月: Java基礎 Android基礎 Android応用(OpenGLES, クラウド連携)
6月-7月: Android基礎+製作(1本) ARツール, ゲーム製作 ARツール, ゲーム製作
10月-12月: Android応用 Android応用 NDK, アプリ製作
1月-2月: ===============================個人製作+発表会=======================================
書籍としての教科書は適宜調達。
Webにあるサンプル等を使用
GClue Androdocs:
https://sites.google.com/a/gclue.jp/android-docs-2009/
Android Seminar for パソコン甲子園:
https://sites.google.com/site/androidseminarpck/
ん・ぱか工房 Androidメモ:
http://www.saturn.dti.ne.jp/npaka/android/
各期での製作と、普段の努力から算定。
GClue Androdocs:
https://sites.google.com/a/gclue.jp/android-docs-2009/
Android Seminar for パソコン甲子園:
https://sites.google.com/site/androidseminarpck/
ん・ぱか工房 Androidメモ:
http://www.saturn.dti.ne.jp/npaka/android/
他人の書いたプログラムは読みづらいものです。この関数は何をしているの?どうしてこんな計算をしているの?印刷したソースコードを前に頭を抱えた経験は誰にでもあると思います。一方、プログラムは書きづ
らいものでもあります。「これをこうしたい」という考えが頭の中にあってもそれをプログラムにするのに何時間も悩んだりします。この問題を少しでも解決し、できるだけ人が理解しやすいプログラムを書けるようにするために研究しているのが自己説明型コンポーネントです。既存のプログラミング言語では十分に記述できない開発者の考えや意図、ノウハウをも記述できるようにするのが自己説明型コンポーネントです。自己説明型コンポーネントを用いた人の思考レベルに近いプログラミング・ツールを開発します。
アルゴリズムの知識とプログラミング技術を向上する。
開発ツールの使い方を習得する。
簡単な課題について、現状の知識・技術を分析し、それを解決する。
最初の授業で、興味と知識・技術力に応じてグループ分けします。
-Javaを学ぶグループ
-アルゴリズムを学ぶグループ
-ツール開発をするグループ
-言語要素をデザインするグループ
各回講義で用いる資料はその都度配布します。
開発にはある程度のプログラミングとアルゴリズムに関する知識が必要ですが、必要な場合はプログラミングとアルゴリズムの勉強から始めます。
出席、課題、宿題を総合的に判断して評価します。
http://borealis.u-aizu.ac.jp/classes/sccp/
ソフトウェアにおけるユーザインタフェースは、ユーザの意志をコンピュータに伝えたり、情報をユーザに説明・提示したりする接点であり、使いやすさや理解のしやすさに直結する重要な役割を担います。ユーザの目的を的確につかみ、適切なタイミングで適切な情報を表示し、次に何をすれば良いかが自然と理解できる、自己説明型ユーザインタフェースを開発します。テーマとしては、現在開発中の次世代プログラミングシステムのインタフェースを基本としますが、受講者の提案によるテーマにそったインタフェース開発を行うこともできます。具体的な機能や仕様は授業の中で議論しながら決定していきます。必要であれば、ミックスドリアリティー(複合現実感)や物体の重さや堅さを指先で感じることができる触覚フィードバック付き入力デバイスも利用できます。開発にはC++とOpenGLまたはJavaとJava3Dなどの知識が必要となります。受講者の能力に応じて、必要な場合はプログラミングやグラフィックス等の勉強から始めます。
ソフトウェアとハードウェアの両面でさまざまな技術が普及する中、ユーザにとってどのような利便性があるかを考えることが重要です。そのような状況のもと、ユーザ本位の立場で技術を見る練習をします。
具体的な学習目標:
-ユーザの利益や効率を向上するために何が足りないかを考えることができる。
-グラフィカルなユーザインタフェースを構築できる。
-カメラ、センサー、触覚入力デバイスなどのデバイスを用いたプログラムを開発できる。
初回授業で興味と知識・技術力に応じて具体的な目標を設定し、詳細なスケジュールを決定します。
各回講義で用いる資料はその都度配布します。
出席、課題、宿題を総合的に判断して評価します。
取り組める内容と習得可能範囲は個人の能力によって変わりますので、プロジェクトのはじめで何をどこまで学習するかを決めます。
http://borealis.u-aizu.ac.jp/classes/sccp/