「編集」を含む日記 RSS

はてなキーワード: 編集とは

2018-11-17

ファイル編集はこっちでやるからタグを送ってくれ」という話ではないの?

2018-11-16

お前が増田を再編集したことは分かった。その手には乗らんし絡んでくるな

2018-11-12

テレビインターネットに関する一考察いかテレビは素晴らしいく

テレビインターネット比較することでテレビいかに素晴らしいか説明する。

1、情報発信者の匿名性について

テレビ:基本的製作責任者名前は小さくクレジットされるか、あるいは全く表示されない。また製作に多数の人が関わる。出演している役者が(正論のような誤ったことを言っても)意見をうまく丸めて、番組全体としてみごとな調和をもたらす。編集結果の責任を取るのは出演者なので製作者は責任を取らずに自由言論可能となる。

インターネット:昨今のインターネット情報殆どアカウントドメインにひも付いている。発言者責任がに伴うため無責任言論しづらい。

よってテレビは優れている。

2、情報信者の手間について

テレビ:テレビ視聴者テレビを観る際になにもする必要がない。わずかなチャンネルの中からみたいものを選ぶだけでよい。

インターネット:インターネットを使う人間は、自分で観るサイトを選んだり、不快ものスキップしたり、自分意志アプリインストールしたりしなければならない。そのような手間を必要とするインターネットは完全なメディアとはいえない。

よってテレビが優れている

3、思想について

テレビ:テレビの言うことが間違っているはずがない

インターネット:玉石混交な様々な情報から正しいものを見分ける必要がある。

よってテレビは優れている

4、広告について

テレビ:広告視聴率に基づいて料金が決まる。テレビを観ない者を省いた完璧数字である。また、効果計測の手法もなく、夢を見ることができる。

インターネット:リーチコンバージョン絶対数で表示され、夢を見ることができない。

よってテレビは優れている。

5、思想多様性について

テレビ:一つの組織に関連する人間だけでコンテンツ作成され、後から編集も行われており統一されている。受信者は悩む必要がない。

インターネット:多様な発信者がおり、様々な思想が混ざる。受信者自分の頭で思想について考えることが要求され、完璧メディアとは言えない。

よって、テレビは優れている。

テレビを讃えよ。

Vtuberデビューした

人気が出て収益化出来たら良いなって思って。

男だし、ゲームもそこそこ下手なので自分発見したテクとか、マイクラの建造テクニックみたいなのを5分ぐらい紹介して普通にそのゲームプレイしている様子を編集して流すだけの動画

すると、人気とは言えないけど登録者数が200人ぐらいになって、LIVEやってくれるといつも来てくれる人が何人か出来てきて、Vtuber活動を通じて10人ぐらい一緒にゲームする友達が出来た。

なんか、それで満足しちゃった。別にがんばって収益化したいとも思えず、今のまま「このゲームやるよ!一緒に遊ぼう!」っていったら何人かが一緒にやってくれて裏ではディスコードでチャットしているだけ。

ただ単純に一緒にくだらない事を喋りながらゲームする友達が欲しかっただけなのかも。

動画私的保存要件覚書 in YouTube

人間の声が入ってるのはNG

 →猫が主役であってほしいので、人間の声が入ると一気に興ざめてしまう。

  猫を撮ってるときオマケ程度に入っちゃうのは許容範囲

  猫がメインの動画が欲しい。

音楽はあっても良いが、あくまBGM

 →主張の強い音楽だと、やっぱり猫じゃなくて音楽が主役っぽくなってしまうので。

  無音の方がグッドである。より猫に集中できる。

再生中に、画面右上に他のオススメの○iマークが出てくるやつもNG

 →PC画面だと気にならないが、スマホ再生すると驚くほど邪魔

  オススメがもれなく入ってるチャンネルは、良いコンテンツが多いともったいないけど基本登録から除外。

  やはり主役である猫が、何にも邪魔されずに画面内を縦横無尽に動いてて欲しい。

字幕の多用、解説時間がかかるのもNG

 →一刻も早く猫の動画がみたいのに、前置き・前説が長いと結局主役である猫よりも前面に出る感があるため。

  字幕説明よりも、猫が見たいのだ。

  必要最小限のもの許容範囲

TV番組の流用は完全ギルティ

 →心の中で打首獄門を宣告、執行。慈悲はない。

  ちゃんと自前の猫を撮りなさいYouTubeなんだから

カメラアングルが下手くそだと途中で挫折

 →上記要件を満たしていただいても、

  「ええいネズミおもちゃを追っていった猫を映せ!」

  「そこは引きの絵で全体像を見せてよお願い!!」

  といったストレスを抱えてしまうので、ツライ。

  逆に編集が上手だと、シンプルカットでもすんげえ気持ちよく堪能できる。

NGばっかだと嫌な感じがするが、

NGクリアしたすんばらしい動画は本当に心の底から愛せるので、

やっぱり自分にとって好きなものを追求するというのは大事なことだ。

好きなものが欲しかったら、

やっぱり自分でいろいろ設定や要件をしっかり洗い出しをしないとうまくいかない。

その設定や要件に沿った形でジャッジすると、

ストレスなく楽しくコレクションできるのでとても良かった。

今では多数の超好みな天上猫動画自分アカウントの中に保存されてほくほく顔なのだが、

私的」なものなので公開はしない。

みんなも自分の好きなものを設定して探してみると良いよ。

2018-11-11

 

原理主義的 護憲派の人々 編集

 

自衛隊日米安保は 違憲だと 主張していながら、

 

自衛隊解散せよとか 日米安保を破棄せよとは言わない。

 

違憲だけど そのまま凍結せよと言う。

 

間違っている嘘を 嘘のままにしておけと言う。

 

嘘を正そうとしなくていいと言う。

 

万一のときには 自衛隊安保に守ってもらおうと考えている。

 

 

 

 

 

 

 

修正主義的 護憲派の人々

 

自衛隊日米安保専守防衛範囲内なら合憲だと言っている。

 

専守防衛の枠内なら、自衛隊軍隊ではないと言っている。

 

この嘘を言い続けることに意味があると言っている。

 

それを嘘だと言ってはいけないと言っている。

 

嘘だから否定しようという行動を人に取らせないならば、

 

戦前情報統制や抑圧と同じではないか

 

戦前批判している自称リベラル護憲派が、

 

戦前大本営と同じことをやっている。

 

 

 

 

 

 

2018-11-10

かなり昔に防弾少年団見てたの思い出した

思い出した思い出した

youtube動画出してたんだよ

あの頃は音楽グループというよりバラエティグループみたいな感じだった

一緒に動画撮ってる日本人女の子がいた 中国人男の子韓国人女の子もいた

ケンタッキー」とかそんな感じの外来語日本バージョン韓国バージョン中国バージョン、でイントネーションの違いを楽しむ

みたいな他愛ないネタだけど編集テンポとか良くて結構面白かった

日本語が可愛い響きの担当韓国語が現地語担当で、中国語がオチ担当みたいな感じだった

中国語は言葉によってはガラッと変えてることが多いので「なんでそうなる!?」みたいなオチに便利で

韓日中で和気藹々とした動画で見てて楽しかった

うわーーーー思い出した思い出した

そういえば動画カットあいあいまに防弾少年団!って言ってたよ


あの動画を撮ってた人たちも腹の底では日本ヘイトがいっぱいで

自分達が出世したらそれを見せてくるんだな~~~って

そういう人達、というよりそういう国、と理解すべきなんだろうなあ

増田プログラマー養成講座 その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 増田プログラマー養成講座 コンテンツ一覧

2018-11-09

パワポの話なんだけど

長方形の枠作ってその中に文字書きたい時、なんでオートシェイプとテキストボックス別にする人いるの。

オートシェイプに直接テキスト打てばいいじゃん。編集する時めんどいんだけど。

2018-11-07

村上くんのために保存しておいてあげる

大学時代マテリアル系を専攻していた。

その中でも結構有名というか、研究内容を言ったら特定される分野なので詳細は省く。

GPAバトルを制し新進気鋭の研究室に入った俺を待ち受けていたのは、今考えても普通に訴訟もんだろというレベルブラックな「現場」であった。

同業者の方はご存知と思うが、マテリアルというのは日本がかなり強い分野であり企業の注目度も高く、

なおかつ実用度が非常に高いため「金の成る木」としてバイオと並んで世界との競争が激しい分野でもある(らしい)

比較する先が世界なので、当然世界レベル努力と実績を要求されることは入って知った。

20時間ぶっ続けでサンプル作った実験結果を当日のゼミで発表すると「もうちょっと綺麗に資料作れないの?」とか平気で言ってくる准教授

真面目で頑張り屋なのにインパクトファクターを稼げずドクターを6年続けて鬱になった先輩。

めっちゃ上から目線日本国の公的手続きの手助けを求めてくる外人ポスドク

当たり前だがすべての研究無償ボランティアであり、どころか金払って受ける教育なのだが、

求められるのは仕事としてのクオリティ。遊びでやってんじゃないんだよ!

頑張って書いた論文ファーストオーサーはもちろん…教授「俺だよ」

いろいろなことに嫌気がさした俺はアカデミックの道を早々に諦め就活を頑張ることにした。

教授からは「好きでやってる研究だろう。好きなことにすら不真面目な君が社会に出てやっていける訳がない(意訳:研究室で奴隷続けろ)」と全力で人格否定を受けつつ、

少子化の影響もあってか、まあまあ有名といえる程度の大手企業にどうにか滑り込むことができた。

会社に入るとまず待っていたのは教育に次ぐ教育だった。

今時小学生でもわかるだろというようなレベル情報処理の授業、

中学生国語でやるだろというようなレベルビジネス作文の授業、

理系なら全員知ってるだろという感じの電気の授業、

あらゆる授業を仕事として受けることになる。もちろんおちんぎんが発生する。

すべての課題を秒速でクリアし、定時より手前で帰る日々がしばらく続く。

まり簡単なので研修よりは同期とのレクリエーション目的なのだろうと勝手忖度していた。

遊びながら金がもらえるとかいう夢のような環境である

ある程度の教育を終えると晴れて部署配属となる。部署SE部隊

情報出身ではない俺だったが、趣味プログラミングはかじっていたし興味もあった。

入ってすぐの仕事はあるシステム(社員が使っている自作ツール)の改修だった。

新卒簡単仕事を与えつつ、プログラミングスキルを伸ばしつつ、自分たち仕事効率化できる、という上手い采配である

プログラミングはかじっていたとはいものの、ゲームを作ろうとして挫折したり、あとはHelloWorldレベルくらいで、

まともに運用したのは精々MATLABのような特殊ものだけ。所謂プログラミング言語で利用者がいるソフトを触るのは初体験だった。

詰まっては調べを繰り返しながらも趣味の延長のような感じで楽しく取り組むことができ、上司の引いた工程3分の1で完了した。

ここで上司から10年に1人の逸材」の評価を賜る。

俺は平静を装いつつも内心歓喜した。

なにせ不真面目学生である俺は教授から目出しをくらったこしかなかったのだ。久々に得られた自己肯定感である

これはいけると判断したのか、同じく社内ツール改修の仕事をいくつか振られる。

片付けていくうち、俺のPCスキルが先輩社員と比べても高い部類にいることに気付く。

自作ツールを社内LANで動かすとファイヤーウォールに引っかかったりなどするが、先輩社員がそれを対処できないのだ。

どうやらそういう感じで動かなくなり、放置されていた部分を俺が解決しているらしい。

だがWindowsFWの設定なんてNasneアニメを撮りためたりFPS海外鯖に接続するようなヒキニートにとっては半ば常識である

陽キャパリピっぽい先輩が知らなくても無理はないが、SE部隊で長年社会人やっておいてわからないことには軽く失望する。

プログラミング派遣仕事とは言っても使役する側に知識がないのではやはり困ると思う。

ちょうどその時、働き方改革かい名目で各職場独自でやっていたシステム統合し、

営業所独自に動いていた勤休登録システムが全社的に統一されることになった。

新しいシステムUIモダンで、前のよりぶっちゃけ使いやすくすぐに慣れた。

だが先輩は勝手がわからないらしく、俺が先輩に質問する回数が減るのと同時に、先輩が俺に質問する回数が増えた。

働き方改革の魔手は勤休にとどまらず、いろいろな社内システム統合されてゆく。

頼られる頻度は増し、頼ってくる相手も先輩だけではなくなってきた。どこから噂を聞いたのか他部署の人から質問の内線が来るのである

上司に聞けや。知っとると思うがワイ新卒やぞ?と思いながら(つーか言いながら)回答する。

まあ新しいものには若い方が強いみたいな感覚理解できるが同期に聞けよ←残念同期からも同じ内容の質問が飛んでくる‥現実です‥これが現実‥!

このあたりで自己肯定感よりぶっちゃけ不信感を感じることが多くなってくる。

かに中学生以降は家族でも学校でもパソコンに強いニキではあったが、

まさか面接選抜されたひとだけで構成されている筈の会社パソコンに強いニキをやるとは思わなかったのだ。

まあそんな人が一人もいないはずがないので、多分、本当に詳しい人はうちではなく客先に居て、かつ忙しいということだろうと思うが。

さすがに面倒に感じていたある時、PukiWiki社員編集して公開できる神システムを見つける。

当然というべきか、数年前に何某が色々編集していた痕跡だけを残し、現在廃墟と化していた。が、サービスは生きていた。

ゲーム攻略を頑張って書き込んでいた時代を思い出しつつ、新しい社内システムの利用法を懇切丁寧に解説するWikiを作る。

これが大受けし営業所内でも一躍有名人に。

上司からは「その辺の社員100人より貴重」「絶対やめないでくれ」的な評価を賜る。

社内ツールの使い方記述しただけで褒められる異常事態に少しずつ価値観麻痺してくる。

ここらで満を持して炎上プロジェクトに投入される。

炎上の原因は、代々伝わる秘伝のソースと化したソースだった。

仕様書がないのはもちろん、そもそも社内環境ビルドできない、なんと.NETではないVBである

当たり前のように1ファイル50kstepを超えるソースがずらずら並ぶ様は威圧感すら感じさせた。

そんなのが現役で動いていたんだお客様セキュリティとは

上司を含めて誰もソケット通信が分からない中、元々チャットツールを作ろうとして失敗した経験のある俺は、

先輩が3人×3時間=9工数かけて解決しなかったあるバグをちょいとググっただけで10分で解決

まあぶっちゃけますエンディアン系のバグである

というようになんかやたらと活躍し、どうにかプロジェクトが終わるころには上司評価天元突破した。

地味に詳しい人は他にもいる(外にいて忙しい)ということもわかり推測は当たっている様だった。

会社に入って以降「君は社会ではやっていけない」と言った教授言葉信憑性は下がる一方である

なにせ主観的にはヒキオタがヒキオタっぽいことをやっているだけで褒められるのだ。

募る違和感の中、経団連会長室にメールが導入されたニュースと、そのコメントを見て気付いた。

俺は異世界転生したのだと。

そう、俺の就職先は、パソコン強いニキが崇め奉られる異世界だったのだ。

異世界なので何やっても訳の分からない褒め方をされる。

自席で堂々とYouTubeを見てたときには流石に上司に苦言を呈されたのだが

ゼネラリストには情報収集も必要」と言い訳すると「おお…」「さすが村上君だ…」となって許された。(マジ)

ちなみにマーケット調査名目業務YouTuberを見ることを冗談のつもりで提案したら、真面目に検討された。(マジ)

他の人にはありえないが俺だけ許されるところに落ち着くのではないだろうか。

うける。

anond:20181107032904

正直言って危機感はある。

世界と戦うを標榜していただけあって確かに研究室のレベルは高かったと思う。非情報系でもプログラミングはできて当たり前だったし。

この会社は(最近一定以上大きければどこもそうじゃないかと思うが)半官半民みたいなもんなので、皆どことなのんびりと仕事をしているように見える。

その結果、当然ながら競争力が落ちる。落ちはするが、会社組織は存続し続ける。

そして存続し続ける会社の中には「異世界」が広がっているのである

他の会社もそうだと思うが、各地で頑張ってる派遣プログラマーの方がよほど技術力が高い状態

大丈夫日本大丈夫か弊社。

まあでも転生した側としては居心地いいのでこの異世界に骨を埋めるのも悪くないと思っている。

新卒で入った会社異世界な件

大学時代マテリアル系を専攻していた。

その中でも結構有名というか、研究内容を言ったら特定される分野なので詳細は省く。

GPAバトルを制し新進気鋭の研究室に入った俺を待ち受けていたのは、今考えても普通に訴訟もんだろというレベルブラックな「現場」であった。

同業者の方はご存知と思うが、マテリアルというのは日本がかなり強い分野であり企業の注目度も高く、

なおかつ実用度が非常に高いため「金の成る木」としてバイオと並んで世界との競争が激しい分野でもある(らしい)

比較する先が世界なので、当然世界レベル努力と実績を要求されることは入って知った。

20時間ぶっ続けでサンプル作った実験結果を当日のゼミで発表すると「もうちょっと綺麗に資料作れないの?」とか平気で言ってくる准教授

真面目で頑張り屋なのにインパクトファクターを稼げずドクターを6年続けて鬱になった先輩。

めっちゃ上から目線日本国の公的手続きの手助けを求めてくる外人ポスドク

当たり前だがすべての研究無償ボランティアであり、どころか金払って受ける教育なのだが、

求められるのは仕事としてのクオリティ。遊びでやってんじゃないんだよ!

頑張って書いた論文ファーストオーサーはもちろん…教授「俺だよ」

いろいろなことに嫌気がさした俺はアカデミックの道を早々に諦め就活を頑張ることにした。

教授からは「好きでやってる研究だろう。好きなことにすら不真面目な君が社会に出てやっていける訳がない(意訳:研究室で奴隷続けろ)」と全力で人格否定を受けつつ、

少子化の影響もあってか、まあまあ有名といえる程度の大手企業にどうにか滑り込むことができた。

会社に入るとまず待っていたのは教育に次ぐ教育だった。

今時小学生でもわかるだろというようなレベル情報処理の授業、

中学生国語でやるだろというようなレベルビジネス作文の授業、

理系なら全員知ってるだろという感じの電気の授業、

あらゆる授業を仕事として受けることになる。もちろんおちんぎんが発生する。

すべての課題を秒速でクリアし、定時より手前で帰る日々がしばらく続く。

まり簡単なので研修よりは同期とのレクリエーション目的なのだろうと勝手忖度していた。

遊びながら金がもらえるとかいう夢のような環境である

ある程度の教育を終えると晴れて部署配属となる。部署SE部隊

情報出身ではない俺だったが、趣味プログラミングはかじっていたし興味もあった。

入ってすぐの仕事はあるシステム社員が使っている自作ツール)の改修だった。

新卒簡単仕事を与えつつ、プログラミングスキルを伸ばしつつ、自分たち仕事効率化できる、という上手い采配である

プログラミングはかじっていたとはいものの、ゲームを作ろうとして挫折したり、あとはHelloWorldレベルくらいで、

まともに運用したのは精々MATLABのような特殊ものだけ。所謂プログラミング言語で利用者がいるソフトを触るのは初体験だった。

詰まっては調べを繰り返しながらも趣味の延長のような感じで楽しく取り組むことができ、上司の引いた工程3分の1で完了した。

ここで上司から10年に1人の逸材」の評価を賜る。

俺は平静を装いつつも内心歓喜した。

なにせ不真面目学生である俺は教授から目出しをくらったこしかなかったのだ。久々に得られた自己肯定感である

これはいけると判断したのか、同じく社内ツール改修の仕事をいくつか振られる。

片付けていくうち、俺のPCスキルが先輩社員と比べても高い部類にいることに気付く。

自作ツールを社内LANで動かすとファイヤーウォールに引っかかったりなどするが、先輩社員がそれを対処できないのだ。

どうやらそういう感じで動かなくなり、放置されていた部分を俺が解決しているらしい。

だがWindowsFWの設定なんてNasneアニメを撮りためたりFPS海外鯖に接続するようなヒキニートにとっては半ば常識である

陽キャパリピっぽい先輩が知らなくても無理はないが、SE部隊で長年社会人やっておいてわからないことには軽く失望する。

プログラミング派遣仕事とは言っても使役する側に知識がないのではやはり困ると思う。

ちょうどその時、働き方改革かい名目で各職場独自でやっていたシステム統合し、

営業所独自に動いていた勤休登録システムが全社的に統一されることになった。

新しいシステムUIモダンで、前のよりぶっちゃけ使いやすくすぐに慣れた。

だが先輩は勝手がわからないらしく、俺が先輩に質問する回数が減るのと同時に、先輩が俺に質問する回数が増えた。

働き方改革の魔手は勤休にとどまらず、いろいろな社内システム統合されてゆく。

頼られる頻度は増し、頼ってくる相手も先輩だけではなくなってきた。どこから噂を聞いたのか他部署の人から質問の内線が来るのである

上司に聞けや。知っとると思うがワイ新卒やぞ?と思いながら(つーか言いながら)回答する。

まあ新しいものには若い方が強いみたいな感覚理解できるが同期に聞けよ←残念同期からも同じ内容の質問が飛んでくる‥現実です‥これが現実‥!

このあたりで自己肯定感よりぶっちゃけ不信感を感じることが多くなってくる。

かに中学生以降は家族でも学校でもパソコンに強いニキではあったが、

まさか面接選抜されたひとだけで構成されている筈の会社パソコンに強いニキをやるとは思わなかったのだ。

まあそんな人が一人もいないはずがないので、多分、本当に詳しい人はうちではなく客先に居て、かつ忙しいということだろうと思うが。


さすがに面倒に感じていたある時、PukiWiki社員編集して公開できる神システムを見つける。

当然というべきか、数年前に何某が色々編集していた痕跡だけを残し、現在廃墟と化していた。が、サービスは生きていた。

ゲーム攻略を頑張って書き込んでいた時代を思い出しつつ、新しい社内システムの利用法を懇切丁寧に解説するWikiを作る。

これが大受けし営業所内でも一躍有名人に。

上司からは「その辺の社員100人より貴重」「絶対やめないでくれ」的な評価を賜る。

社内ツールの使い方記述しただけで褒められる異常事態に少しずつ価値観麻痺してくる。

ここらで満を持して炎上プロジェクトに投入される。

炎上の原因は、代々伝わる秘伝のソースと化したソースだった。

仕様書がないのはもちろん、そもそも社内環境ビルドできない、なんと.NETではないVBである

当たり前のように1ファイル50kstepを超えるソースがずらずら並ぶ様は威圧感すら感じさせた。

そんなのが現役で動いていたんだお客様セキュリティとは

上司を含めて誰もソケット通信が分からない中、元々チャットツールを作ろうとして失敗した経験のある俺は、

先輩が3人×3時間=9工数かけて解決しなかったあるバグをちょいとググっただけで10分で解決

まあぶっちゃけますエンディアン系のバグである

というようになんかやたらと活躍し、どうにかプロジェクトが終わるころには上司評価天元突破した。

地味に詳しい人は他にもいる(外にいて忙しい)ということもわかり推測は当たっている様だった。

会社に入って以降「君は社会ではやっていけない」と言った教授言葉信憑性は下がる一方である

なにせ主観的にはヒキオタがヒキオタっぽいことをやっているだけで褒められるのだ。

募る違和感の中、経団連会長室にメールが導入されたニュースと、そのコメントを見て気付いた。

俺は異世界転生したのだと。

そう、俺の就職先は、パソコン強いニキが崇め奉られる異世界だったのだ。

異世界なので何やっても訳の分からない褒め方をされる。

自席で堂々とYouTubeを見てたときには流石に上司に苦言を呈されたのだが

ゼネラリストには情報収集も必要」と言い訳すると「おお…」「さすが村上君だ…」となって許された。(マジ)

ちなみにマーケット調査名目業務YouTuberを見ることを冗談のつもりで提案したら、真面目に検討された。(マジ)

他の人にはありえないが俺だけ許されるところに落ち着くのではないだろうか。

うける。

正直言って危機感はある。

世界と戦うを標榜していただけあって確かに研究室のレベルは高かったと思う。非情報系でもプログラミングはできて当たり前だったし。

この会社は(最近一定以上大きければどこもそうじゃないかと思うが)半官半民みたいなもんなので、皆どことなのんびりと仕事をしているように見える。

その結果、当然ながら競争力が落ちる。落ちはするが、会社組織は存続し続ける。

そして存続し続ける会社の中には「異世界」が広がっているのである

他の会社もそうだと思うが、各地で頑張ってる派遣プログラマーの方がよほど技術力が高い状態

大丈夫日本大丈夫か弊社。

まあでも転生した側としては居心地いいのでこの異世界に骨を埋めるのも悪くないと思っている。

2018-11-06

anond:20181106135449

先週起きたことを編集して来週放送してるって長谷川町子美術館の近くに住む人の親戚が言ってたような気がする

2018-11-05

せやろがいおじさんを見てネット議論を考える

ツイッターで少し前から話題になっている、せやろがいおじさんの動画を見た。

早い話が、軽妙な編集とともに様々な世相へ物申すもので、沖縄の美しい海を背景に撮影された動画はどれも完成度が高い。

ただ、クオリティよりなにより感じたのは、おじさんの意見の丁寧さで、フェミフェミ論争をはじめ、

双方先鋭化するばかりで論点がずれていく一方となりがちな、よくあるネット上の議論とは一線を画しているのを感じた。

おじさん本人がじっくり地に足を着けて思考している、というのが一番にあるにしても、顔と身分晒して主張をしている、というのがまず大きいように思う。

はてな含め、ネット上では喧々諤々の議論が戦わされている。

しかし、本当に建設的な話し合いを望むなら(目的がそこに無い人間も多いだろうが)、

やはり実際に、リアルで顔を合わせて言葉を交わすほかないのではないか、と近ごろ常々感じるところだ。

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 増田プログラマー養成講座 コンテンツ一覧

anond:20181104202804

どっちも安易一般化はできないけど、詳細書いたら需要あると思う

ここじゃなくていいしコピペ集合とかでもいいか編集して残してみてはどうか

増田プログラマー養成講座 その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-02

はてなキーワード編集ボタンが押せなくなってる

と思ったら、はてな市民じゃないほうのidだった

いやしかし以前は非市民でも編集画面に入れたような?

anond:20181102192709

はてなブックマーク - はてなブックマークから「IDコール」が送信されるようになりました - はてなブックマーク日記 - 機能変更、お知らせなど

はてなメッセージの通知メールはいろいろな嫌がらせメッセージを送るのに便利です。たとえ相手からコメントトラックバック拒否ユーザー指定されていても、「はてな匿名ダイアリーからリンクしたり、はてなハイクでその人の「IDページ」に書き込めばIDコールできますIDコール規約違反複数アカウントを取ればいくらでも新規ブログから送れるわけですが、匿名ダイアリーはてなハイクのほうがギャラリーが多いので、嫌がらせ効果さらに大でしょう。「はてなダイアリーキーワード」をよく書いている相手なら、その人の編集したキーワードをしつこく書き変えると効果的です。相手嫌がらせを受け続けるか、はてなメッセージの通知をあきらめるかしない形になり、確実に嫌な思いをします。

嫌がらせを認識しないはてな(追記あり) - 別冊はてな話 - betaグループ

換言すると、はてブは、パーマリンクのページを生成し、観察者と被観察者の間に線引きをすることで、1対多の図式を強制的に構築するのだ。この不条理さこそが、気持ち悪さの源泉だろう。

ただし、その不本意コミュニケーション強制に対して、当然打つ手はある。なんのことはない、IDコールなりをして、ひとりづつ「下界」に引きずり下ろし、1対1で処分すればいいだけのことだ。自らが自らのはてブページに予めコメントしておくことで、1対多の図式をある程度柔和することも可能だ。であるから、冒頭申し上げたとおり、私にはたいした恐怖ではない。

はてブのなにが気持ち悪いのかさっぱりわかりませんという人が多いので説明してやる - よそ行きの妄想

最近気がついたのだが、IDコールっていいね特にはてブでの。

ネットで万能感を味わって奔放に振舞ってるガキをIDコールして一喝してやると、目に見えてシュンとなるのが面白い

IDコールが面白い

さて。「はてブコメント反論するのが難しい・コストが高い」という意見がno titleにチラホラあったのだが、その客観的根拠が分からない。

(中略)

これ、ピュアにどこが「コストが高い」のかが分からない。実際にpermalinkidコール言及してみましたが、これはblogに対して言及して反論する手順とほとんど同じです。(はてブにはdeliciousには無い「idコール」というtrackbackに似た便利機能があって、blogによる言及通知と同じように使えますし)。

はてなブックマークコメントにはPermalinkもidコールもあるのに、なぜ「反論するコストが高い・面倒」と思えるのがとても不思議なので、その根拠を教えてほしい - import otsune from Hatena

っていってもタイトルの内容がすべてなので特に言うこともないんだけど、ほんとにIDコールってなんなんだよ!

IDコールってなんだよ!こええよ!!!! - まつたけのブログ

タイトル「IDコール」 を検索 - はてなブックマーク

漫画ナラノアドゥ』の終わり方にがっかり

ネタバレ注意







なんなんだよーこの打ち切りエンド。

1巻のあとがき担当編集から「○割を削りましょう」とか言われたってあったから、

何かしら消化不良になるのは覚悟してたけど、まさかこれ程とは。

作中12人いる魔王のうち、5人は姿も名前も出てこなかった。

主人公名前を付けた人間主人公契約した天使の正体も目的も分からずじまい。

物語序盤に別れた、仲間キャラの友人と妹は、モブに殺されましたって説明で終了。

最期の数ページは説明不足過ぎて意味が分からない。

ifストーリー?「こういう構想をしてました」っていう後書き?

悪魔の要素を身につけたことで人ならざる存在になりつつあった

仲間キャラ、罪人の部隊、人工魔王悪魔人間達とどう関わっていくかとか

話の広げ方はいくらでもあっただろうに、

なんでこんな雑な終わり方してしまったんだ。

全巻そろえる程、気にいってたのに。

anond:20181102113154

いきなりオタク向けだの何だのの話を持ち出すほうが毒されてるぞw

たとえば増田が「女は男に媚びるものだと思われているのがムカつく!」と普段から思っているなら

わかりやすく媚びた女性キャラに「こんな女はいない!」とキレる可能性はあるだろう。

世界中のあらゆる女性を把握している人間なんていないし、他人本心完璧理解できる人間もいない。

人間関係の範囲はその人の好みに左右されるし、嫌いなタイプ人間のことは普段から意識の外に置かれている。

しろ現実なら「こんな女性はいるはずない」なんて迂闊には言えない。

生身の人間相手にするなら傲慢には振る舞えない。

「私は女性全体を知っているわけではない」というブレーキが働くことになる。

極端に言えば、裕福な家庭に生まれた人が「毎日パンひとつしか食べられない人間なんているわけない」と言ってるようなものかもしれないわけだからな。

でもフィクションになると途端にブレーキが壊れるんだよ。

「こんなことを言う人間がいるはずがない」

常識的に考えてこんな行動を取るはずがない」

生身の人間相手じゃないか謙虚にならなくていい。

からどんどん自分先入観が染み出してくるんだね。

ついでに言うと、別にオタク向け作品でなくとも、

人間の会話をそのまま文字に起こすと支離滅裂から編集しなきゃいけない」とか、

「全員が同じ口調だと分かりづらいかリアルでなくとも役割語を導入する」とか、

現実を参考にしつつもどこまでデフォルメするかという問題はあるよ。

2018-11-01

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

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

 

index.php編集

Webサーバーの時間設定がズレていると、メッセージ作成したときに、作成日時もズレてしまます

(=12時に投稿したメッセージが、3時に投稿したことになってしまう、等。)

時間がズレてた場合は、Webサーバーの時刻を一時的に変更する処理を追加しておきましょう。

 

index.phpファイルの先頭に以下の内容を追加します。

上記フォルダの中の「index.phpファイルを開いて、先頭付近(2行目辺り)に以下の内容を追加します。

<?php

date_default_timezone_set('Asia/Tokyo'); // 2行目あたりに追加

 

動作確認

以上で、簡易チャットWebアプリが設置できました。

ブラウザーアクセスして、動作確認してみましょう。

 

 

以上で、データベースを利用したWebアプリが用意できました。

コピー作成しただけでは、プログラム意味が分からないと思うので、次回以降プログラムの部分を解説してみます

次回は、

を見ていきましょう。

 


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:20181024214737 増田プログラマー養成講座 コンテンツ一覧

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

前回は、Webアプリモックアップ(ハリボテ)を作るところまでやりました。

今回は、Webアプリ機能実装してみましょう!

 

学習の狙い

データベースを使ったWebアプリを作って、データベースの基本操作CRUDの4つ)を練習してみよう!

CRUD
  1. Create 追加
  2. Read  取得
  3. Update 更新
  4. Delete 削除

 

説明の順番について

どういう順番で説明したら分かりやすいか検討してみた。

  1. まず先に、Webアプリの完成見本を提示します。
  2. 続いて、作る過程説明しながら、各プログラム意味説明してみます

 

作業の流れ

ざっくりと、以下のような流れで作っていきます

  1. XAMPPを起動する。(参考 anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備)
  2. CodeIgniterインストールする。(参考 anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう)
  3. phpMyAdminでデータベース操作する。(参考 anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう)
  4. ApacheWebサーバーソフト)の設定を変更する。(今回説明
  5. Visual Studio Code等のツールプログラムを書く。(次回説明
  6. ブラウザー動作確認する。

 

XAMPPを起動させる

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

講座その6を参考にして、XAMPPを起動させて、ApacheMySQLスタートして下さい。

 

CodeIgniterインストールする。

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

講座その9を参考にして、XAMPPの中にCodeIgniterインストールしておきます

 

phpMyAdminでデータベース操作する。

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

講座その11を参考にして、MySQLWebアプリ用のデータベーステーブル作成しておきます

 

データベースの設定

講座その11で、データベース練習で「chat」というデータベースを作ってみました。

そのときmessage」というテーブル作りましたが、今回Webアプリで使うテーブルとして新たに「talk」というテーブル作成します。

(補足:前に作ったテーブルmessage」の中に、テーブル名と同じ「message」という名前カラム(列)を作ってました。これでも問題ないんだけど、プログラムを書くときテーブル名とカラム名を混同しないようにしたいので、念のため作り変えときましょう。)

 

talkテーブル新規作成する

SQLで「talk」というテーブルを作る場合、以下のようなSQL文になります

CREATE TABLE `talk` (

 `id` int(11) NOT NULL,

 `create_at` datetime NOT NULL,

 `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

 `message` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

このSQL文をphpMyAdminで実行すれば「talkテーブルを作れます

  1. phpMyAdminを開く。
  2. データベース「chat」を開く。(前に作った「messageテーブルは使わないので削除してもOK
  3. phpMyAdmin画面の上部メニューの「SQL」をクリックする。
  4. データベース chat 上でクエリを実行する:」の空欄に上記SQL文をコピーして実行すれば、「talk」というテーブルができる。

 

これでデータベースの準備ができました。

 

Apacheの設定

CodeIgniterで使う「URL」の表示方法ちょっと変更しておきたいので、ApacheWebサーバーソフト)の設定を変更しておきます

(「URL」=情報がどこにあるのかを示すインターネット上の住所)

Apacheの「mod_rewrite」という仕組みによって、URLの扱い方を変更します。)

 

(例)

変更前: http://localhost/waf/index.php/welcome/

変更後: http://localhost/waf/welcome/

というように、URLの中にある「/index.php」という文字列を表示させない設定にします。

 

Apache設定ファイル.htaccess

Apacheの設定は「.htaccess」という名前設定ファイルを用意して変更します。

 

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]

 

.htaccess」の書き方を理解するには、「正規表現」という仕組みの知識必要です。

まだ「正規表現」を勉強してない段階では、とりあえずコピペして使って下さい。

 

Webアプリ完成見本

CodeIgniterで、

を行ないます

 

CodeIgniter設定ファイルconfig.php」の編集

config.php」をIDEやエディターで開いて、以下のように変更する。

$config['base_url'] = 'http://localhost/waf/';

$config['index_page'] = '';

 

最初は、

$config['index_page'] = 'index.php';

になってるけど、「index.php」を削除して、「''」(空)にしておく。

 

CodeIgniterデータベース設定ファイル「databese.php」の編集

「databese.php」をIDEやエディターで開いて、以下のように変更する。

$db['default'] = array(

 'dsn' => '',

 'hostname' => 'localhost',

 'username' => 'root',

 'password' => '',

 'database' => 'chat',

 'dbdriver' => 'mysqli',

(※上記のように、MySQLのusernamepasswordは「root」(管理者)のデフォルト設定を使ってます。)

 

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');

  // $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($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);

 }

 

 // 削除画面

 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);

 }

}

 

View作成

上記フォルダの中に「welcome_index.php」「chat_update.php」「chat_delete.php」という3つのファイルを作って、内容を以下のようにします。

 

Viewファイル「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>

  <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ファイル「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>

  <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ファイル「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>

  <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>

 

Model作成

上記フォルダの中に「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();

 }

 

 // 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();

 }

 

 // 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();

 }

 

 // 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();

 }

 

 // 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();

 }

}

 

この続きは、

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

へ続きます

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