「title」を含む日記 RSS

はてなキーワード: titleとは

2019-05-04

この連休で最高のズリネタ

この連休ハードオナニストのオレ、TokyoMotion,AVgle,PornHub,FC2等々でグレートなネタを探し求めた。そしてとうとう見つけた!

それはFC2コンテンツマーケット販売されている『えぽす。』氏のシリーズ

https://adult.contents.fc2.com/users/tumanoyorokobi/ :title]

特にhttps://adult.contents.fc2.com/article_search.php?id=1071430&cref=108546_monthly title=【個人旦那の代わりに稼ぐ人妻旦那不在の自宅で二人の男に犯され中出しされ]なんかは勃起が止まらん。

借金の為に金貸しに弄ばれる若妻」という体が昭和チックで堪らない。他の奥様も「イヤイヤ」言いつつ本気汁垂らして最後には気持ちいい」などと言ってしまう。

男優さんは太腿に和彫りが見えていて「企業舎弟ヤクザ金貸し」な風味が漂ってドキュメンタリー風でこれまた堪らん。子どもに見えそうな所で致しているのはアレだがな。

あと2日ゴッシゴシするで。

2019-04-12

迅雷について私が知っている二、三の事柄

2019-02-24

BBSでの嫌われ方

Title| ★BBSでの嫌われ方 入門編

   

< 187 行です>

Name | Akaneko #44

1.他人のMSGを細切れにしてRESつける奴

  やたら>って ディティールだけにRESつける近視眼的なヤツね

2.なにかと揚げ足をとる奴

 揚げ足だけを生きがいにしてる やすもんのてんぷら屋みたいなヤツね

3.正義面するやつ

 おのれだけが正義代表みたいな面して 警察もどき事をするヤツね

4.おせっかいな奴

 当人よりもししゃりでて なんじゃかんじゃ世話やくヤツね

5.自分趣味を人に押し付ける奴

 どこそこ行こう!!行かない奴はアホだなんていうヤツね

6.やたら喧嘩売る奴

  ひとのMSGにやたらいちゃもんつけて喧嘩を売るヤツね

7.やたらESCつかう奴

  赤や黄色満艦飾にして うれしがってる色彩感覚零のヤツね

8.やたら物をねだる奴

 やたらソフトくれとか 中古くれとかいうヤツね

9.質問に答え書いても反応のない奴

 教えて下さいといっときながら 教えてやっても礼もしない無礼なヤツね

10.やたらIDを換える奴

 3ケ月ごとぐらいにID変えて 印象の薄くなるヤツね

11.博識をひけらかす奴

 それはですねえと やたら解説をつけるヤツね

12.常にフザケぱなしの奴

 オチャラカばっかしで真面目な時が全然ないヤツ

13.あっちこっちに同じMSGをUPする奴

 ハハハハ 誰れのことや?

14.冗談の通じない奴

 ユーモアを解さなくて マジに怒ったり 受け取ったりするヤツね

15.もめごとの好きな奴

  トラブルの起きた時しか 書き込みしないヤツね

16.パソコン通信をクソ真面目に考える奴

  新しい情報通達の 市民のための開かれたメディアだとかなんとかしかいわんヤツ

17.ひっつこい奴

  3カ月も前のMSGにRESつけたりするヤツね

18.女になったり男になったりする奴

  やたら変身願望を満たすだけで 通信してるヤツね

19.すぐSYSOPに責任追求する奴

  「隣の猫がサンマとったけど SYSOPはいったいどう考えてんだ!!」

  なんていうヤツ

20.イヤミばかり言う奴

  こんなMSG書くヤツね  ハハハハハ わしのことか.....

どうですみなさん ご自分にいくつ思い当たるフシがありましたか

もっともっと嫌われるネット.ワーカーをめざしましょう

                          赤猫

BBSでの嫌われ方  中級編

21.やたら長文のメッセージを書く奴

   読まされる方の気持ちを考えないヤツね。

22.どこのボードにも顔を出す奴

   ひとりでネット占拠しているようなヤツ。

23.ネットのぬしづらする

   シスオペでもないのに牢名主のように指図するヤツね。

24.人のMSGの行数を数える奴

あなたの39行目は意味不明かいうヤツね  わからんがナア...

25.RESしか書かない奴

   たまには自分意見も言えってんだ.....

26.CHATに誘っていってみたらすぐ抜ける奴

   いそがしいのにオチョくるなあ!!

27.IDあるくせにゲスト文句いう気の弱い奴

   「**の馬鹿野郎!! あるゲスト」なんて言う覆面強盗みたいなヤツね

28.自分ホスト客引きしかしない奴

   「ねえ!旦那 寄ってらっしゃいな」とソデだけ引いて書き込みしないヤツね

29.ボード他人馬鹿よばわりする奴

   いくら意見が合わないからって そりゃないでしょ 馬鹿野郎...

30.女性とみればやたらメールおくる軟派野郎

   「一度逢っていただけますか」といきなり書いてどうするんた゛!!

31.ボードの上でやたら可愛いブリッ子する女性

   「*子そんなこと言われたら困っちゃうナ!!」なんていう おばさん

32.食い物のことしか書かない奴

   どこそこのラーメン屋シナチクが3本多い なんて書くヤツね

33.やたら他人情報ファイルする奴

   オフで話ながら手帳メモとるヤツね 警察みたい!!

34.オフしか顔ださん奴

   こんなヤツNETにいたっけ? というヤツね

35.やたら引退声明を出す奴

   「もうこのネットには暫く来ません」としょっちゅう書いて気を引くヤツね

36.CHATに入って黙ってる奴

   ひとのやり取りをじっと読んでる暗いヤツね

37.文字化けを平気でそのままにしておく奴

   &*゛@で%*なんですなんて 書いてるヤツね

38.女性ボードしか書かない男

   モロッコ行ってきたら.....

39.他人メールやCHAT内容を無断でUPする奴

   「みなさん彼はこんな無謀なこといってまーす」  おいおい!!

40.ちょっとウケたら図にのる奴

   ハハハハハハ 誰れのこっちゃ ではこのへんで

皆様!!グサリと自分の胸にきても 恨らまないでネ!!

決してあなただけのことじゃないんだから.....ホッホッホ

                             赤猫

* 転載可   ただし 改変はしないで下さい。

TitleBBSての嫌われ方  上級編 < 52 行です>

41.あっちこっちやたらIDとって来ない奴

    そのくせ消したら文句いうヤツね

42.書き込みが少ないと文句いうくせに自分は書かない奴

    「おーい みんなもっと書き込みしろーしか書かんヤツね

43.やたら転載しかしない奴

    こういうのを”転載バカボン”という

44.すぐいじける奴

    ちょっと反論されたらとたんに来なくなるヤツね

45.記録を誇示する奴

    書き込み回数とかCHAT千人斬りとか自慢するヤツね

46.先輩ヅラする奴

    「そんなコマンドなんて常識ですよ」と新人いじめるヤツね

47.CHAT強要する奴

    拒否したら「冷たい人だ」なんてメール寄越すヤツね

48.派閥を作りたがる奴

    お山の大将になりたがるヤツね

49.やたら倫理の固まりみたいな奴

    「あんなHなPDS許されるんですか」といって自分は楽しんでたりして

50.マシンプログラムの話しかしない奴

    ロボットみたいなヤツね 特殊言語でしゃべられるとこちとらわかんなーい

とまあまあ 思い付くままに 絞りだしましてございます

あっ 俺様が落ちているとお嘆きの貴方!!

こっそり 赤猫めにメールくださいね!!

特別編を編纂いたします故......

                            赤猫

TitleBBSでの嫌われ方  特別編 < 93 行です>

その後自首してこられた方々20名の一挙掲載です。

51.気持ちの悪いこととかHなこと書いて人が嫌がるのを喜ぶ奴

   「ミミズゴキブリニャンニャンを観ました」なんて書くヤツね

52.電話代を自慢する奴

   「先月の電話代100万請求きました」なんてスラっと書くヤツね

53.有名人と知り合いだと書く奴

   「昨日ケンさんとサユリさんとうちでコイコイしました」なんて書くヤツね

54.自分嫌われ者だと偽悪ぶる奴

 「ネットの嫌われもの **君でーす」といって人気取ろうとするヤツね

55.同情をひこうとする奴

   「パソ通ばかりしててヨメはんに逃げられましたトホホホ」なんていうヤツね

56.いつ入っても居るヒマなヤツね

   そういうお前さんもヒマやないか!へえ すんません

57.LOG全部残してる奴

   「**さん 一昨年の5月にこんなこと書いてましたよ」なんていうヤツね

58.難解な言葉で煙にまく奴

   「相対的開陳するに貴君の観念的僻見は陥井に陥っている」なんて書くヤツね

59.映画ミステリーの結末書く奴

   「あの映画どんでん返しはこれこれ あの小説犯人はだれだれ」くそぉ!!

60.リッチを匂わす奴

   「ヨット遊びの帰りにベンツの中で夕陽みながらメロン食べました」なんてヤツ

61.ボード日記帳勘違いしてる奴

   「今日会社遅刻したので休んで映画見て昼寝しました マル」なんてヤツね

62.プアを匂わす奴

   「クーラーのない台所ミカン箱の上でアクセスしてます 暑い」なんてヤツね

63.アンク文字ばかりで長々書く奴

   ヤメテケレ メガツカレル アタマガ ウニニナル キブンガメイッテクル タスケテクレエ

64.通信歴を自慢する奴

   「明治時代から音響プラーでやってました」....ウソこけ!!

65.時代錯誤もはなはだしい奴

   「貴方意見帝国憲法違反である」なんていう骨董品みたいなヤツね

66.(^_^)でごまかす奴

   「あんたなんか 大嫌い (^_^)」

67.討論の好きな奴

   どこのネットの討論ボードにも顔出してるヤツね

68.タイピングミスのやたら多い奴

   「わさしのメッセーギを欲読んで管さい」なんてワケわからんヤツね

69.やたら笑う奴

   ハハハハハ ヒッヒッヒ ウッシッシ ゲハゲハ ホッホッホ

70.PDSのダウンにしか来ない奴

   たまには感想でも書きなはれや!!

まあ たくさんおいでですね この調子なら100まで行きそうだ

頑張るぞ!!

                           赤猫

-------------------------------------------------------------------- end ---

(---- from TOUTA-NET --- から ---- end ----)まで

これは、転載転載転載転載.....です。

だけど、非常におもしろかったので、転載しました。

誰にでも、思い当たるところはありますよね(苦笑)。

  === ODA ===

BUSINETから転載ですが、この近所にもアップしてありましたね。(爆笑

                                 ボッチン

----------------------------------------------------------------------------

かっぱ村笑店から転載です。

最近いろいろとありましたが、ようやく鎮静化してきたようですね。

あとは笑って雰囲気を変えよう!って意図転載しました。

                           智仁

----------------------------------------------------------------------------

転載です

ははは、ダウンしたら思わず笑ってしまったので転載です。

チョットぐさっときました・・・・10番あたり・・・・・

          

  朝潮納豆

----------------------------------------------------------------------------

せんたくネットから転載です。

ちょっと、僕も気になるなぁー だったので、転載してみました(笑)

納豆くんと同様。。。。。。。。。。。。。(^_^;)

   ○o。.シロ.。o○

----------------------------------------------------------------------------

けやき-TDUネットより転載

かなりグサッっときましたぁ(笑)

あ、(笑)ごまかしてる(^^;;;;;

う一ぱ一

ls ミ^.^ミ

EDALIN

----------------------------------------------------------------------------

MOネットから転載です。

ダウンしたらびっくり!とても貴重なテキストです。

これは、とても勉強になるパソコン通信マナーです。

大げさなことを書きましたが、わたしもかなり思いあたるところがあります

皆さんの参考になるかと思い、転載させていただきます

                           TK (YUI07656)

----------------------------------------------------------------------------  

アトランティスネットから転載です(汗)

どうでもいいけど、このテキストは、かなりいろんなネット転載されていますよね。

テキスト形式のものが、ここまで出回るってのも、珍しいですよね。

まあ、ここに載っている事柄に一つも反しないネットワーカーがいれば、それこ

そ、奇特な人だと思います(-:

私など、某所でシスオペやってますが、該当箇所がもう沢山ありますです☆はい

                            闇主-R☆ミ

----------------------------------------------------------------------------

DDS大阪より転載

るへ

----------------------------------------------------------------------------

あねっと館 (from 大阪南港)より転載です。

何故か、ここ "ZOB Station BBS" にないのかが、不思議なくらいの文です(^^;

で、結構、ぐさぐさぐさっと来るものがあります。(苦笑)

が、ぐさっとこない人って、いないかとも思います。(^^;)(^^;)

でもって、もし、これに1つもあてはまらない人っていたら、

1度は会ってみたいな、と思う人はきっといるハズ(苦笑)

 #人間、いろいろいるから、おもしろいんだよね?

 #と、ちょっと外しておいたりして(^^;

                            いんりすたー

----------------------------------------------------------------------------

近々消滅しそうなhttp://www.geocities.co.jp/MusicStar/9962/zatsu/ より転載はてブ活動はなさっているみたいなので新しいサーバ移転してくれるかも。オリジナル1990年7月書き込み

anond:20190223234827

2019-02-11

三大「タイトルと同じセリフは出てこない作品

あと一つは?(マジで思いつかなかった)

追記

良かったら↓も どうぞー

三大 読みにくいマンガのタイトル

2019-01-30

はてブが少し不便になってたけど直ったみたい?

多分一昨日ぐらいからだと思うんだけど、PCはてブトップページとかで記事毎のタイトルからtitle属性が無くなって、タイトル全文を確認することができなくなってた。

HTMLからない人に対して説明すると、記事タイトルのところにカーソル乗っけてるとふわっと表示されるやつが無くなってたと思ってもらえれば。

それが今見てたら復活してた。

何かの作業で間違って消したのを修正したのだろうか。

タイトルが全部書かれてるなら別にいらないんだけど、長いタイトル場合最後を「...」で省略しちゃってるからこのtitle属性は残しておいてもらえるとありがたい。

2019-01-29

Privacy Policy

Accepting the Terms & Privacy Policy

These Terms of Service ("Terms") are a legal agreement between we and you ("you"). By installing or using any application ("Service") you agree to be bound by these Terms. By accessing or using the Service, you agree that you have read, understood, and accept to be bound by the Terms. We reserve the right, in its sole discretion, to modify or revise these Terms at any time, and you agree to be bound by such modifications or revisions. If you do not agree to the Terms, do not use the Service.

Users are responsible for periodically viewing the Terms. Your continued use of the Service after a change or update has been made will constitute your acceptance to the revised Terms. If you do not agree to the Terms your only remedy is to discontinue your use of the Service and cancel any accounts you have made using the Service.

We reserve the right to refuse any user access to the Services without notice for any reason, including, but not limited to, a violation of the Terms.

You represent that you are 13 years old or older. If you are between the ages of 13 and 18, you represent that your legal guardian has reviewed and agrees to the Terms.

Intellectual Property/Ownership

All materials that are part of the Service (including, but not limited to, designs, text, graphics, pictures, video, information, applications, software, music, sound and other files, and their selection and arrangement) are protected by law from unauthorized use.

We grant you a personal, non-exclusive, non-transferable, revocable, limited scope license to use the Service solely for the purpose of viewing and using the applicable Services and for no other purpose whatsoever. Your license to use the Services is limited by these Terms.

User Content

You agree that you are willingly publishing the content on the Service using technology and tools provided by us. You understand and agree that you may not distribute, sell, transfer or license this content and/or application in any manner, in any country, or on any social network or another medium without the explicit written permission of us. We reserve the right to remove and permanently delete any User Content from the Service with or without notice.

Rules of Conduct/Usage

You agree that all your communications with the Communication Channels are public, and thus you have no expectation of privacy regarding your use of the Communication Channels. We is not responsible for information that you choose to share on the Communication Channels, or for the actions of other users.

Privacy and Protection of Personal Information

By using the Service, you agree to the collection and use of your personal information as outlined in this Privacy Policy. We may amend the Privacy Policy from time to time, and we encourage you to consult the Privacy Policy regularly for changes.

Cookies

A cookie is a small data file that we transfer to your computer’s hard disk, generally to quickly identify a user's computer and to "remember" things about the user's visit, such as your preferences or a user name and password. The Service sends cookies to your computer when you access or view the content of us. The information contained in a cookie may be linked to your personal information for purposes such as improving the quality of our service, tailoring recommendations to your interests, and making the Service easier to use. You can disable cookies at any time, although you may not be able to access or use features of the Service.

Third-Party Advertising Companies

We may use third-party advertising companies to serve ads on the Service. We do not provide any personal information to third-party advertising companies on a non-aggregate basis. Our system and the third-party advertising technology may use aggregate information, non-personal information, Our cookies on your hard drive and your use of the Service to target advertisements. In addition, advertisers may use other third-party advertising technology to target advertising on other sites. If advertisements are served to you, a unique third-party cookie or cookies may be placed on your computer. Similarly, third-party advertising companies may provide us with pixel tags (also called “clear gifs” or “beacons”) to help manage and optimize online advertising. Beacons enable us to recognize a browser’s cookie when a browser visits the site on which is a beacon is located, and to learn which banner ads bring users to a given site.

Changing or Deleting Your Information

You may review, update, correct or delete any personal information by changing the applicable information in your profile page on Facebook and/or another social network (s). If you completely delete all this information, your account may become deactivated. If you would like us to delete your record in our system, please contact us and we will attempt to accommodate your request if we are not legally obligated to retain the record.

Security

We have put in place reasonable technical and organizational measures designed to secure your personal information from accidental loss and from unauthorized access, use, alteration or disclosure. However, we cannot guarantee that unauthorized third parties will never be able to overcome those measures or use your personal information for improper purposes. Also please note that email and messaging systems are not considered secure, so we discourage you from sending us personal information through these mediums.

Policy Regarding Children

The Service is not geared toward children under the age of 13 and we do not knowingly collect personal information from children under the age of 13. If we learn that a child under 13 has provided us with personal information we will delete such information from our files as quickly as possible.

Disclaimer of Warranty; Limitation of Liability

You agree that your use of the Service shall be at your sole risk. To the fullest extent permitted by law, We, its officers, directors, employees, and agents disclaim all warranties, express or implies, in connection with the website and your use thereof including implied warranties of title, merchantability, fitness for a particular purpose or non-infringement, accuracy, authority, completeness, usefulness, and timeliness. We make no warranties or representations about the accuracy or completeness of the content of the Service and of the content of any sites linked to the Service; We assume no liability or responsibility for any (i) errors, mistakes, or inaccuracies of content, (ii) personal injury or property damage, of any nature whatsoever, resulting from your access to and use of the Service, (iii) any unauthorized access to or use of our secure servers and/or any and all personal information and/or financial information stored therein, (iv) any interruption or cessation of transmission to or from the Service, (v) any bugs, viruses, trojan horses, or the like which may be transmitted to or through the Service by any third party, and/or (vi) any errors or omissions in any content or for any loss or damage of any kind incurred as a result of the use of any content posted, emailed, transmitted, or otherwise made available via the Service.

In no event will We, its directors, officers, agents, contractors, partners and employees, be liable to you or any third person for any special, direct, indirect, incidental, special, punitive, or consequential damages whatsoever including any lost profits or lost data arising from your use of the Service or other materials on, accessed through or downloaded from the Service, whether based on warranty, contract, tort, or any other legal theory, and whether or not We have been advised of the possibility of these damages. The foregoing limitation of liability shall apply to the fullest extent permitted by law in the applicable jurisdiction. You specifically acknowledge that We shall not be liable for user submissions or the defamatory, offensive, or illegal conduct of any third party and that the risk of harm or damage from the foregoing rests entirely with you.

You agree to indemnify and hold We, and each of its directors, officers, agents, contractors, partners, and employees, harmless from and against any loss, liability, claim, demand, damages, costs and expenses, including reasonable attorney's fees, arising out of or in connection with (i) your use of and access to the Service; (ii) your violation of any term of these Terms of Service; (iii) your violation of any third party right, including without limitation any copyright, property, or privacy right; (iv) any claim that one of your User Submissions caused damage to a third party; or (v) any Content you post or share on or through the Service.

General

By visiting or using the Service, you agree that the laws of UK, without regard to principles of conflict of laws and regardless of your location, will govern these Terms of Service and any dispute of any sort that might arise between you and us.

Contacting Us

If you have any questions about these Terms of Service, please contact us at otoco.contact@gmail.com

2019-01-27

「本当の危機」は10年遅れの指摘だということ

新聞部数が一年で222万部減…ついに「本当の危機」がやってきた

そう、新聞が滅びると、真っ当なジャーナリズム日本から姿を消してしまうかもしれないのだ。紙の新聞を読みましょう、と言うつもりはない。だが、タダで情報を得るということは、事実上、タダ働きしている人がいるということだ。そんなビジネスモデルではジャーナリズムは維持できない。誰が、どうやって日本ジャーナリズムを守るのか。そろそろ国民真剣に考えるタイミングではないだろうか。

どっかで見たことあるなと思ったら、アメリカ新聞業界に対するクレイ・シャーキーの指摘を思い出した。

クレイ・シャーキー「新聞、考えられないことを考える」:Clay Shirky's "Newspapers and Thinking the Unthinkable"

新聞業界人はよく「新聞社会全体の利益になる」と言う。それは本当にその通りなのだが、今さしあたっての問題には関係ない。「俺たちがいなくなったら寂しくなるぞ!」 という台詞がかつてビジネスモデルだった試しはないからだ。となると問題はこうだ。新聞社が今雇ってる相当数が解雇になった場合、そのニュースは全部これから誰がカバーしていくのか?

興味深いのはクレイの指摘は2009年のものだということ。しかも、「誰が、どうやって日本ジャーナリズムを守るのか。そろそろ国民真剣に考えるタイミングではないだろうか」との問題提起に対して、『「俺たちがいなくなったら寂しくなるぞ!」 という台詞がかつてビジネスモデルだった試しはない』と10年前のクレイが回答しているのだ。

10年遅れの指摘に対して10年前に既に回答されているという点に、日本ジャーナリズムの「本当の危機」が滲み出ている。

2019-01-21

Life ended without knowing what I want to do.

I always ran away from a childhood.

My parents taught me to say "Yoshie" to myself who are only looking at the neighboring children playing from where they are playing. It means that if you write in kanji "wanna be", I want you to put it in a group. At last I never said it.

I was just playing inside the house. I did not get bored because the books and games were given as such. Although I was only watching TV when I was doing animation or special effects, I did not get interested in dramas and song programs.

Kindergarten and elementary school were pitch dark jungle. There are lurid animals lurking around, and it gets bitten when it gets out of hand. They are laughed at by "friends" who do not know their faces and names, are faced with confusion, have remembered remembered.

Because I do not know what will come up in the classroom, I wandered around the school looking for a hiding place. I was afraid to blink because I do not know what to do if my eyes are closed.

When I went to public middle school as it is, I decided to pursue an advanced school at my parent's discretion that he must be killed. I did not know exactly what the school was going to do, but as a result of trying hard as I said, I caught somewhat over there.

I do not know whether public was a good because I do not know public. The classmate was still a flock of beasts, but there was no prominent bad group. There was a big library, so I arrived at the vacant time. The secondhand bookstore in the way back was also a favorite place. It took about an hour from the house by bus, but it was exactly good to read a book and sometimes got over it.

Although it is an advanced school that entered with great difficulty, I do not remember having worked hard on my studies. During the class we did nothing but graffiti in the textbooks and drew the accumulated delusions in secret notes. Although I had the opportunity to choose club activities after enrollment, I was told that my partner in the department I tried to join was left with a promise for the first time as it was. Since it was consistent in middle and high level, there was no break and only the number of the grade increased.

Although I heard that it seems that they will go to university after going out of high school, I did not understand the mechanism of the exam and so on, so I did not distinguish between the mock test and the center exam. Because I was not particularly conscious of which university I wanted to go to, I received the appropriate undergraduate properly for my grades.

I went to the national state of the neighboring prefecture and got a remittance and started living by my own apartment. It was quite a city compared to the mountain and the rural family of the rice fields, but the main use was Super, Hundred Hundred, and a secondhand bookstore old game store. I was thinking only how to live within a given amount of money without doing a part-time job.

Every lecture was interesting, and the library was big. I also touched on computers and the Internet for the first time. However, it was only in truics that gathered up, and I did not know what to aim for.

People around me were no longer beasts at this time, but I could not feel like approaching from myself. Some people call me out and I also tried circle activities, but eventually I did not last long for any relationship. It seemed to be crushed by a feeling of disgust for myself who flew in association with people and inferiority complex to a person advancing with dreams and goals.

The graffiti of the note was continued, but the more I wrote the more I could show my emptiness. The setting and design I thought was original was only imitation of someone. Both love and ideal were words alone, I did not believe anything.

While taking a stroller while taking a unit, I could not write a thesis. I can not think of any theme I want to study. I could not see anything I wanted to do, I should do, I could do nothing. I knew there was no head like I could go to the hospital and I could not do anything that could help society with what I learned.

I smuggled without meaning suddenly in my assigned laboratory, graduated after two years of retirement. I submitted a graduation thesis that just briefly gathered texts gathered with books and the net as it was given to the professor, and escaped to my parents house.

Because I can not just stay in bed at home, I started job hunting, but there is no reason to find a company that only has a college graduate title, there are companies that hire people who do not even know the jobs that I want to do but I do not know. I decided to work hourly as a food warehouse in the neighboring town according to the advice that it is good anywhere as it is supposed to work after trying it. It was supposed to be for the moment, but it has been ten years as it is.

Physical labor was painful but I got used to it for years. Basically it's not necessary to use your head as it just moves boxes according to written numbers. There are people in the surroundings, but there is no talk except a morning greeting and trouble report. Many boxes are shipped everyday, but the buyer knows only the name written on the label. I just keep carrying boxes.

The salary is also about that, as it is a job that also works for student part-time jobs. Thanks to my hometown my savings were somewhat sad, but if there is a big expenditure due to sickness etc. it will easily be erased. I should have searched for another job, but I could not move my mind if I thought that I could do other work for myself struggling even such an easy job.

There is no dissatisfaction with the daily life itself. I do not have to worry about eating and if I am playing games with candy at home if I have stress on work I can solve it. There is no reason to stick to clothes and grooming as I never see anyone outside the company. Especially there are no places to go and nobody wants to see. I do not drink it, do not hit it, do not buy it.

It turned 40 years old. Although I told you to be a fairy when I was alone after passing 40, this may actually be such a fairy town. Instead of struggling, new things do not happen. Like a light rainy afternoon, quietly just waiting for the night.

This week was a similar week as last week. It will be the same next week. Every day next month and next year, days that do not change will continue. In the meantime parents fall down. And then. There is only a big event left in life anymore.

I think that my life has already ended. I am not dead alone, I am not alive. You can set as many small targets as you want, but it will never lead to something else.

Even though I thought what I wanted to do, I did not understand it after all. I feel a little sad when I think that it is born empty and die empty.

 

2018-12-29

ScrapboxFANZAエロ漫画登録するブックマークレート

つくった

javascript:(function(){

var p = document.getElementById("title");

var title=p.innerHTML;

if (!title) return;

var imagecontainer=document.getElementById("sample-video");

if (!imagecontainer) {

imagecontainer = document.getElementById("l-areaDetailMainContent")

}

var image = imagecontainer.getElementsByTagName("a")[0];

var imageurl = image.getAttribute("href");

var datacontainer = document.getElementsByClassName('page-detail')[0]

if (datacontainer) {

datacontainer = datacontainer.getElementsByTagName('table')[1].getElementsByTagName('a');

var pub = "#" + datacontainer[0].innerText;

var genre = "";

for (let i = datacontainer.length - 2;i >0; i--) {

genre = genre + "#" + datacontainer[i].innerText + '\n';

}

} else {

var pub = "#" + imagecontainer.getElementsByTagName('a')[2].innerText;

datacontainer = document.getElementById('l-areaDetailSubContent').getElementsByClassName('l-areaDetailProductInfo')[0].getElementsByTagName('a');

var genre = "";

for (let i = datacontainer.length - 1;i >= 0; i--) {

genre = genre + "#" + datacontainer[i].innerText + '\n';

}

genre = genre + "#コミック\n"

}

var starnumber = window.prompt('How many star?')

var star = "★".repeat(starnumber)

var lines='['+imageurl+']' + '\n' + pub + '\n\nメモ\n\n' + genre + '\n' + '#' + star;

var body=encodeURIComponent(lines);

window.open('https://scrapbox.io/skero/'+encodeURIComponent(title.trim())+'?body='+body)

})();

2018-12-23

コイカツの公式アップローダ

がなんかエラー吐いてて、SQL丸出しになっとるwww

http://up.illusion.jp/koikatu_upload/scene/index.php?cPath=26

1030 - Got error 28 from storage engine

select p.point, pd.title, pd.handlename, pd.products_name, pd.products_description, pd.waza, pd.rank1, pd.rank2, pd.rank3, p.products_id, p.products_status, p2c.categories_id from products_description pd, products p, products_to_categories p2c where p.products_status != '0' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and p2c.categories_id = '26' order by products_date_added desc

クソワロタ

2018-12-12

ナウシカ

以下は約30年前のナウシカパロディ文書だよ。プログラマ向け。

まだWeb存在してない頃のインターネットからだよ。

----------------

Title:87年度 JUNET冗談大賞(ナウシカ版)

Date : 5:32pm 2/14/88 From: pcs16761 (wat)

/copyright by hiroobu@sra,junet

 shouichi@jsd,junetHiroshi Maruyama

いかなる、コピー、変更、再配布を許可します。一切の著作権利を拒否します。

    風の谷のナウシカ

     Aho丸山

     MA島田

    Hacker裕信

       散乱したファイルの山、

        倒れたメンバーたち。

      またプロジェクトが一つ死んだ。

     行こう、ここもじきに腐海に沈む。

        ナレーション

     巨大電算機が誕生してから40年、銅とシリコンに覆わ

     れた荒れた大地に腐った海..腐海と呼ばれる、有毒の

     商機を発する、ディレクトリーの森が広がり、衰弱したプロ

     グラマー生存を脅かしている。

    腐海の中。銃声が聞こえる。nausicaa顔を上る。

    nausicaa

      そっちは腐海の中心よ、そっちに逃げてはだめ..

    nausicaaカイトに飛び乗る。離陸。光玉を上げる。答え

    nausicaa

      怒りで我を忘れてる。鎮めなくちゃ...

    nausicaa王虫に近づく。

    nausicaa

      ここはおまえの場所じゃないの。戻りなさい。

    男

      風(UNIX)使いか..、よく風を読む..。

    王虫に光玉を投げる。閃光!

    男

      ..閃光で王虫が目を回した。..虫笛?光玉と虫笛(dbx

だけで王虫を鎮めてしまうとは...

            風の谷の城の中

    老婆

      我々の先祖は、40年前には、そろばん計算尺かいうと

      てつもない文明を持っていたそうぢゃ。ところが、ある戦い

      が起ったのぢゃ。その戦いは火の七日間と呼ばれておる。

      その七日の間、えにあっくという名の巨神兵が、世界を焼き

      尽したそうぢゃ。そして、ほとんど皆が死に絶えたこの大地

      に、腐海が生れたのぢゃ。...我々は、唯一つの言伝えを

      支えにして生きておる。

    nausicaa

      何なのですか、婆さま、その言伝えは?

    老婆

      そのもの、青き衣をまといて金色の野に降り立たん。失われ

      し大地とのきずなを結び、遂に人々を青き清浄の地に導かん

      。ただの古い言伝えに過ぎん。

    ダイジェストなので、この間に、ペディテの王女が虫に追われて

    風の谷へ逃げ込んで来た。nausicaaに積荷を焼くように

    言い残して息を引き取った。nausicaaが虫をdbxで

    無事腐海に連れ帰った経過は、御承知の通りである

    虫は無闇に殺してはならない。

    nausicaa(回想)

      背後に王虫の子が隠れている。

    nausicaa

      お願い!!殺さないで!!

    人々

      やはり虫に取り附かれていたか

    nausicaa

      助けてあげて!!

    女

      プログラマーと虫は一緒には生きられないんだよ

    トルメキアの艦隊が風の谷に侵入した。ジルを殺害し、風の谷を

    占領した女司令官が、村人に、

    女司令官

      そなた達は、腐海のために滅びに瀕している。我等に従い、

      我が軍シグマ)に参加せよ。巨神兵アイコットを蘇らせ、

      列強干渉を廃し、大地の主となるのだ!腐海を焼き払い、

      再びこの大地を蘇らせるのだ。かつて人間をして、この大地

      の主となした奇跡の技を我等は再びここに復活させた。私に

      従う者には、もはや納期や虫に怯えぬ暮しを約束しよう。

    老婆

      腐海に手をだしてはならぬ。腐海が生れて40年、幾度も

      人々は腐海を焼こうと試みてきた。バッカスとか、マッカ

      ーシとか、ダイクラスとか、ビルジョイ〔1〕とかの強者

      たちが幾度となくぢゃ。だがその度王虫の群が怒り狂い、

      大地を埋め尽す大波となって押し寄せてきた。総ての町や

      村を飲み込み、その暴走は幾日も幾晩も続いた..王虫が

      力尽きて倒れるまでぢゃ。誰にもそれを止めることはでき

      ん。そして、その王虫の骸を床に、胞子が芽生き、腐海

      それまでの何倍もの大きさに拡がったのぢゃ。

    この後、nausicaaによって、混乱はなんとか押えられ

    風の谷はトルメキアの連合に加えられた。

    トルメキアの参謀

      風の谷の計算尺ガンシップ)の話ですが...

    女司令官

      火の七日間の前に作られたという話は本当か?

    参謀

      奴らはそう思っているようです。今度の戦に微用しますか?

    女司令官肯く

    女司令官

      あの風使い(UNIX user)の娘、あれも参加するよ

      うに申し付けよ。

    トルメキアの連合とペディテの戦いには、nausicaaと城

    の長老たちが、ガンシップで参戦させられることとなった。

    ガンシップの整備中司令官長老たち。  ;;;DeBug

    長老

      わしらの手を見てみなされ。みんなタイプだこでこんなに硬

      くなってしまっておる。亡くなったジル様もそうじゃった。

      なかにはけんしょうえんを煩っておる者もおる。腐海の畔に

      生活らす者の運命じゃ。じゃが、姫様は、こんな手を好きじ

      ゃというて下さる。働き者のきれいな手じゃというて下さる

      あんたも姫様らしいが、わしらの姫様とは、少し違うようじ

      ゃのう。

    女司令官、鼻で笑って立ち去る。

    城の地下室。nausicaaとユパ

    nausicaa

      ユパ様には、見ておいてほしかったの。もうすぐそれどころ

      じゃなくなるから

    ユパ

      これは...これは腐海植物ではないか...

    nausicaa

      大丈夫。害はないわ。でもみんなには言わないで。怖がると

      いけないから。ソフトも水も一番深い井戸の底からとったも

      のなんです。

    ユパ

      これを..自分で...?

    nausicaa

      わるいのはソフトなんです。水と土さえきれいなら、この

      WSたちだってこんなに可愛い...。

    ユパ(独白

      これをこの娘は、一人で見つけだしたのか。

    出撃したトルメキアの連合軍。だが、腐海の上空で、ペディテの

    艦隊接触し、ガンシップと、グライダーは、腐海に墜ちてしま

    う。

    腐海で銃を構えた司令官nausicaa

    nausicaa

      あなた腐海をよく知らない。ここでgotoを使うだけで

      何が起るか判らないのよ。

    女司令官

      黙れ!!動くな!!

    nausicaa

      あなたは何を怖がっているの?まるで動検に立ち合っている

      二年生のよう。

    女司令官

      何!!

    女司令官、gotoを撃つ。側にいた老人が素早く銃口を天に

    向けた。音に驚いた虫たちが襲ってくるのを、腐海の底の王虫の

    巣に隠れてやりすごす。

    nausicaa上で、銃声と虫の襲う音聞く。

    nausicaa

      あの人だ。

    メーベで飛び上がる。

    少年が、銃を撃ちまくりながら逃げている。

    nausicaa

      あなたは殺しすぎる。もうdbxもきかない!!

    彼等は、腐海の底までおちた。

    少年

      ここは...?

    nausicaa

      腐海底みたいね。あの腐海の一番深い所にこんなきれいな

      があるなんて...。

    そこは、ハッカーたちの棲む、白い静かな世界だった。

    少年

      ぼくはペディテのアスベル。きみは?

    nausicaa

      風の谷のナウシカ

    彼等はメーベで、その白い砂中から飛び立った。ペディテへ。

    ペディテは、破壊しつくされていた。

    アスベル

      あのプロテクトが破られるなんて...!もう終りだ。

      トルメキア軍を全滅させたって、なんにもならない。

    nausicaa

      トルメキア軍を全滅!?どういうこと、それは?

    アスベル、目をそらせる。

    nausicaa

      教えて。アスベル。どうしてトルメキア軍を!

    アスベル

      虫に襲わせるんだ...。

    nausicaa

      何て酷いことを...。

    ペディテの住人

      アスベル!!生きていたのか!

    アスベル

      この人が助けてくれたんだ。それより、これは...。

    ペディテの住人

      ああ、ひどいことだ。だが、すぐ元どおりになるさ。腐海

      焼いて...。

    nausicaa

      あなたたちは腐海を焼くって言うけれど、あなたたちだって

      井戸の水を飲むでしょう。誰がその水をきれいにすると思う

      の?腐海の虫やハッカーたちが、きれいにしているのよ。

    ペディテの住人

      この人は?

    アスベル

      風の谷のナウシカ。ぼくの命の恩人だ。

    ペディテの住人

      風の谷...。

    nausicaa

      お願い!!計画中止して!!

    ペディテの住人

      もう駄目だ。動きだしてしまった。もう誰にも止められない

    nausicaaメーベで飛び上がろうとする。ペディテの住人

    たちがそれを押える。

    nausicaa

      お願い!!みんなのところへ行かせて!

    ペディテの住人

      もう手遅れだ..君の気持ちはわかるが...。

    nausicaa

      アスベル!!あなたも見たでしょう、みんなに言って!

      腐海のできた理由を、バグプログラムを守っているって!

    アスベル

      どけ!行かせてやれ!!

    銃を構えている。

    nausicaa

      有難う。

    飛び立つ。(原作と違うけどダイジェストから..)

    風の谷。

    村人A

      風が止った。

    村人B

      Vaxが止まるなんて、今までになかったぞ。(嘘だ)

    村人A

      一体何が起こる...

    子供たち

      婆さま、これからどうなるの?

    老婆

      なるようになるだけぢゃ。子供たち、さあもっとこっちへ

      おいで。

    トルメキア軍の陣営

    女司令官

      巨神兵AI-WS)を使うのだ!

    参謀

      まだ早過ぎます

    女司令官

      たわけ、今使わずにいつ使うというのだ!

    腐海の方角から、王虫の無数の赤く燃える目が、徐々に迫って

    きている。

    兵士

      あ、あれは!

    参謀

      腐ってやがる。やはり、早すぎたか

    女司令官

      焼きはらえ!なぎはらえ!

    巨神兵の口から赤い一筋の鋭い光。王虫が数百匹一瞬で消滅する

    参謀

      さすが、世界AI一色になるはずだぜ。

    女司令官

      焼きはらえ、なぎ倒せ!

    しかし、その煙の中から、果しない虫の群が...

    女司令官

      どうしたそれでも世界で最も邪悪人工知能の末えいか

    巨神兵最後の光線を残し崩れ落ちた。

    子供

      IBMが死んじゃったよ。

    老婆

      いいんじゃあんものにすがって生きるより、ここで滅びた

      方がよい。

    王虫の子釣り下げて飛んできたペディテのフライングマシーン

    (嘘八百と呼ばれていた)は風の谷の直前で王虫の子を落した。

    ナウシカはメーベを捨てて、王虫の暴走の前に両手を広げた。

    王虫は、彼女跳ね飛ばし....止まった。

    子供

      姫ねえさま、死んじゃった...。

    老婆

      我等のために命をかけてデバックしてくださったんじゃ

    王虫たちは、倒れた彼女に向って、静かに金色触手を延した。

    十本もの触手は、彼女優しく抱き上げる様に空にもちあげた。

    彼女は静かに身を起した。

   老婆

      王虫が心を開いておる、子供達よ我が老いた目に代っておし

      えておくれ。今ナウシカは...。

    子供

      真青な服を着てる金色の野原に立っているみたい...

    老婆

      そのもの青き衣をまといて金色の野に降り立つべし....

      おお   古き言伝えは真だったんじゃ...

    その時  風が帰ってきた。

    村人達

      おおVAXが立ち上がったぞ!

    晴れた朝の空にメーベが舞う

       FIN

    ....

    というわけでした。お粗末さま。

2018-12-11

[] Comoesta Yaegashi - Main Title "Amaranth" Remix

https://www.youtube.com/watch?v=_EdJ61ZW9hE

マンボの軽快なリズムで気分を上げて行こう!

2018-12-09

Nginxの設定メモ

解決方法

参考
やったこ

Ubuntuで以下のようにコマンドを実行してみました。

管理者になる
sudo su -
Nginxインストール
apt install nginx
Nginx関係場所確認
whereis nginx

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

Nginx設定ファイルを追加
cd /etc/nginx
ls -la
cd /etc/nginx/conf.d
touch default.conf
vi default.conf

default.confに以下のような内容をコピペしました。

server {
        listen 8000 default_server;
        listen [::]:8000 default_server ipv6only=on;

        root /var/www/html;
        index index.html index.htm;
}
Nginx再起動
nginx -s reload
index.html作成

「/var/www/html」に「index.html」というファイルを作ります

内容を以下のようにして保存します。

<html>

 <head>

  <title>TEST</title>

 </head>

 <body>

  <h1>TEST PAGE</h1>

 </body>

</html>

Chrome確認

WindowsChromeを起動します。

http://localhost:8000」にアクセスします。

上記index.htmlが表示されました。

 

結論

Nginxの設定が抜けてました。

 

アドバイスどうもありがとうございました。

2018-12-07

これがタイトルの書き方

はてな記法検索すると、増田の書き方が分かるよ。

  1. 言及する」ボタンを押す。
  2. タイトル部分に「anond:20181207201643」とか出る。
  3. その後ろに続けて「:title=」と書く。
  4. その後ろに続けて「これがタイトルの書き方」などと書く。

anond:20181207201643:title=これがタイトルの書き方

みたいなかんじでいけるよ。

2018-11-19

はてな記法

言及を押すと「anond:20181119145723」が出るよね?

その後に「:title=」を付けて、タイトルを書けばいいよ。

anond:20181119145723:title=はてな記法

↑こんなかんじ

はてな記法 title」で検索してね!

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

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

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コール」 を検索 - はてなブックマーク

2018-11-01

増田プログラマー養成講座 その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アプリの完成見本(続き)」

へ続きます

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