「練習」を含む日記 RSS

はてなキーワード: 練習とは

2018-11-14

女子高生女房がほしいか? 

私も田舎出身で、小さなコミュニティの中でノンビリとお馬鹿に育ってた。

その頃の話なんだが。

高校時代夏休み部活から帰ってくると、お客さんが来ていた。

60代くらいの上品そうな女性と、40代くらいの大柄で無口な男性だった。

母が、本家筋の遠い親戚である親子だと紹介した。

「ははあ、お盆さんが近いから何かそんな関係で来たのかな」と思った。

付き合いのない親戚のせいか、母は硬い顔をしていた。

女性は「部活だったの?」「何をやってるの?」と笑顔で聞いてきたので、馬鹿の私は「テニスをやってます。すっごく楽しいです。去年は県大会・・・」とかベラベラ喋った。

女性が「好きな人とかはいるの?」と訊くと、もう恋バナは女子高生人生の糧とばかりに、もっとテンション上げてベラベラ喋った。

「県大会で会った、○○高校の○○君はすっごいテニス上手くて、でも全然感じも良い人でー」とか。

「年上の男性はどう? 好き?」と訊かれ、

「いやーー!! 2歳上まではありですけど、それ以上はちょっとまだまだ!! やっぱり人生経験全然違うじゃないですか!大学出たり、社会人として働いてたり、自活したりとか色々してる人とかってやっぱりもう私とは考え違うはずですよね~人として精神成熟全然違うじゃないですか!!

そんな人、むこうも私になんて考え合わせられないだろうし、私もも全然出来ないし!! やっぱり歳の近い人と、人生の色々な経験を一緒に積んで~一緒に成長していくってのがいいかな~って、あっ○○君のこと言ってるんじゃないですよ!彼はもう人気者なんで無理無理!!!あっでも来週、合同練習で~」とか話してたら、向こうが「じゃあそろそろ」なんて帰って行った。

玄関で2人を見送った後、母親が急に私を抱いて被さってきて「ごめんなさいごめんなさい」と言った。

なんとあの女性は「私と息子を結婚させないか」と来訪したんだと言う。

馬鹿げてるとやんわり断ったけど、むこうは父の本家筋であんまり怒らせてしまうと地元立場が悪くなるため、「会わせるだけ」と私に会わせてしまったという。

「見た?あの白い顔ども。基地外の白よ。生きてる人間は夏は私やあんたみたいに真っ黒になるのよ。あんたも真っ黒な人と結ばれて真っ黒になって暮らしなさい」と母は私を抱きしめながらつぶやいた。

今の旦那は4歳年上だし、デスクワーク仕事で真っ黒でもないけど、おおよそ母の言う人だと思う。

2018-11-13

anond:20181113142423

絵の練習の模写とかで使うよ

オタだと趣味実益を兼ねて一石二鳥

タッチタイピングの速度と仕事の速さ(出来不出来)は関係ない

5分で1200文字打てる自分の持論である

ほぼ関係ないと思う

20代前半から5分で7~800文字は打てていた。タイピングだけで言うなら日常業務レベルなら一級品だと思う(特殊仕事ではない限り)

しかし、当時一番残業が多かったのは自分だった

いつも定時に帰るおばちゃん(と言っても先輩)は、社内ではちょっとした有名人で俺もよく仕事の進め方を怒られてたし、俺もその人に頭を下げて仕事の進め方を教わった(その人はもともと人に教えたがる人ではない)

から、その時教わった事は今でも血肉になっている

そんな彼女キーボードを両手人差し指で打っていた。今でも覚えている。なのに一番早く帰る

彼女に口酸っぱく言われた事は「全体像の把握(試験開始後、問題用紙をすぐ解くのではなく、まずは一通り眺める・・というのに近い)」「ゴールから逆算する事」「何にどれだけ時間がかかるのか正確に把握する事」「他人をうまく使う事」「断る事(電話になんて全部出るな!など)」・・など目からうろこの話しばかりであったが、そこには「キーボード一生懸命早く打つこと」や「入力ミス率を下げる事」なんてワードはただの一度も出てこなかった。

その後彼女は辞めて、タイピングはコツコツ練習を続けて、5分900文字くらい打てるようになっていただろうか。それでも残業が多く、いつもストレスをためていた

当時所属していた部署課長。30代で課長になったらしく、うちの会社の中では出世スピードダントツで早いという人だった

その人もまた、キーボードを両手人差し指で打っていた。俺と課長で100m競争したら、90mハンデもらっても勝てるLV。それくらい彼は遅かった。

でも、仕事が遅かったのは俺だ

現在5分で1200文字前後。 1秒当たりの数字key/秒)はだいたい6~6.2ぐらいなのだけど、周囲の人間よりはダントツキー入力は早い

でも、ダントツ仕事が早い訳ではない。もうこの年齢になればわかる。

仕事段取り八分であってキー入力ではない、というのが俺の結論

追記

1秒当たりの数字key/秒)はだいたい6~6.2ぐらい・・がいまいち実感がない人たちへ。

http://neutral.x0.com/home/ghost/

ゴーストタイピング

上記サイトでは実際に登録したタイパー達のゴースト(実際にランキングに挑んだ時の残像が記録されている)と戦う事が出来る。

ハイレベルカテゴリの最下層がちょうど俺ぐらいなので、6.0当たりの奴と一度戦ってみるといい。スピードが実感出来ると思います

隣の芝生は青く見えるってね。

2018-11-12

役所で働いているんだが

こういう職場からどんな人が来ても

無碍には追い返さないで

丁寧に話を聞くようには努めているんだがな、

あのな、

新興宗教な、

勧誘練習でうち来るのやめてくれ

うちは政教分離なんだ

ネットワーク監視ツールのご紹介

多分、夫はシステム開発仕事合法)に従事している可能性が高いと思われます

違法ではないが、劣悪な労働環境なので、スタッフをこき使う酷い企業なのでしょう。

 

サーバ監視

詐欺のような違法行為をやってるのではないか?という心配があるなら、自宅のサーバ(大きい音を出してる大きなコンピューター)を監視してみましょう。

夫が外出中の間に、10分程度で済む作業です。

自己責任でお願いします。)

 

(1) 監視用のノートパソコンを用意する。

奥さん普段使っているノートパソコンでいいので、1台用意します。

ノートパソコンに「Wireshark」というソフトインストールします。

 

Wiresharkを使った通信監視(前編)――基本的な使い方とパケット解析

https://knowledge.sakura.ad.jp/6286/

 

(2) Amazon等で「リピーターハブ」1台と「LANケーブル」2本を買う。

PLANEX 5ポート ギガビット リピーターハブネットワークタップ) FXG-05RPT

https://www.amazon.co.jp/dp/B00FAE7XAG/

エレコム LANケーブル 1m スーパーフラット CAT6準拠 LD-GF/BK1

https://www.amazon.co.jp/dp/B0000CE5FK/

 

(3) サーバーのLANケーブルリピーターハブを挟む。

[サーバ]→LANケーブル→[ルーター]

という接続順になってると思いますが、以下のように変更します。

[サーバ]→LANケーブル→[リピーターハブ]→LANケーブル→[ルーター]

LANケーブルを抜いて指し直す作業は、なるべく短時間で済ませてください。事前にシミュレーション練習を行い、10秒以内を目指して下さい。

 

(4) リピーターハブ信号取り出し用のLANケーブルを挿す。

上記リピーターハブに、さらに1本LANケーブルを挿します。

これを「キャプチャー用のLANケーブル」と呼ぶことにします。

 

(5) キャプチャー用のLANケーブル監視用のノートパソコン接続する。

(1)で用意したノートパソコンに(4)のキャプチャー用のLANケーブルを挿します。

 

(6) Wireshark通信内容を監視する。

ノートパソコンWiresharkを使って、サーバーの通信内容を傍受してみましょう。

内容を解析すれば、違法行為をしているか判断材料が得られるでしょう。

10分程度監視したら、元に戻しておいてください。

 

万一夫に監視がバレた場合、夫に責められる可能性があるなら、事前に弁護士相談しておくと良いでしょう。

 

E-MAILへのモニタリング | 法律Q&A | ビジネスQ&A | 東京都港区法律事務所 ロア・ユナイテッド法律事務所

https://www.loi.gr.jp/knowledge/businesshomu/homu03/houmu07-02-10.html

格ゲーで対戦しない/相手が居ないけど延々とコンボ練習をするのが楽しい

未だにウル4殺意ルーファス限定コンボとか、UMVC3のコンボとか練習してる

新しい発見があったりして楽しい

実戦で披露されることは永遠にないけど

anond:20181110151336

おつかれさま,面白い記事ありがとう.同情するよ.

自然定量解析にセンスを感じたけど,人間を見る目が甘いなって思った.

経験不足が祟って 人が良すぎ,相手言葉を真に受けすぎ.

婚活における本音と建前を整理する意味で,「結婚の条件(http://amzn.asia/d/1WpJrgs)」を読んでみてほしい.面白くていい本だから

似たようなスペックMBA卒で研究職,約40歳)で結婚放棄した俺の経験では,婚活KPIは 男女とも以下2つに集約される.

性的に魅力的な人(美人/イケメン)と暮らしたい

・ 楽に稼ぎたい(養ってほしい/育児家事介護を任せたい/したくない)

そもそも恋愛友達と,結婚の違いはなんだ?

労働とカネの交換契約だ.

寂しいとかって理由なら友達で十分.だから問題労働とカネしかないんだよ.

言葉は後付で着飾ってるだけ.人の行動はカネの期待で決まる.

人間的魅力を重んじた婚活をする人は既に身の回り相手を見つけてるよ,ネットに出てきてるってことは 相手に高いスペックを求めてるからだ.格好悪いか相手に言わない(自分でも気づいてない?)けどね.

増田は (経営者でも投資家でもない)いい感じの会社員なんだろうけど,そのせいで カネを巡る本音と建前の実感が無いんだろ.世の中の対立の大半は「もっと分け前をよこせ」が本音だ.

特に男女関係において,言われた言葉を論じてもしょうがない.

カネがついてこない限り別の文句を言われ続けるぞ.

元増田武器経済力なら,ネットではATM覚悟専業主婦を募るしかないと思う.

それがお互いのギブテイってやつだ.

共働き希望の女は「多少貧乏でもイケメンがいい」が本音で,利害がマッチングしづらいと思うなあ.

個人的には,ネットと並行して 職場趣味関係など身の回りの人に 人間的魅力を訴求してはどうかなって思う.

あとさ.個人的には 株投資風俗援助交際は本当にいい経験練習になった.

何年か,何千万か賭けたけど 童貞もどき幻想を吹き飛ばしてくれたよ.

恋愛売春は違う!ってのが一般論だろうけど 僕から見たら大差なかった.

セックスへの期待を売る仕事

僕も精神的にボロボロになったけど 自分相手本音,意外と気づいてなかったな.

2018-11-11

増田プログラマー養成講座 その21 データベース設計 (1)要件定義

前回まで、データベースを使ったWebアプリ作成して、SQLの使い方を学びました。

今回からデータベース設計について学んでみよう。

 

参考書

これらの参考書ガッツリ読めば、データベース設計のやり方は分かる。

 

リレーショナル・データベースは昔からある枯れた(=安定した)技術なので、鉄板ノウハウが蓄積されている。

先人の知恵に沿って使うなら、データベース設計で悩む余地は少ない。=攻略は意外と簡単

 

データベーススペシャリスト教科書

経済産業省認定情報処理技術者試験で「データベーススペシャリスト」という資格もある。

 

データベースエンジニア」という肩書きを名乗れば、ただのプログラマーよりも高給取りになれる。勉強した後、自分知識棚卸してみるつもりで資格を取ってみるのもいいだろう。

データベーススペシャリスト試験教科書には、浅く広くDB知識網羅されているので、1度眺めてみたらいいかも。

 

 

 

データベース設計の流れ

データベース設計(database design)は、ソフトウェア開発工程においてデータベースの詳細なデータモデルを作る工程である

 

  1. 要件定義:「CRUD表」の作成
  2. 概念設計:「概念モデル」の作成 → ER図(実体参照モデル)の作成
  3. 論理設計:「論理モデル」の作成 → テーブル定義表の作成
  4. 物理設計:「物理モデル」の作成 → 論理モデルを実際にデータベース上で作成インデックス作成など

(分類方法にもよるけど)データベース設計は、このようなステップを経る。それでは順番に見ていこう。

 

 

 

1.1 永続化するデータを決定する

いわゆる「要件定義」だ。

実際にシステムを使うことになるユーザーヒアリング調査して、データベース内に永続化(格納)すべきデータを決定する。

 

CRUD表とは?

データCRUD操作(Create 追加、Read 参照、Update 更新Delete 削除)が、いつ、どこで発生するか?をまとめた表のこと。

 

データベース 設計 CRUD表」等のキーワードGoogle画像検索してみよう。どんな表か分かる。

↑このページの「図2 標準的CRUD図(例)」みたいな表を作って確認すれば、扱うデータの過不足がなくなる。

 

複雑なシステムだと、完全なCRUD表を作るのは面倒だよねw

だが安心して欲しい!

押さえておくべきポイントはあるので、そこだけ手抜きをしなければ、大失敗は避けられるだろう。

 

マスタートランザクションの違い

実は、後でテーブルを作るときに、データ更新頻度によって2種類に分類できるんだ。

 

 

トランザクションデータの扱いは、気を付けないとデータベースの性能低下に直結する。

どっちのタイプデータなのか?要件定義の段階から見分ける癖を付けておこう。

 

要件定義練習

試しに、Amazonのような通販サイトなら、どんなデータを扱うことになるのか?想像してみよう。

仕入先、在庫数、受発注配送会社顧客情報商品カテゴリー、商品スペック、などいろいろあるだろう。

いつどこでCRUDが発生するか?どれがマスターデータで、どれがトランザクションデータだろうか?

 

 

 

(ここまでの説明URLを8個も貼ってしまったので、続きは次回にしよう。)

次回は「概念設計」以降のステップを見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義 ←★今ここ★

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-11-10

増田プログラマー養成講座 その20 SQLデータの削除

前回は、SQLデータ更新をやりました。

今回は、SQLデータの削除をやりましょう。

 

メッセージの削除

基本は、同じなので前回やった更新処理をちょっと変えれば削除もすぐできます

 

投稿されたメッセージを削除する機能を、Webページに付けてみよう。

 

削除ページにジャンプするリンク

前々回作ったメッセージの一覧の中に、削除ページにジャンプするリンクも入れておいた。

<td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

という1行が削除ページにジャンプするためのリンクになる。

ブラウザーHTMLソースを見ると、ここが以下のようなHTMLに書き換わってる。

<td><a href="welcome/delete/2">削除</a></td>

これは「メッセージID番号が2のメッセージ」を削除対象にして、削除ページにジャンプする。

 

Controllerの改造

ユーザーが「http://localhost/waf/welcome/delete/2」というURLで、削除ページにアクセスしたら、コントローラーで「2」を受け取って使いたい。

CodeIgniterでは、URL文字列を解析して、使うことができる。

以下のようにコントローラーを改造してみよう。

 

// 削除画面

public function delete($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_delete');

}

 

Controllerの改造の解説

delete()メソッド引数で、URL中の「2」の部分を受け取れる。

これは前回の編集ページ(更新の処理)と同じ。

「$id = $this->uri->segment(3);」でも受け取れる。

 

Viewの改造

削除ページでは、確認する質問を入れてみよう。

ユーザーに「本当に削除しますか?」みたいな注意喚起をしておきたい。

 

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

  <p>以下のメッセージを削除しますか?</p>

  <form action="welcome/delete" method="post" accept-charset="utf-8">

   <?php if (isset($talk)): ?>

   <p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="delete">

   <?php else: ?>

   <p>※該当するメッセージがありません。(または削除済です。)</p>

   <?php endif;?>

   <button>削除する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

<p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

削除するメッセージを色付きで強調して、ユーザー確認してもらう。

 

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

コントローラー削除対象メッセージID番号を送るため、inputタグの「type="hidden"」でメッセージID番号を仕込んでおく。

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 削除画面

public function delete($id = '')

{

 $id = $id ? $id : $this->input->post('id');

 $action = $this->input->post('action');

 if ($action == 'delete') {

  $this->chat_model->delete_message($id);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_delete', $data);

}

 

Controllerの改造の解説

やってることは、前回のデータ更新場合とほぼ同じ。

$this->chat_model->delete_message($id);

で、モデルに用意したデータ削除用メソッドを呼び出しているだけ。

次は、モデルdelete_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Delete

public function delete_message($id = 0)

{

 $sql = "DELETE FROM talk WHERE id = ?";

 $param = array($id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「DELETE」を使えば、指定したレコード(1件分のデータ)を削除できる。

DELETE FROM talk WHERE id = ?」で、talkテーブルmessageid指定して削除している。

 

データを削除した後の挙動は、メッセージID番号がなくなるので、削除ページに表示できるメッセージデータがなくなる。

(例)id=2のデータを削除したら、SQLで「SELECT * FROM talk WHERE id = 2」を取得しても、空のデータデータがない状態

その場合は、

<p>※該当するメッセージがありません。(または削除済です。)</p>

と表示させてる。

 

まとめ

以上で、SQLの「DELETE」を使ったデータの削除ができた。

長々と説明したが、今回の大事な点は、SQLの「DELETE」の使い方だ。

 

以上で、MVCフレームワークを使ったOOPの使い方とSQLの使い方を見てきた。

SQLSQLだけで説明したほうが良かったね!MVCフレームワーク説明SQL説明が混在すると要点が分かりづらくなる?)

ちょっと失敗だったかも。m(__)m)

 

次回は、データベースの設計について学んでみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除 ←★今ここ★

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その19 SQLデータ更新

前回は、Webアプリの骨組み(スケルトン)に、SQLデータの追加と取得をやりました。

今回は、SQLデータ更新をやりましょう。

 

メッセージ更新

 

編集ページにジャンプするリンク

前回作ったメッセージ一覧に、[編集]のリンクも入れておいた。

<td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

という1行の部分。

[編集]をクリックすると、編集用ページにジャンプする。

ブラウザーHTMLソースを見ると、以下のようなHTMLになってるはず。

<td><a href="welcome/update/2">編集</a></td>

これは「メッセージID番号が2」を対象にして、編集ページにジャンプすることを意味する。

 

Controllerの改造

編集用ページのコントローラーを作ろう。

「http://localhost/waf/welcome/update/2」というURL編集ページにアクセスしたら、メッセージID番号の「2」を受け取れるようにしたい。

URL文字列を処理して「2」を取り出せるようにしよう。

 

// 更新画面

public function update($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_update');

}

 

CodeIgniterでは、URLから文字列を取り出す方法がいくつか用意されている。

  1. 「update($id = '')」のようにメソッド引数「$id」を用意すれば、「2」の部分を取り出せる。
  2. 引数を使う以外の方法も用意されていて、「$id = $this->uri->segment(3);」のように書けば、「2」の部分を取り出せる。

// 更新画面

public function update()

{

 $id = $this->uri->segment(3);

 echo "<hr> ID=".$id;

 $this->load->view('chat_update');

}

 

Controllerの改造の解説

CodeIgniterで、URL文字列から特定部分の文字列を取り出す方法を見ておこう。

 

例えば、「http://localhost/waf/welcome/update/aaa/bbb/ccc」というURLアクセスしたときCodeIgniterではURL中の「aaa」「bbb」「ccc」という部分は、以下のようにして取り出せる。

$seg1 = $this->uri->segment(1); // → 1番目のURL文字列:「welcome」=コントローラークラス

$seg2 = $this->uri->segment(2); // → 2番目のURL文字列:「update」=クラスの中のメソッド

$seg3 = $this->uri->segment(3); // → 3番目のURL文字列:「aaa」の部分

$seg4 = $this->uri->segment(4); // → 4番目のURL文字列:「bbb」の部分

$seg5 = $this->uri->segment(5); // → 5番目のURL文字列:「ccc」の部分

URLを「/」で区切って、base_url(http://localhost/waf/)の次から順番に、1番目のURL文字列、2番目のURL文字列、3番目のURL文字列、…とsegment()メソッドで順番を指定すれば取得できる。

 

Modelの改造

データベースでメッセージID指定して、メッセージを取り出す機能を用意しよう。

 

ファイルに以下のメソッドを追加する。

// Read by Id

public function read_message_by_id($id = 0)

{

 $sql = "SELECT * FROM talk WHERE id = ?";

 $param = array($id);

 $query = $this->db->query($sql, $param);

 return $query->row_array();

}

 

Modelの改造の解説

SQLの「WHERE」句で、絞り込む条件を指定できる。

 

SELECT * FROM talk WHERE id = ?

「WHERE id = 2」とすれば、メッセージID番号が2のメッセージデータが「talkテーブルから取り出せる。

もし該当するデータがなければ、返されるデータは空になる。(データが返ってこない。)

 

CodeIgniterの「row_array()」は、1件分のデータ配列の形にして返すメソッドだ。

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

  <p>メッセージを変更して「更新する」ボタンを押してください。</p>

  <form action="welcome/update" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <?php if (isset($talk)): ?>

   <input type="text" name="message" value="<?php echo $talk['message']; ?>">

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="update">

   <?php else: ?>

   <p>※該当するメッセージがありません。</p>

   <?php endif;?>

   <button>更新する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

データベースから取り出した1件分のメッセージを表示する部分を追加した。

<input type="text" name="message" value="<?php echo $talk['message']; ?>">

の「<?php echo $talk['message']; ?>」という部分だ。

これで変更したいメッセージの本文を表示できる。

 

あと、編集したメッセージWebサーバーに送信できるように、Formタグ送信ボタン(「更新する」の部分)も追加した。

このときメッセージID番号も送信できるように、

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

という1行も仕込んである

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 更新画面

public function update($id = '')

{

 $id = $id ? $id : $this->input->post('id'); // id -> segment or post

 $action = $this->input->post('action');

 if ($action == 'update') {

  $message = $this->input->post('message');

  $this->chat_model->update_message($id, $message);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_update', $data);

}

 

Controllerの改造の解説

メッセージID番号を指定して、データベースから取り出し、Viewに渡すデータを用意している。

$data['talk'] = $this->chat_model->read_message_by_id($id);

 

ユーザーメッセージ編集をしてWebサーバーに送信したら、データ更新する指示を出す部分も追加した。

$action = $this->input->post('action');

if ($action == 'update') {

 $message = $this->input->post('message');

 $this->chat_model->update_message($id, $message);

}

モデルにupdate_message()メソッドを用意して、$idと$messageを渡せば、該当データ更新するようにしたい。

次は、モデルでupdate_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Update

public function update_message($id = 0, $message = '')

{

 $sql = "UPDATE talk SET message = ? WHERE id = ?";

 $param = array($message, $id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「UPDATE」を使えば、指定したレコード(1件分のデータ)を更新できる。

「UPDATE talk SET message = ? WHERE id = ?」で、talkテーブルmessageid指定して更新している。

 

CodeIgniterの「affected_rows()」メソッドは、更新した行数を返す。=成功なら1行、失敗なら0行となる。

 

補足

コントローラーの「$id = $id ? $id : $this->input->post('id');」という行は、$idの受け取り方が2パターンあるので、それに対応している。

編集ページの表示で、1回目の表示と、2回目以降の表示で、$idの受け渡し方が変わっている。

  • 1回目:URLに埋め込まれID番号をupdate($id = '')の引数$idで受け取っている。($this->uri->segment(3)で受け取るのと同じ)
  • 2回目以降:Formタグで送られてきた$idを$this->input->post('id')で受け取っている。

URLに埋め込む方法上記の1回目のような方法)は、ユーザー勝手に値をいじれるので、基本的には使わない方が良い。

 

まとめ

以上で、SQLの「UPDATE」を使った、データ更新ができた。

長々と説明したが、今回の大事な点は、SQLの「UPDATE」の使い方だ。

CodeIgniterの使い方や、Webサイトの作り方(FormタグなどのHTML知識)は、オマケ程度に見ておいて欲しい。

 

次回は、データを削除するSQLDELETE」の使い方を見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新 ←★今ここ★

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

anond:20181109024136

才能は「他人を圧倒できる強い能力」「練習して習得する能力」を思い浮かべがちだけど、

SNSでは普通の人の悩みや共感といったもののほうがシェアされやす

この増田もありふれた悩みを代弁することでブクマされているわけで

そろそろ才能についての認識を改めてみてはどうだろうか?

2018-11-09

念願の処女喪失した男だけど3回くらいしたらまあもういいやってなっ

バイで、男が好きなわけではなく、自分が女扱いされるのに性的に興奮するんだけど、女装して3人くらいとセックスしてみて、まあもういいかってなった。

しりの穴の開発がふつうにめんどくさい……よっぽどまめじゃないと続かないと思う。

あと女装してセックスするとウィッグが傷むし、そんなんだったら女友だちと買い物行ったりするほうが楽しいなって気づいた。じぶんが楽しいからかわいくなるほうがシンプルでよいな。というわけでお化粧の練習をしている。

2018-11-08

「まずは反射的に笑顔を作る癖をやめました。・・・

http://www.gentosha.jp/articles/-/11489

ツイッターで見かけた記事なんですが

後日、相談をくれた女子からこんな報告が寄せられた。

「まずは反射的に笑顔を作る癖をやめました。イヤなことを言われたら、笑顔で『なんなんですか~』じゃなく、真顔で『は?』『え?』と返す練習しました。それをしばらく続けたら、ウザいおっさんが寄ってこなくなりました!」

中略

セクハラされても笑顔でかわせ」と、女は笑顔を強いられてきた。それが結果的に、おっさんのセパやりたい放題を助長していたとも言える。

僕は女性がいつもヘラヘラ笑ってないで、アホなこと言われたらきちんと怪訝な顔で返すことはいいことだと思います

その調子で頑張ってください。

でも「笑顔を強いられてきた。」とか被害者気取りは間違ってもするなよ。

男でも女でも、相手の失礼な発言要求ヘラヘラ笑ってたらつけこまれるんだよ。

てめぇが弱いのを他人のせいにするな。

女性は頑張って強く生きてください(ハナホジ

40年引きこもり

なんで筆談になるんだ?と思ったけど、

まり長期間、誰とも話さないでいると舌の筋肉が衰えてしゃべれなくなるんだってさ。

発声練習大事

2018-11-07

腰振るのめっちゃ難しくない?

男の人っていくとき大変そうだなって思って今しがた正常位で腰を振る練習をしてみた。

なにこれマラソン?てか規則的に動かすの難しくない?

いったあと男性がはぁはぁしてるのって、女性がいったあとはぁはぁしてるのとは完全に別ベクトルな気さえする。

ごめんねこんな疲れるんだね、もう少し騎乗位頑張るよ…

2018-11-06

学歴コンプレックス

7 :番組の途中ですがアフィサイトへの転載禁止です:2014/03/19(水) 03:29:10.11 ID:P3XXgI+S0

私文2浪失敗

現役でもニッコマは一生の恥だから蹴った

いまはジョブカフェ通ってるけど求人応募してもはねられるばかり、早稲田卒の両親からも詰られる、もう死にたい

早稲田行きたかったなぁ....


大隈重信イギリスが何だ。アメリカが何だ。俺達が白人規範を示してやる!」 →早稲田大学を開設→

https://maguro.5ch.net/test/read.cgi/poverty/1395166839

18 名前番組の途中ですがアフィサイトへの転載禁止です (アウアウウー Sac7-9Fbr)[] 投稿日:2018/11/06(火) 07:23:01.10 ID:rzD5riSBa

この悠木碧早稲田ってなんだよ

千葉経済みたいなド底辺校からなんでAO早稲田に行けんだよクソが

あんなやつより1020偏差値高いとこ出てんのに

死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね

なんだったんだろな、俺の人生って

やりたくもないバイオリンを無理矢理習わされて、練習で上手く弾けなきゃ殴って蹴られ髪の毛掴まれて引き摺り回されたり

年の離れた兄の家庭内暴力で近所の家に助け求めて駆け込んだり

1浪時に親父が自殺して母親発狂して地獄を見て

散々な目にあってきたのに

高校受験では船橋にも東葛にも入れないクズ

大学受験では早稲田にも慶應にも入れないクズ

早慶卒の親から罵倒された

俺の学歴コンプレックスの根源はこれ↑

俺も大学いって青春してまともなとこに就職たかった

時給1470円の一般派遣事務職しかできない、ボーナス交通費も出ない.....

ろくな青春がなかった

19~21くらいの若くて金とか気にしないしがらみのない純粋恋愛セックスできなかったのが今でも悔やまれる、、つらい....

受験期は家庭内修羅場(オヤジ自殺とお袋の発狂)で精神破壊された

青春コンプレックス学歴コンプレックスは一生治らない

世を拗ね 人を攻撃クレームをつけ 炎上には便乗して生きてく


朗報女性声優さん高学歴が多すぎる [582194147]

https://leia.5ch.net/test/read.cgi/poverty/1541456351/

2018-11-05

anond:20181105210632

金になる絵を描けるまで練習しろってことだよ

精神論って考えることの放棄じゃない?

趣味フットサルをしているんだけど、土曜日の夜に練習試合があったのよ。

一応、監督みたいなおっさんがチームにいるんだけど(プレイヤーとしてたまに出るけど、仕切りはこのおっさん)、普通にボロ負けだった。

まぁ、趣味フットサルでみんなそんなに本気でフットサルっていう感じではなく、昔の好で集まりたいし、運動不足が気になる年齢でちょうどいい運動としてのフットサルなのに、このおっさん県内で強いと言われているガチのチームとやらせたからで、練習不足やそもそも経験値が全く違うのは仕方がないことなんだけど、この練習試合が終わってからおっさんが最悪だった。

・お前らは勝つ気がないから勝てない

練習に身が入っていない

・実力で劣るならガッツを持ってプレーすれば勝てる

そもそもスポーツするのにお前らはチャラい

どう考えても、精神論でどうにかなるレベルじゃないし、そんなに勝ちたいなら普段練習も100本キックとか、走り込みとかじゃなくて、実践を取り入れるべきでは…と思ってたけど、機嫌が悪いので適当に相槌打ちながら焼き肉食べて、酒のんだ人たちを送り届けてる時に思ったんだけど、やっぱり、自分体育会系の端くれなので別に精神論が悪い事はないと思うわけ。

例えば、本当に実力が拮抗している、同格相手に負けた時、相手ガッツあるプレイに圧倒されて負けたなら、根性とか精神とかの差で負けたなってわからなくもない。

でも、今回に限っては根性だしたからって勝てた相手でもないし、練習時間の差もあるし、もっとこう最終的に「スピリットで負けた」以前の問題があるのに、ことごとく反省会精神講話してたおっさんが滑稽だなって思った。そもそも、集まってもおっさんはずっとベンチで俺らの練習みてるだけだし。

【Dead By Daylight】パーク・アドオン運用研究

11/04実施

ランク帯は紫~赤

ドクター

破滅、バベチリ苦悶ナスコ+カーターメモ「秩序」&「鎮静」

ドクター心音範囲内にいる鯖を発狂させて索敵、遅延、妨害を行うキラー

その心音範囲を広げてさら発狂の進行速度を上げてみたらどうなるか。

パーク自体鉄板金策ドクター。索敵補助にナスコを採用して挑戦。


結論

強い。

現時点の調整で、鯖は回復速度が遅くなりセルフケア不採用する人が多くなった。

となると負傷自体を避けたいと考えからか、都会の逃走術や鋼の意思などで隠密重視をよく見る。

しかしこれがドクターからするとカモ。電撃が純粋に板窓妨害に使える。

しゃがみ状態なら心音範囲から逃げることはまずできないし、秩序の効果発狂が進む進む。

Lv3になれば発狂から復帰しないといけないが、ナスコが刺さって狙える狙える。

爆音編成だからかもしれないが、意外とナス圏内でも狂気回復をする鯖は多かった。

ただ、秩序も鎮静もコモンアンコモンベリーレアで低いレア度だと効果が薄く、高い効果だとBWから出にくいデメリットがある。

バベチリで稼いでBW回して…結果的にはプラマイゼロになりそうな。


マイケルマイヤー

破滅、バベチリ、野蛮、蜘蛛+ジュディスの日記&鏡のかけら

いわゆる蜘蛛マイケル

蜘蛛トークンを貯めつつ凝視を稼ぎ、早くなった足で他の鯖を見つけ、Lv3でザクザク戦法。

鏡のかけらは代わりに思い出で凝視加速したり、ウサギ心音狭めたり、墓石で立ちメメしたり、リボンや髪束でLv3持続を延ばしたり、なんでもイケる。

高速Lv3マイケルとか恐ろしいことこの上ないはず。


結論

極端。

蜘蛛マイケルの立ち回りがだいぶ特殊で、Lv2になるのとトークン貯めの初動がどれだけ早いか勝負になってくる。

序盤で破滅を壊されるとほぼ間違いなくハッチ戦、もしくは通電する。

執念者が徹底して隠密したり、マップ農場を引くと何もできずに終わったりする。

蜘蛛トークンをためてLv3になるとチェイスが数秒で終わるので、Lv3になってからの爆発力はすさまじい。

野蛮があると板も意味をなさないし、Lv3の射程が長いので窓越えをスムーズに行けなかったらほぼ間違いなくダウンする。

スポーン地点やマップ運が絡んでくるが、上位ランクでも十分通用すると思うから、もう少し立ち回りを練習してこなせるようになりたい。

蜘蛛効率よく回せればアドオンもいらなくなるかも。

2018-11-04

増田プログラマー養成講座 その18 SQLデータの追加と取得

前回は、Webアプリの骨組み(スケルトン)までを作って、製作過程を見てみました。

今回は、データベースCRUD操作を行なって、チャットメッセージを追加/取得/変更/削除する機能実装してみましょう。

 

Visual Studio Codeの準備

Webアプリを作るときに、「Visual Studio Code」というIDE統合開発環境)を使ってみましょう。PHP用の各種プラグイン(「PHP IntelliSense」「PHP Debug」など)を入れておけば、便利に使える。

 

メッセージの追加

  1. ViewHTMLのFormタグを使って、メッセージ入力送信できるようにする。
  2. Controller:Viewから送信したデータを受け取れるようにする。
  3. Model:Controllerが受け取ったデータデータベースに保存する。

という機能実装してみよう。

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form action="welcome/index" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <input type="text" name="message">

   <input type="hidden" name="action" value="add">

   <button>投稿する</button>

  </form>

 </body>

</html>

 

Viewの改造の解説

本当はセキュリティーを考慮して、入力値の検査バリデーション)とか、もっといろいろな仕込みが必要だが、ここでは練習なので省略します。

 

Controllerの改造

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

  $this->output->enable_profiler(true); // for debug

 }

 

 // 初期画面

 public function index()

 {

  $action = $this->input->post('action');

  if ($action == 'add') {

   $message = $this->input->post('message');

   $this->chat_model->create_message($message);

  }

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

Controllerの改造の解説

 

Modelの改造

ここでやっとSQL文の登場だ!!!

SQL説明たかったのに(SQLとは本質的関係がない)Webアプリ説明が延々と続いた。(説明方法を変えた方がいいねw)

データベースデータを保存(追加)するSQLコマンド「INSERT」を使ってみよう!

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

 

 // Create

 public function create_message($message = '')

 {

  $sql = "INSERT INTO talk SET create_at = ? , message = ?";

  $param = array(date('Y-m-d H:i:s'), $message);

  $this->db->query($sql, $param);

  return $this->db->insert_id();

 }

}

 

Modelの改造の解説

 

以上、メッセージの追加を実現するために、MVCの各パーツを用意した。これでメッセージの追加だけができるようになった。

これだけではメッセージの取得=表示がまだできないので、次はデータベースからメッセージデータを取得して、Webページに表示できるように改造しよう。

 

メッセージの取得

SQLの「SELECT」を使えば、データベースからデータを取り出せる。

メッセージデータを取り出して、Webページの表示で使おう。

 

Modelの改造

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

 

 // Create

 public function create_message($message = '')

 {

  $sql = "INSERT INTO talk SET create_at = ? , message = ?";

  $param = array(date('Y-m-d H:i:s'), $message);

  $this->db->query($sql, $param);

  return $this->db->insert_id();

 }

 

 // Read All

 public function read_message()

 {

  $sql = "SELECT * FROM talk";

  $query = $this->db->query($sql);

  return $query->result_array();

 }

}

 

Modelの改造の解説

 

これでデータベースからデータを取り出すSQLメソッドモデルに用意できた。

 

Controllerの改造

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

  // $this->output->enable_profiler(true); // for debug

 }

 

 // 初期画面

 public function index()

 {

  $action = $this->input->post('action');

  if ($action == 'add') {

   $message = $this->input->post('message');

   $this->chat_model->create_message($message);

  }

  $data['talk'] = $this->chat_model->read_message();

  $this->load->view('welcome_index', $data);

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

Controllerの改造の解説

これは全部CodeIgniterで用意されている機能なので、マニュアルを読めば使い方が分かるようになってます

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form action="welcome/index" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <input type="text" name="message">

   <input type="hidden" name="action" value="add">

   <button>投稿する</button>

  </form>

  <h2>投稿一覧</h2>

  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#CCCCFF">

   <tr>

    <th>No.</th>

    <th>投稿日時</th>

    <th>メッセージ</th>

    <th>編集</th>

    <th>削除</th>

   </tr>

   <?php if(isset($talk)): ?>

   <?php foreach($talk as $item): ?>

   <tr>

    <td><?php echo $item['id']; ?></td>

    <td><?php echo $item['create_at']; ?></td>

    <td><?php echo $item['message']; ?></td>

    <td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

    <td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

   </tr>

   <?php endforeach; ?>

   <?php endif; ?>

  </table>

 </body>

</html>

 

Viewの改造の解説

 

説明文が300行を超えてしまった!これ以上は増田で表示できない。)次回はメッセージの変更をやってみよう。

 


anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得 ←★今ここ★

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その17 Webアプリの骨組み

前回は、Webアプリの完成見本を先に見てみました。

今回は、Webアプリを作る途中の過程を見て、作る雰囲気を一緒に味わってみましょう。

 

フレームワーク使用ルール=「設定より規約」=手抜きをする仕組み

最近フレームワークは、「設定より規約」(CoC、convention over configuration)という発想で作られている。

フレームワーク規約使用ルール)に従うと、プログラマー作業量が減って、楽ができる。

 

設定より規約(convention over configuration)とは、開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないというソフトウェア設計パラダイム

使用しているツール実装した規約開発者の望む動作と一致していれば、設定ファイルを書く必要もない。実装規約と望みの動作が違っている場合必要動作を設定しなければならない。

 

最近フレームワークは「設定より規約アプローチ採用しているものが多い。

例えば、Ruby on Rails、Kohana、Grails、GrokZend FrameworkCakePHPSymfony などがある。

 

CodeIgniter使用ルール

CodeIgniter使用ルールは、マニュアルチュートリアル確認できる。

↑このページの「アプリケーションフローチャート」を見てみよう。

 

  1. 一番左の「index.php」が、Webアプリ入口になっている。(エントリーポイントフロントコントローラーパターン等ともいう)
  2. から2番目の上段「Routing」で、URLに応じて、仕事の振り分け先を決定する。(ディスパッチ、マッピングルーティング等ともいう)
  3. から4番目の「Application Controller」で、具体的な処理の指示を出す。
    1. Application Controllerは、「Model」に必要データを用意させる。
    2. Application Controllerは、「View」に表示用の画面を作らせる。
    3. Application Controllerが、index.phpに表示用の画面を渡す。
  4. 表示用の画面(最終的な処理の結果)を受け取った「index.php」は、ユーザーブラウザー)に画面を渡す。

 

 


 

それでは、CodeIgniterプログラマーが用意する部分のM(Model)とV(View)とC(Application Controller)を、骨組みから作ってみよう。

事前準備として、前々回と前回のWebアプリ完成見本を用意するところまでやっておこう。

 

スケルトンとは?

スケルトン(skeleton, 骨格)とは動物人間の骨格。

コンピュータプログラムコードの骨格部分。プログラムコード作成では、初期段階でスケルトン作成し、その後で詳細部分を肉付けしていく。

 

 

 

Application Controllerの骨組み

まずは、MVCのCの骨組みを作ろう。

Controllerは、ユーザーからリクエストを受け付けて、ModelViewに指示を出す監督です。

 

上記フォルダの中に「Welcome.php」というファイルを作る。(デフォルトであるはずなので、それを使ってOK

 

CodeIgniterルールで、Application Controllerを置く場所は「application/controllers」というフォルダになっている。

CodeIgniterルールで、一番最初に呼び出されるApplication Controllerは「Welcome.php」というファイルになっている。

→これは「C:\xampp\htdocs\waf\application\config\routes.php」という設定ファイルで決められている。

$route['default_controller'] = 'welcome'; // 別の名前にすれば変えられる。

 

「Welcome.php」の中身を以下にように変更する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 // 初期画面

 public function index()

 {

  echo "Here is index()";

 }

 // 更新画面

 public function update()

 {

  echo "Here is update()";

 }

 // 削除画面

 public function delete()

 {

  echo "Here is delete()";

 }

}

これがチャットApplication Controllerとして動作する最小限の内容=骨格だ。

 

継承

class Welcome extends CI_Controller

という行に注目してみよう。

CodeIgniterで用意されてる「CI_Controller」クラス継承して、プログラマーが「Welcome」クラスを作ってる。

継承によって、フレームワークが用意してる様々な機能をWelcomeクラス内で使えるようになる。

 

URLリクエスト)とControllerの対応マッピング)のルール

「Welcome」クラスの中に、「index()」「update()」「delete()」という3つのメソッドを用意した。

CodeIgniterURLは、Action Controllerのクラス名やメソッド名とひもづけられている。

今回作るWebアプリだと、

「http://localhost/waf/クラス名/メソッド名」

という対応関係になっている。

(例)

http://localhost/waf/        →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/index  →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/update →Welcomeクラスのupdate()メソッドが呼び出される。

http://localhost/waf/welcome/delete →Welcomeクラスdelete()メソッドが呼び出される。

 

 

 

Viewの骨組み

次にMVCのVの骨組みを作ろう。

ビューは、表示する画面の部分です。HTMLWebページの構造を書きます

 

 

welcome_index.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

 </body>

</html>

 

chat_update.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

 </body>

</html>

 

chat_delete.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

 </body>

</html>

 

Viewファイルの追加に合わせて、Controllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

(変更点の説明

コンストラクターの追加

コンストラクター「__construct()」は、クラスからインスタンスが作られるとき自動的に実行されるメソッドだ。コンストラクターは、初期化最初にやっておくべき下準備を書いておく。

$this->load->helper('url');

CodeIgniterには、リンクの表示を補助する「URLヘルパー」という機能が用意されている。

上記のように書くとURLヘルパーを呼び出して、使えるようになる。

Viewファイルの以下の行でURLヘルパーを使っている。=「base_url()」という関数URLヘルパーの1つ。

<base href="<?php echo base_url(); ?>">

 

ビュー読み込みメソッドの追加

$this->load->view('welcome_index');

というメソッドによって、Viewファイルの「welcome_index.php」を呼び出し、画面を出力します。

 

これでMVCのCとVの骨組みができた。

今の段階でWebブラウザーで各ページを表示させると、各Viewファイルの中身が表示される。

 

 

 

Modelの骨組み

次にMVCのMの骨組みを作ろう。

モデルは、具体的な処理内容(ロジック)を書いて、データを読み書きする部分です。

データベースを操作するSQL文もモデルに書きます

 

上記フォルダの中に「Chat_model.php」というファイルを作り、以下の内容にして保存する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

}

 

CodeIgniterで用意されてる「CI_Modelクラス継承して、プログラマーが「Chat_modelクラスを作ってる。

「Chat_modelクラスコンストラクターには、以下のように書いている。

$this->load->database();

これは、データベースを使用する準備だ。

 

Modelの追加に合わせて、さらにControllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

コンストラクター

$this->load->model('chat_model');

と書いて、「Chat_model」というモデルを読み込むようにした。

これで、モデルに用意するいろんな機能コントローラーで使えるようになる。

 

 

 

以上で、MVCの骨組み(スケルトン)だけを作成するプロセスを見ていきました。

まだ中身はスカスカで、何も機能がついてませんね。

次回は、データベースのCRUD操作を行なって、チャットメッセージを追加/取得/変更/削除する機能実装してみましょう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み ←★今ここ★

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-11-03

給料上げろ、仕事減らせは甘えなの?

特定が怖いので大まかに書きますが、現在一歳児20名の担任をしている保育士です。

乳児突然死症候群の原因にうつぶせ寝があります。そして乳児突然死症候群ほとんどに場合午睡中に起こるそうです。

そのため大体12から14時半の午睡中、10分おきにうつぶせ寝になっていないかうつ伏せになっていたら仰向けに直し、顔色はどうか、呼吸をしているか目で耳で肌で睡眠チェックをしなければなりません。一人一人。20人ですよ。20人チェックしたら10分かかりますわ。エンドレスループですわ。

担任保育士が4名。子ども全員が眠りにつくのは早くて12時半頃。この子どもたちが眠ってくれている時間が戦いです。午睡中2時間の間に、食べこぼし盛りの一歳児の給食後の片付け、20人分の連絡ノートの記入。定型文を20回書くなら楽なもんですよ。保護者の子育ての質問への返答や、その日のその子ものエピソード発言を記入しなければなりません。大丈夫ですよ、言葉の発達は特に個人差が大きいので、あまり焦らず今しかないおしゃべりが無い期間をぜひ楽しんでください!今日は新しくお部屋にやってきた大きな図鑑にいち早く気づき宇宙とは…という難しい図鑑に夢中になっていました。特にロケットが発射された写真のページでは「おお!!!」と興奮し何やら1人でお話ししていました。将来が楽しみですね。1人に対しこのくらいの文字数でしょうか。それから日誌記入(クラス全体の様子と活動反省評価子ども一人一人の様子。A4用紙1枚半と考えてください)、それから製作の準備、保護者に向けて販売をする写真の選別、行事の準備、来月発表会だから衣装大道具それからピアノ練習も、それからクラスのお便りでしょ、教材の発注もしないと、あ、先月の個人記録の反省やらないと提出期限来週だ、もちろん書類は全部手書きです。それから月案と週案、ああもう2時、昼礼の時間。各クラス1名職員室へ送り出して、あ、あの、20人がぐっすり2時半まで寝ててくれるならまだいいです、でもそんなわけない。咳き込んで起きてしま子ども、夢を見て大泣きする子ども対応。ああもう起きるまで10しかない、オムツと着替えとおやつの準備…

無理ゲーすぎませんか。無理無理の無理。担任が4人いるとはいえ、本当に本当に仕事が終わらない。当たり前に休憩は取れない。休憩なんてどうでもいい、仕事が終わらない。でも残業するなって言われる。こっそり隠れて残業して、でも終わらない。なんでこんな仕事多いの。楽じゃんそんな仕事って感じた方もいらっしゃるかと思います。でもイヤイヤ期真っ盛り、カッとすればビンタみつき物投げる、熱出すわ吐くわ、1歳児20人、自分の子どもが一番かわいいモンペ対応、1秒たりとも気を抜けない、子どもから目を離せない、で、精神イカますわ。それでさ、給料、安いんだわ。OLって何してるの、なんで私らよりお金もらってんの、自分より若い女ブランドバック持ってるの見ると死にたくなるんだよ。

国、お金ください。くれないなら、せめて、仕事を減らしてください。見返すことのない書類要りますか。午睡チェックロボット導入してくれませんか。保育士なんて目指すのやめたほうがいいと思います学生の皆さん。これが現実ですよ。

なんていいつつ、子どもが大好きで大好きで仕方ないんです。昨日もね、お散歩に出るときに私が上着羽織ったら、「せんせ、さむいさむいなの?こんこんくしゃん、なの?だいいじょうぶ?」って2歳5ヶ月の男の子が言ってくれてね。なんて優しいんだろうって。0歳の頃から担任で見てた子でね。カチンときたら秒で噛み付く奴だったんですよ。それがねこんな思いやりの気持ちをね。お迎えのときママやパパと話すのも大好きなのよ。今日ね苦手な茄子一口頑張って食べたんですよ!ってあれ!ママ髪色かえました?似合ってる〜!そういえば最近夜泣きどうです?ママ夜眠れてます?…仕事家事育児でヘトヘトな保護者癒しオアシスでありたいと思うんです。

でもね労働の対価が見合ってない気がする。でもね保育士天職だと思ってる。保育士待遇が良くなればいいな。

2018-11-02

anond:20181102172336

文字はね、ハマったあとに読む人が多いよ。どうしても。

私もそう。

めちゃくちゃ熱量高くないと文字は中々読めない・・・

絵や漫画はもう少しライトに好きなものちょっと気になるくらいでも見れる。


から、「好きなカプを布教したい」「多くの人に作品見てほしい」って目的なら

絶対絵や漫画を描いた方がいい。

別に同人なんだし、そんなに上手くなくてもいい。セリフや話や構成いくらでもカバーがきく。絵が苦手でも、上記優先順位が高いなら絶対練習した方がいいと思う。

自己表現として好きカプの小説が書きたい」だと、多分見てもらえると数はググッと減る。

それはしょーがない。

手軽さが違う。ライトさが違う。


小説が書きたいし、多くの人にも見てもらいたい!どっちも叶えたい!っていうのは中々難しい。

すごく絵が上手い人に挿絵や表紙をお願いしたり、小説雰囲気を別の手段で分かりやす表現して

実際に読んでもらうとこまで誘導しないと難しいと思う。


まぁ全部分かってると思うけど・・・


個人的には文字の多い漫画を描いたらいいんじゃないかと思う。

落とし所として。

文章表現が出来る人の漫画好きだよ。

子供肖像権 追記しました

こんな時間増田なんて誰も見てないだろうからモヤモヤを書く

娘(5歳)の通ってる幼稚園地元年末お祭りダンス披露することになった。地元出身有名人?と一緒に踊るらしい。そこまではいい。娘は幼稚園でも家でも張り切って練習していた。

ただ、先週先生から有名人ファンの人が撮影するかもしれないですけど、大丈夫ですか?」と言われた。私はその場で「全然大丈夫ですよー」なんて答えたけど、横で聞いていた娘は違ったようだ。

家に帰ってから勝手撮影されてYouTubeに載せられるかもしれないから、絶対に出ない!」と言い出した。娘は毎日YouTubeを1時間は見て自身もたまに動画配信をしている(ゲーム実況で顔は出してない)それだけYouTubeに親しんでいると、「ファン撮影動画アップ」という可能性がまぁまぁ高いことに自分で気づくらしい。

旦那が「もしアップされてもパパが削除申請してあげるから」と言っても「アップされてから、気づくまでの間にいっぱい見られちゃうし嫌!」という。

正直、娘の言ってることは正論だ。四六時中YouTubeを見張ることもできないし、一度アップされたら、削除申請をしようがイタチごっこになる可能性もある。

母に相談したら、「アップされちゃっても娘ちゃんに見せなければ良いだけじゃない?」って言われた。娘のデジタルネイティブさナメるなよ。きっと祭り終わった後から検索しまくって勝手に見つけてくるわ。

そもそも娘は自身肖像権侵害される可能性がある場所に立ちたくないと主張してて、それをいくら親やからって強制していいのか。

ちなみに祭り任意参加ながら今のところ全員出席予定で練習も園で毎日してるので、できれば出て欲しい。でもなぁ、娘の言ってることの方が正しい気もする

追記

そんな理由で欠席するなんて!みたいな意見ばかりかと思っていたら全く違っていたので驚いています。すべてコメントを読ませて頂きました。娘の意思尊重する方向で先生相談したいと思います

また、娘のことを褒めてくださっているコメントも多くこちらも驚きました。娘はしっかりしたところもありますが、基本は恥ずかしがり屋の普通女児です。プリ姫のもとちゃんは本物の王子さまなんだよ〜なんていいながら、今もYouTubeを見てますし。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん