オブジェクト指向についてしっかりと理解している人はどれだけいるだろうか?

こんにちは、あっきーです。 前回ちょっぴりと話していた、Webアプリケーションがだいぶ形になってきました。 今回、比較的大きなWebアプリケーションを作成したのですが、複雑な処理、高機能なレイアウトなどを実装してくうちに、 データの流れた処理内容などをがわからなくなってきました。原因は、「できるだけ早く、動くアプリケーションを開発した結果、 データ思考の開発になってしまったこと。」そして、「凝縮度と依存度を全く意識していなかったこと」があると考えています。 そういうことがあって、オブジェクト指向の言語として、フロントを書き換えて全面リファクタリングすることにしました。 しかし、オブジェクト指向という言葉と、オブジェクト指向を使えば、大規模な開発にも使えるという言葉はよく聞くけれど、 具体的に、どういう実装をすれば、そのような状態になるのかイメージがつかない。 実は以前に、Javaを用いて、オブジェクト指向型のプログラミングを行っていた。しかし、当時の認識では、「class=オブジェクト指向」という認識があって、javaさえ使えば、大規模開発も出来る。みたいな事を思っていました。しかし、そんなことはありませんでした。 あるオブジェクトがあるオブジェクトに依存していて、複数のクラスがまとまって、全然分割が出来ず、1ファイル変更したいだけなのに依存しているせいで、複数のファイルの修正を余儀なくされた経験が合った。 今考えてみれば、そもそも「オブジェクト指向とデータ思考」と「オブジェクト指向とは」という考え(認識)に誤りがあったのだと分かった。この考え方は、将来永遠プログラミングを仕事にする人にとって、非常に重要な考えになると思った。今回たくさんの文献を読んで、考えて、理解したことを忘れないように、この場に記しておこうと思う。

Webアプリを作る際に、Reactを導入しよう思ったので、たくさんの資料を読み漁ったが、アプリケーションに取り入れる具体的なイメージが頭に浮かんでこない件

こんにちわ、あっきーです。 私は今、自分でWebアプリケーションを作ろうとしています。売りがUIでの操作性なので、 たくさんの機能を盛り込みたくさんの更新をかける必要があります。 そこで、ajaxやらデザインやら、たくさんの要素が絡み合い、 一気にスパゲッティコード化するのが目に見えていました。 解決策としては、ReacとReduxを使えば、なんとかなりそうななんじがしました。 Reactを調べると、日本語に関する情報があまりにも少ない。 もちろん英語も読むんですが、それほど英語力が高くありませんので、 たくさん時間がかかってしまいます。 なので、そういうときは日本での情報をたくさん読んだあとに、 英語でかかれている本家のサイトをみるようにしています。 ですが、Reactに関しての情報がとても少なく、 特に、React+Reduxに関する情報は更に少ない。 しかも、Reactが相当な頻度でバージョンアップを繰り返しているので、 たとえ日本語での情報が合ったとしても、すでに廃れた内容であり、 今の最新バージョンでの内容と合わなかったりと、 苦しい状況があります。 だからといって、Reactを使ったWebアプリケーション開発を諦めるわけにはいかない (開発者としての意地)ので、まずは、小さなアプリをを作って進めていく事が React使いになるための最短の道であると、思いはじめています。 現在のところ、Googleで「React」「React入門」「react redux」 「react ベストプラクティス」と調べて出てくるを片っ端から読んでつなげることで、 はっきりと言えることは、「reactがviewのみの機能を提供してくれていること」 「ajaxなどの機能はreduxを使って、データ管理をしたほうがスパゲッティ化を防げるということ」の2点です。 その他のReactで表示させるデータの伝搬などでは、はいかつ途中でエラーが絶えず、原因がわからず、 Componentがどうのこうのなんて言えるレベルではありません。 とりあえず、私が調べたURLのリストをべた書きしておこうと思います。 分類はしてませんが、何か詰まったときに役に立つかも知れないので、一応という側面が強いですが、、、 http://creator.dwango.co.jp/3413.html http://ma3tk.hateblo.jp/entry/2016/06/20/182232 http://qiita.com/Chayata/items/28bc6f6af4bc41e89e03 http://qiita.com/hrsh7th@github/items/c7f33f3d18d5306b22e1 http://nabeliwo.hatenablog.com/entry/2016/06/10/012400 http://qiita.com/nabeliwo/items/ac4b77324a9989e8e6bb http://sssslide.com/speakerdeck.com/koba04/reactfalsezui-xin-dong-xiang-tobesutopurakuteisu https://www.ibm.com/developerworks/jp/web/library/wa-react-intro/ https://facebook.github.io/react/tips/dangerously-set-inner-html.html https://facebook.github.io/react/docs/package-management.html https://facebook.github.io/react/docs/tooling-integration.html https://facebook.github.io/react/tips/dom-event-listeners.html https://facebook.github.io/react/docs/multiple-components.html https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html https://facebook.github.io/react/docs/tutorial.html http://qiita.com/okmttdhr/items/63a9191fa2ad37dc1133 http://postd.cc/best-practices-for-building-large-react-applications/ http://mae.chab.in/archives/2874 https://speakerdeck.com/koba04/reactfalsezui-xin-dong-xiang-tobesutopurakuteisu http://www.slideshare.net/axross/react-48651340 https://facebook.github.io/react/docs/multiple-components.html#dynamic-children https://appendto.com/2016/05/what-is-difference-between-props-and-state/ http://kenjimorita.jp/imadakarawakattareact/ http://qiita.com/koba04/items/43200b6fd6e6f43f0d8d http://qiita.com/koba04/items/bc13d1f42964278ae14e https://facebook.github.io/react/docs/reusable-components.html http://blog.koba04.com/post/2015/01/28/published-react-v0.13.0-beta1/ http://qiita.com/nownabe/items/2d8b92d95186c3941de0 https://facebook.github.io/react/blog/2015/09/02/new-react-developer-tools.html http://qiita.com/kuniken/items/a22adda392ccc30011b1 http://qiita.com/kuniken/items/963cb977dffd3e662e40 http://js.studio-kingdom.com/react/guides/transferring_props http://qiita.com/trapple/items/e7d64f62c1286d76f328 http://qiita.com/koba04/items/039b9c974df284766f64 http://stackoverflow.com/questions/30608347/how-to-pass-arguments-to-functions-in-react-js http://qiita.com/konojunya/items/cb026a2aa3df1837d587 http://qiita.com/erukiti/items/e16aa13ad81d5938374e http://qiita.com/yuinchirn/items/286353f5c80cc44f1caf#_reference-faf5954aa90ea07d9bde http://qiita.com/kiita312/items/d769c85f446994349b52 https://github.

MacにHomebrewをインストールする方法と使い方まとめ

いつも愛用しているMac パッケージマネージャはHomebrewを使っています。 Homebrewとは、Unix環境で動作し、様々なソフトを管理することが出来ます。 プログラミングをするときに、みんなが必ずすることになる「環境構築」。 非常に面倒で導入する大変さから、ここで気持ちが折れてしまうことは少なくありません。 Macでは、「Homebrew」を使うと、環境構築を簡単に行なうことができ、 インストールしたパッケージのアップデートや削除も簡単に扱えますし、 依存関係も勝手に解決してくれるため、非常に便利です。 対応しているパッケージは、2,700以上あり、vim, ruby, python3, php, c++などの 主要のパッケージはもちろん対応していますし、含まれていないパッケージもFormulaという、 パッケージの手続き書を書くことによって、全てのパッケージを管理することも出来ます。 その他にも、ライブラリのリンク管理、Macシステム内部の構造スキャニング機能など、 高度な機能もついています。 Macを使ったか開発環境では、Homebrewは必須かと思いますので、 この記事を参考に導入しましょう!

大量のインプットに、アウトプットがついていかず消化不良になる。わかるわかる。

エンジニアとして仕事をしていると、次々に新しい技術が生まれてきます。 こういう技術っていうのは流行り廃りがとてもとても速いです。 数年前にjavascriptのサーバーサイド実装NodeJSが突然登場して、 一気に浸透していくのを肌で感じました。 そして、npm,gruntが登場し、web業界ではgruntを使う人達が出てきました。 その後1年もただずにgulpが登場して、シェアを取られてしまうといった現象も起きていました。 php7が登場して、phpの書き方が変わったり、golang,scalaが登場したりと、 あらゆるところで技術革新が進んでします。 フルスタックエンジニアの俺としては、それらの知識をすべて身につけて、 プロジェクトごとに最適な言語使い方で、様々な価値を生み出していきたい。 しかしながら、たくさんの知識をインプットしたところで、 すぐに忘れていってしまうし、勉強出来る時間を取れるのも、 学生の間だけでしょう。 できるだけ効率よく、技術知識を消化するのにはどうしたらいいのか、 という視点からこの記事をいていきます。

ブログ記事の書き方がわからなかったので、まとめてみたよ【メモ】

ブログで集客をしたいのです。みんなに見てもらいたいのです。 そのために濃い記事を書かなきゃいけないけれど、書き方がわかりません。 どういう構成で書いて、どの部分に気をつけば読みやすくて、こっちの言いたいことが伝わるのか。 それが知りたいです。 今では、ネットに沢山情報が転がっているんですが、断片的な情報しか見つけることが出来ませんでした。 なので、自分用にブログ記事の書き方をまとめることにしました。

お前ら。技術的負債の意味をしっかり理解してるか?コードは書いただけやダメなんだぞ!エンジニアの仕事はコードをデザインすることだ!

今日、スマホを見るとこんな記事が流れていました。 これを見た時、俺は「記術的負債かぁ〜。プログラムを経験した事ない人達は、表面上での動作しか見えてないわけだし、絶対理解しづらいだろうなぁ。」と、ふと思いました。 みなさんは、どう思いますか? 俺は何度となく個人開発中に技術的負債の壁に当たりました。1ヶ月後に開発を再開すると、 内容が全くわからない。何の処理をしているのか、理解できない… 泣く泣く、ボッシュートになりました。

【スタバレビュー】勉強が非常にはかどる!「ゴールデンメイプルフラペチーノ with キャンディウォルナッツ」がとっても絶品だった!

2016年9月1日、スタバで新しいドリンクが出ました! 「ゴールデンメイプルフラペチーノ with キャンディウォルナッツ」 もう、なんて言って注文したらいいのかわからなくなるぐらい、長い名前ですが、 このドリンクがとっても美味しくって、絶品でした! 早速レビューしていきます!

【MySQL入門】MySQL初学者のための効率的な学習方法を考えてみた

僕は、あるサービスを作りたくなりました。それは、「ブログリンクカードをユーザーが自由にデザインすることの出来るサービス」というものでした。しかし、サービスの特性上、サーバー側であらゆるサイトをクロールして、情報を収集、管理をする必要があります。設計の段階で、ユーザー側のサービスと、クローリングサービスの2つにマイクロサービスとして分割し、それぞれをapiで通信する方法がベストだということになりました。 システム上、絶対に不可欠なのがデータベースです。日本語での情報が豊富という理由から、データベースはMySQLを採用することにしました。しかし、データベースを運用していくには、ある程度の基礎知識が欠かせません。今の僕のレベルでは、SQL言語が分かる程度だったので、データを絶対に壊さないためにレプリケーションやサーバー分割、テーブルの型など、細かいところまで勉強する必要がありました。 ほとんど初心者の僕が、MySQLのレベルを実際に運用出来るレベルまで持って行くには、どのようなことをするのが一番手っ取り早いかを考え、お伝えできればと思っています。

Hatebaのようなブログリンクカードをつくろうぜ!

「はてなのようなブログリンクカードシステムを自作したい!」 そう、突然思い立ってしまいました。(一体、毎秒何リクエスト捌けばいいんやろう…) きっかけは、これを見つけてしまったからです。 このはてなブログカードは、リンクをいい感じにデザインしつつ、見やすくしてくれる、とてもすぐれものです。なんですが、HTTPSで使うと、不具合が出てしまうという問題がある! のです。 すでに知っているかと思いますが、このサイトでは「Let’s Encrypt」を使った、SSL対策を行っています。でも、SSL化したサイトから、HTTPでリソースをダウンロードすると、このような感じで必ず不具合が起きてしまいます。 欲を言うなら、もう自由にデザイン出来る機能が欲しい!

「laravel?rails?」本当のプログラマは、気にしてねぇぞ!ってもっと早く気がつくべきだった

今、laravelかrailsかどちらかを使って、Webアプリを開発しようとしています。どちらがよりするぐれいているか、実行速度が速いか、開発が速いか、サーバーリソース数が少ないのはどちらかなど、いろいろとサクを巡らしながら、調べまくっていました。 で、とある記事にたどり着いたんです。 「本当にプログラマは、プログラムング言語なんて気にしてねぇぞ」と、…。 「スキルアップを目的にプログラミングをしてはダメ」だと…。 もっと早く気がつくべきだった。 今日は、そんな思いを忘れないようにするためにいろいろと話そうと思います。 ※ この記事は、個人的な主観がたくさん入っています。 気分の優れない方は、別ページに行くことをおすすめします。

福岡から大分にバイクで帰るときに気をつけたことと、旅の途中で出会った最高に綺麗な景色

おはこんばんにちわ!あっきーです。 今回は、福岡から大分までバイクで帰省してみました! 電車で帰る手段もあったんですが、それは「ロマンを求めて」というものです。 バイクで走るのが好きで、バイクに乗りたかったから、それで帰りました。 バイクで帰る時にたくさんの綺麗な景色を見ることが出来ましたが、 同時に危ない体験もしました。 今日は、それを俺自身が忘れることのないようにこの記事で記録として残し、 そして、それを役立つような形で伝えられればと思います。

YAPC::Asia 2016、YAPC::Japanとして開催決定!

YAPC::Asiaは、YAPC::Japanに生まれ変わり、 新しくスタートをきりました! そして、記念すべき第一回の開催地は、「北海道」! 開催日は、2016年12月10日に決定しました! http://yapcjapan.org/2016hokkaido/index.html

【golang】数値型のオーバーフロー(桁あふれ)と、それを防ぐ解決策

プログラマにとってオーバーフローは重大な問題です。 原因や場所が特定されにくいため、長期間放置される可能性が高く、 セキュリティの大きなバグに繋がるおそれがあるためです。 golangの数値型には、int、int32、byteなど、 11種類の型(byte型はuint8型に含めた)があります。 今回は、その型を使って、桁あふれオーバーフローをさせてみたました。 この話は、コンピュータの仕組みがわかっていない人は理解が出来ない可能性が高いです。 10進数と2進数の概念については事前知識とします。

「はてなブックマーク」100%の幅になるようにカスタマイズして設置する方法!

※ 2016/7/06 編集: 文章がの構造がおかしかったので、校正しました ブログを上位ランキングさせるために必要なツール言っても過言ではなくなった、 「はてなブックマーク」。 はてなブックマークをされると、 google検索エンジンの順位で高い影響力を持つ「被リンク数」を稼ぐ事ができ、 それにより、ブックマークされた記事が上位に表示されやすくなります。 でも、公式で提供されているブログパーツは幅が固定されてしまって、使いづらい… なので、いっそのこと、幅がぴったりに合うようにCSSでカスタマイズしました。

Git厳選入門書:100以上エンジニア本を買った私がおすすめする「Gitを最も効率よく学習するための厳選3冊」

私は今までに100冊を超える技術書を買い、それで分かったことがある。 それは、「ある分野について知ろうと思った時、本を1冊買うだけでは不十分だ。」ということである。 例えば、今回の題名に習ってgitについて知りたいとしよう。 しかし、gitについての予備知識は無い。 なので、まずそれは何かを知る必要がある。 そして、それの使い方、運用方法、チーム内での使い方、githubなどの関連技術、etc…など 様々な技術の知識が要求されるので、1冊で到底そのような範囲をカバー出来るはずもない。

学生が無料で「PhpStorm」「IntelliJ IDEA」「RubyMine」を手に入れる方法

https://www.jetbrains.com/student/ ‘IntelliJ IDEA’、’PhpStorm’、’RubyMine’、使っていますか? これらは、jetbrains社が開発していて、 今や、全世界の3割の人が使っている という、有名なIDEの1つです。 ※ IDE => 統合開発環境(とうごうかいはつかんきょう) 本来なら、$ 249.00($1=100円で、2万4900円) / 1年 を払わないと使うことが出来ません! でも、jetbrains社は学生や教師など、教育機関に所属する人に対しては、 すべての機能が無制限の製品版を無料で使うことが出来ます!

[レビュー]:学生が持つべきリュック No.1! (ザ・ノースフェイス)THE NORTH FACE BC Fuse Box

私がリュックに求めるのは、「背負いやすさ」「丈夫さ」「防水性」の3つです。 それらをすべて併せ持っているリュックこそ、「THE NORTH FACE BC Fuse Box」 この至高のリュックこそ、リュック会の頂点に君臨しているのです! そんなリュックを3ヶ月間使ってみて、わかったことがあります。 それは、「一度使い始めれば、他のリュックは買えなくなる!」ということです。 そんな、リュックを魅力的に語ろうではありませんか。

python & Opencvを使ったヒストグラム平坦化による、コントラスト強調

今回のゼミでは、「ヒストグラム平坦化による、コントラスト強調」の実装を行いました。 前回は、C++を使いましたが、 ゼミでの目的は「処理の内容を理解する」ということで、内容を理解していればいいので、 一番書き方が簡単なPythonを採用することにしました。 OpenCVのインストール方法は以下を見てください Homebrewを使ってOpenCV3、Python2,3をMacにインストールする

Intellij IDEAとは何か。なにが出来るのか?

https://www.jetbrains.com/idea/ 前回、「Intellij IDEAを開発している所って何を作っているの?」について書きました。 この記事はその続きです。 今回は、「Intellij IDEAとは何なのか」「何が出来てなんの特徴があるのか」を書きたと思います。

Intellij IDEAを開発している所って何を作っているの?

https://www.jetbrains.com/ 最近開発の速度に悩んでいます。 今までは、atom やsublimeで開発をしてきましたが、 単なるエディタなので、、コンソールを開いてビルドして、githubにアップして… いろいろな工程を踏まないを開発が出来なくなり、開発速度に不満を持つようになりました。 そこで、辛いですがエディタを移行しようと思います。(atom => Intellij IDEA) で、Intellij IDEA をダウンロードして「よし!使おう!」って思ったんですが、 いろいろ種類があって、何がどういう役割があって、どれを選択したらいいのか迷いました。 ですので、Intellij IDEA ってそもそも何なの?というところから知ろうと思い、 この記事にまとめました。