Magic Over Japan

みんな、みんな塗りつぶせ

UTGYM第2回勉強会(速報版)

メモ書きとりあえずうp。あとで時間があれば直します!

資料はここ!
http://redmine.ut-gym.jp/projects/psi-study-admin/files

Mac:標準装備でターミナルを動かす
Win:VirtualBoxUbuntuを動かす

PHPに触ってみよう
なぜPHPを使うのか
ウェブサイトを作るときPHPをなぜ使う事が多いのか?

  • PHPはとっかかりやすい
  • 書いたらすぐ動く
  • ブラウザ上で簡単に動く
  • HTMLに直接埋め込みで使える

PHPはあくまでプログラミング言語の一種
プログラムをPC上で実行するには

①ターミナルをひらいて
②コードを書いて
③実行する

①ターミナルを起動してみよう
Mac:アプリケーション→ユーティリティ→ターミナル
Win:前回やったとおりに起動してみる

Mac:PHPが標準装備されている→確かめてみよう。

php -vと入力してみる
PHP 5.3.4 (cli) (built: Dec 15 2010 12:15:07)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

みたいな文字が出てくればPHPがインストールされている

②書いてみる
CUI:nanoとか
GUI:ウィンドウ上で動くもの

nanoをインストールしている場合:Macでnanoと打てばエディット画面が開く
cdで親ディレクトリに移動しよう
CUI上でnano test.phpと打ち込んで「新規ファイル作成」しよう
(この場合メモ帳とかで言えばtest.phpファイルをつくったことになる)
そこでまずこんな感じで打ってみよう
日本語みたいにやって保存→ブラウザ上で実行!
してみると、ブラウザに表示された!
TABで補完できる

これと同じように、index.phpを作って、file_get_contentsを使えば、Yahoo!のページがそのまま見られる!

    • -

・WInでUbuntuでやっている場合
cd /var/www
でアクセス
(あとは知らん・・・すまんWin勢・・)

    • -

とここでamachang先生到着

PHP入門

このへんからつまらない
ここで脱落する人が多いです

PHPって何
色々関数が入っているので計算とかもできる
あれインストールして、これインストールして・・・みたいな手間がない
PHPプログラミング言語として設計が汚い部分もある
でも
どうせ最初のうちは汚い部分がわからない
逆に考えると
PHPきたねーなーというのが本気で分かるというところまでいくとPHPができた!ということ

プログラミングを学ぶというのはどういうことか
●やり方
他のプログラミング言語に浮気しない!
>chibicodeさん
一回飛び出ればいい
→1個できれば次の言語がすぐ出来るようになる
→2個出来るようになれば大体どんな言語もすぐ出来るようになる

ひたすらたくさんのコードを書きまくることも重要
書きまくれば書きまくるほど分かるようになる
お坊さんが無心になって移すのとおなじでいい
「書き換える」ことも重要
上級者に良いコードを聞いて写経しまくる

プログラミングがかけるようになるとは?
「式」と「文」の理解(基礎力)→最低限必要
思い通りの処理と値を定義できて、それらの整理と名前付が出来る→仕事レベルで必要

→この言葉が理解できるようになること!

ロードマップ
スタート地点を仮にHEllO Worldだとする
どこから学んでもいいが、矢印の方向にしか学べない
(例:値がわかってないと変数が分からない)
オレンジ:プログラミングの勉強と言われるところ
ピンク:プログラミングの各言語の使い方
→網の目のようになっている
→何かを理解するために何かを理解する必要がある
(※数学と同じ?)
最初はふわっとしかわからないはず
ピンクは網の目に鳴ってない
オレンジを理解していればすっと入ってくるはず。
オレンジを理解するにはオレンジの全てを明確に理解している必要がある
API、ライブラリ、フレームワークに行く人もいる
パラダイムデザインパターンに行く人もいる
そういうのがたのしい。オレンジ、ピンクはたのしくない
→これがプログラミングが飽きてしまう原因

まとめ
過程
かけるようになるまで浮気しない
このままでいいんだろうかと思うこともある
ロードマップを思い出してがんばろう!

ゴール
式と文の違い、それぞれは何かを理解する
値の定義の仕方を理解する
処理の定義(アルゴリズムを書く)を上達
値、処理の命名と整理能力→関数とか

基本的にはざっくり教えていくのでぐぐってほしい
資料に書いてあるのは下がゴールで上がコードみたいなイメージ
今日分かりやすく説明していくが難しい
定義に従って書くとなかなか難しい説明になる

●Hello World! - PHPの実行の仕方を覚える

  1. - / * % and or はよく使うので覚える(あと.(ドット演算子)も覚える)

1というのも値なんだけど1 + 1という入力の仕方でも2という値を生成する
var_dampに渡される前に2になって渡される
これを評価という。
演算子から値を持ってくることを評価する
var_dumpは1+1という言葉を知らないってこと
改行、Control文字などは長さのない文字

演算子 -2
演算子には優先順位
var_dump(1 + 1 * 3)
左の+は右の*の存在を知らない
3という数字が評価された後1とたされる(評価される)だけ
つまり多項演算子になっていても常に2項で考えられる!

●変数
変数は代入によって値を記憶する
HelloWorldをhogeに記憶する
ほげという箱から出した上でvar_dumpで生成する

●変数&演算子
資料のような順番で処理がされるというのがポイント。
シンプルに考えられていいね!

●関数
ここも山場
処理を記憶してreturn文で値を返す
fn(#a, #b)のところをパラメータ
fun(1, 2)のところを引数(ひきすう)という

まず1が評価されて2が評価されてファンクションの評価の中でfnという関数で評価される
ファンクションを評価するときはファンクションの中の文を全部評価しないといけない。

演算子&関数
演算子も関数です(本質的には)
演算子は二つの値を仮引数としておける関数です

●組み込み関数
このままだとプログラミング言語は値を生成するということしかできない!
世の中のプログラミングってなんなの?
それは全部組み込み関数で行われています
値を計算する以外の物(HTMLを叩くとかそういうの)
PHPプログラミング言語の中にはない
値の生成をする過程で何らか別のことをする関数
var_dumpやfile_get_contentsなどが組み込み関数

●式
ここですごく重要な概念
今まで値と言ってきたけどここからは式
式とは値を生成する概念
色んな式がある
式という概念を導入することで値を取れるところには式がかける
addは値が取れるので式がかける
値を生成する時のパターンを理解しよう
式という概念を理解すると今後他のプログラムに行く時に便利です
プログラムを順番に実行していく単位のことを文とかいう

●条件分岐
なんでif文を後に持ってきているか
演算子で実装できる
if文とはif(1 + 1)の1 + 1のところを評価して、nullとfalseで分岐をさせることができる
ifの中身は式なので、値を生成する式なら何でも書くことが出来る

●繰り返し
while
hogeの値が毎回変わるようにしないと無限ループになる
if文とwhile文を使えば全て表現できることが証明されている(らしい)

●データ構造
プリミティブな値を構造化できる
データは複数持ちたい要素がわりとある
どういうふうに使うか
関数の外の値を使うときはglobal $meibo;とか打たないといけない
名簿みたいなものがあって、例えばmixiの名前があって、日記のIDをキーにして取り出している。
データを大規模に保存するときに配列という概念が重要になる
配列の中の配列みたいなのもよく使う
例:RPGのアイテム:データとして表そうとしたとき
元のデータさえあれば色々な切り口でfunctionで加工することができる
元のデータになるのが配列
データを定義して処理を定義するというのはこういうこと。

Q.データベースと配列は何が違うの?
A.同じです。データベースはPHPで書かれていません。データベースをコピペしても使えませんが、データベースの中身は配列と同じです。arrayはデータベースと言ってもいいと思います。

このへんは難しいと思うので、連想配列も知った上で世の中のデータを現してみるといいと思います。
名簿とか作ってみたりして練習するといいかも

データをどう整理するかもプログラマーとしての腕が問われるところ

書いて書いて書きまくる!
Twitterの中でログインしなくても取れるものがある
JSON
便利な関数を作ってみるのがいいかも

上達してくるとプログラムがデータに見えてくる
別のプログラミング言語を書くことがデータ変換でしかなくなる

●オブジェクト
500行書くと5個関数が出てくる
どんどん関数は増える
どうやって関数を管理するか?
昔は関数名が100文字超えるとかあった
その教訓からオブジェクト指向というのが生まれてきた

このデータからはこの関数しか読めませんみたいなものを作ろうよというのがある
$hoge->calc()
hogeに対するcalcという関数ですよみたいな感じ
→来週やります!

★宿題
データ構造を使ったプログラムを書いてきてみて下さい
①綺麗な形でデータを定義する(処理を考えずに)
②処理を二つぐらい書いてみる

番外編
Twitterの取得のしかた
Twitter APIでぐぐろう!
初めて来るとよく分からない
Get Started with APIに入る
The REST APIから入る
リソースが並んでる
file_get_contents
jsonというデータの構造を表す構造
&で区切られた命令がある
jsonで書かれたコードなのでPHPで扱えるようにしないといけない
PHPで扱えるようにするのがjson_decode
→年末年始に簡単なWEBアプリに挑戦してみよう!

以上!

ゲーミフィケーションに関する講演を予定している件。

UT Startup Gym
http://www.facebook.com/events/199749783441731/

というイベントに参加しています。

今回、ゲーミフィケーションという概念について軽く説明してみたいと思っています。
しかし!多分時間が足りなくて全部は話しきれません。

ということで、その後の議論とか情報はこちらで発信していきますので、よろしくお願いします。
いいね!をおせば購読できますw

ゲームのちからで世界を変えよう会議
http://www.facebook.com/gamification.study

3分動画でプログラミングをマスターする「ドットインストール」を試してみた件。

管理人 さんから
3分動画でマスターする初心者向けプログラミング学習サイト『ドットインストール』
の招待状が届いています。

以下のURLにアクセスしてユーザー登録をおこなってください。

ドットインストールの招待メールキター!!!

ということで使ってみているのですが、SUGOI

なにがすごいかって、すでに19レッスンを299本の動画で提供しているところだ。
さらに!文字ではなくて動画なので、実際のcoding風景がわかる!!
さらにさらに!動画が1本3分なので、学校or会社の行き帰りの細切れ時間に見られる!

もっというと!基礎編だけではなく実践編として簡単なアプリ作成の動画までされている!
One More Thing!「完了」ボタンの実装で、自分の達成度が可視化できる!!
若干ゲーミフィケーションの要素も入っていますねー。

ということで、まだ招待制のドットインストールですが、このコメント欄にメアドとコメント書きこんでもらえれば招待します。
ただしあと2人までなので、そっから先は招待された人がまた招待していったらいいんじゃないかと思うです。

超がつくほど初心者向けで、すごくいいです。

30 Days to Learn HTML & CSS

30 Days to Learn HTML & CSS
http://learncss.tutsplus.com/

これもなかなかすごい!!英語に特に抵抗感がなければ。
そんなに難しいこと言ってないはずなんでニュアンスさえわかればなんとかついていけると思います。
今週の課題はHTMLをかけるようにすることなので、体系的にやるならこういうのもいいかもしれないっすね。 

.インストールが凄そうな件

3分動画でマスターする初心者向けプログラミング学習サイト『.インストール』を始めます
http://www.ideaxidea.com/archives/2011/11/dotinstall_launched.html

こいつはすげえや!!

codeacademyの日本語版とも言えそうなこのサイトですが、この充実っぷりはむしろcodeacademy以上?
私もこれで勉強してみたいとおもうわけであります。 

(つまり誰か招待して下さい。) 

UT Startup Gym 第1回勉強会 様子(修正版)

座学を受けながら色々やった結果をめもっておきます。追記修正したよ!!
なにかアドバイスとかあればコメントおねがいします。 

--- 

今日の資料はここ

*はじめに - 勉強会に参加するにあたって 
id:amachang 先生からのお言葉。
・一週間に一回の勉強会に参加するということは「何かをすること」
→つまり、時間的にはなにかやりたいことを我慢しなければならないのです
→結構大変かもしれないけどがんばりましょう

・この勉強会の目的
→WEBサービスを立ち上げる事ができるようにすること
→ひとつの技術について深く掘り下げていく時間はない(6ヶ月程度)
→必要な部分を集中的に理解しよう!

・重要 
→泥臭い事をやっていった結晶がWEBサービス
→華々しくはない、それを分かった上で勉強して欲しい 

*WEBを構成する三つの技術
HTML
HTTP
URI

(一つ一つの話もあったけど省略。ggrks) 

ウェブサーバ:PCの中で走っている「ソフトウェア」
→マシン自体ではなくてマシン上で走っているソフトウェアのこと。

*ターミナルをひらこう
今回参加者はターミナル周りで結構苦労しました。 
バージョンが違う場合などでUbuntuの左側に「端末」というアイコンが出てこない場合:

→Macの場合
Dashホーム(一番左上)をくりっく→terminalと検索すると出てくる

→Win
ggrks 

-何で使うのか
・アイコンが並んでいるPCの画面じゃ出来ないことが端末からだと出来る!ということが多い。
→これがないとプログラムがうまく動かないことが多い。
・慣れてくるとターミナルの方が効率がいい。

*ウェブサーバのインストール
・これも基本的にはターミナルからコマンドを打ってインストールできます
sudo apt-get install apache2
と打ちます。
・やってることは、イメージ的にはVectorとか窓の杜とかからソフトをダウンロード→解凍→インストールしてるのに近い 
・sudoは管理者権限で何かをするという宣言
・apt-getはアプリケーションをゲットしますよ、installはインストールしてくださいよ
→「管理者権限でapache2というアプリケーションをゲットしてきてインストールしてきてくださいよ」という意味(たぶん)
ちなみにsudoでパスワード要求されるが、パスワードは打っても画面では見えないのは仕様 

*Ubuntuの中のローカルホスト?を立ち上げてみよう
Ubuntuの中のFireFoxを立ち上げて、
http://localhost/と入力
→It works!なんちゃら〜と入力出来ればOK、出ない場合何かが間違ってる 

*好きなHTMLを自分で作ってみる
・まずApacheの設定を書き換える
sudo vim /etc/apache2/sites-available/default
「管理者権限でvimを使って/etc/〜〜というディレクトリをひらきましょう」かな?(自信ない)
→そうするとなんだか黒い画面がでてくる
→ちなみにデフォルトではvimが入ってないので入れる必要あり。
vimテキストエディタのプログラムの名前で別にvimじゃなくてもいい
→いずれにせよさっきapache2をいれた要領で何らかのテキストエディタをapt-getしてくればいい

テキストエディタには
vim
・gadit:初心者におすすめ?
emacs:矢印キーが使える??(矢印キーって何だ)
・nano:背中にぜんまいがついている初心者におすすめ

などがある(今回僕ははかせnanoをつかいました)

・さっき開いたApache2の設定画面でDocumentRootを書き換えて公開するディレクトリをつくる(ここでつまづいた) 
→資料中には DocumentRoot /home/ubuntu/www とあるが、/ubuntu/の部分は自分の設定したUbuntu内のユーザーIDで変わる
(例:hogehogeというIDなら DocumentRoot /home/hogehoge/www 
→さらに言うと、hogehogeというディレクトリは存在するが、wwwというディレクトリは初期状態では存在しないはず
→ためしにlsと打ってみるとhogehoge内にあるディレクトリが表示される
→ここでwwwというディレクトリがなければ mkdir wwwと打ってディレクトリをつくる(mkdirってmake directoryの略だろうか) 

・Apache2を再起動する
sudo service apache2 restart
(管理者権限を使ってapache2というアプリを再起動してくださいよ)
→ここで特にエラーっぽい記述が出ていなければOK

・ディレクトリにファイルをつくる
→親ディレクトリはさっき作った/home/hogehoge/www/になってる
→ここにvimとかnanoを利用してファイルを作る
nano /home/hogehoge/www/hoge.html
(赤字部分が作りたいファイルの名前)
→そうすると何も書いてない画面が出てくるのでなんかhtmlタグを打って保存する
→保存の仕方とか終了の仕方:^XとあったらCtrl+Xという意味

FireFoxhttp://localhost/hoge.htmlを見てみる
→表示された!:OK 

*HTMLを最低限かけるようにしよう
・htmlタグとスラッシュhtmlタグ
→スラッシュがついてないタグ:開タグ (<body>とか)
→スラッシュがついているタグ:閉じタグ(</body>とか)
→metaタグのように閉じタグが存在しないものもある。

・要素:開タグから閉じタグまでの部分のこと。
→meta単体のことをmeta要素ですとかいったりする。

・内容:<body></body>のなかに含まれる「内容」、つまり開きタグと閉じタグの間にあるもののこと
→HTMLは要素、タグ、内容で構成されている。

ハイパーリンク
ハイパーリンクを考えた人はえらい 今では当たり前だけど

 

CSS
→HTMLの見た目どんな感じか、というのを書くもの。
→つまりそれぞれの要素がどんな見た目なのかを書くための文法

1. 開タグの中に書く方法

<div style= の中に色んなスタイルの指定をすればおk

2. style要素の内容にまとめて書く。
→このへんの例は資料参照 
→HTMLで「デザインする」というのは「CSSを書き換える」ということ

CSSで出来ることにはいくつかの種類がある。
・文字関係のCSSは大体4つ
 文字揃え: text-align
 色: color
 フォント: font-family
 文字の大きさ: font-size

 ・背景
 色:background-color
 画像:background-image

・マルチカラムレイアウト
 float, clearfix
 position

・余白、ボーダー
 margin, padding, border

 ・絶対位置決め
 position

→他資料参照
→詳しくはぐぐれ
→このへんは正直ぐぐりながら少しずつ覚えていくのがいい 

★課題:普段使うWEBサイトの中でどうやって表現できるかやってみよう!!
→1つのものを立ち上げるために、何枚ものHTMLを書かなければいけないので、HTML1枚にかかる時間×50〜60ぐらいの時間がかかる
→見積もりで失敗しないように注意!!

*便利なツール
・Google Chromeの右上にあるスパムのマーク→ツール→デベロッパーツール
→左下の虫眼鏡をクリックして気になる部分をクリックするとタグがどうなってるのかCSSとともに見ることが出来る!!

*個人的な感想とか
・おぼろげながらわかってたようなターミナルのコマンドがさらになんとなくわかった。
・HTMLとCSSのタグは正直まだよくわからん・・・原理は分かるんだけど調べながらやらないと不安・・・
・参考書は一応持ってるんでそれも参考にしよう
・友達のWEBデザイナーのひとに聞いたらここ教えてもらった↓


TAG index
http://www.tagindex.com/  

今週の課題について

Ubuntuをダウンロードしてインストールして仮想環境でOSをうごかすぞーということです。
UbuntuってなかなかおもしろいOSですね。Macに似ている。同じ系統のOSだからかな。 


http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-linux-ubuntu-to-mac-virtualbox.html 

私はMacで参戦予定なのですが、こちらも見ておくとよいかもしれません。

仮想環境動かすことも考えると、買い替えるタイミングが来たらMacBookAirじゃなくてMacBookProにしたほうがいいかもなあ。