-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.xml
748 lines (480 loc) · 42.9 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Catatsu Tech Blog</title>
<link>https://catatsu.github.io/</link>
<description>Recent content on Catatsu Tech Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<copyright>Code released under the Apache 2.0 license.</copyright>
<lastBuildDate>Mon, 24 Oct 2016 11:45:17 +0900</lastBuildDate>
<atom:link href="https://catatsu.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LINE Notifyが楽しそうだったので試してみた</title>
<link>https://catatsu.github.io/2016/10/24/line-notify</link>
<pubDate>Mon, 24 Oct 2016 11:45:17 +0900</pubDate>
<guid>https://catatsu.github.io/2016/10/24/line-notify</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>皆さん、LINE使ってますか?使ってますね?</p>
<p>イマドキ、連絡は絶対メールで!なんて古風なやり方を続けている方はIT界隈にはいないと思いますが、色んな通知を色んなサービスで受けるのはちょっとつらたん。。そこで、通知関連をLINEにまとめられると色々便利ですよね(多分)。</p>
<p>ただし、用法用量は守ってご利用ください(個人的に業務連絡をLINEでやるのは反対派です)。</p>
<h2 id="手順">手順</h2>
<ul>
<li>アクセストークンの発行</li>
<li><code>Authorization: Bearer</code>に発行したトークンを入れてmessageをPOST</li>
</ul>
<p>これだけ。簡単。</p>
<h2 id="なにわともあれトークン発行">なにわともあれトークン発行</h2>
<p>まずは登録してアクセストークンを発行しましょう。</p>
<p><a href="https://notify-bot.line.me/ja/">https://notify-bot.line.me/ja/</a></p>
<p>ポチポチするだけです。</p>
<h2 id="curlでpostしてみる">curlでPOSTしてみる</h2>
<pre><code>curl -X POST -H 'Authorization: Bearer &lt;token&gt;' -F 'message=&lt;message&gt;' https://notify-api.line.me/api/notify
</code></pre>
<p>通知が届きましたね。</p>
<p>こちらからは以上です。</p>
<p>参考:
<a href="http://qiita.com/okunoryo/items/88c002d74ab173706c93">LINE Notifyをとりあえず使ってみる</a></p>
</description>
</item>
<item>
<title>PHP界隈で一番ナウい(けど遅い)という噂のLaravelをサクッと触ってなんとなく理解する</title>
<link>https://catatsu.github.io/2016/10/03/hello-laravel</link>
<pubDate>Mon, 03 Oct 2016 20:51:42 +0900</pubDate>
<guid>https://catatsu.github.io/2016/10/03/hello-laravel</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>RubyにはRailsというRubyのフレームワークといえばコレ!みたいなものがあるんですが、残念ながらPHP界隈にはRailsに該当するようなフレームワークはありません。</p>
<p>そんな中、個人的に一番ナウいと思っているPHPフレームワークLaravelに触れるべく、サンプルアプリを通してその使いやすさを実感してみようと思います!</p>
<h2 id="開発環境構築">開発環境構築</h2>
<p>ナウいフレームワークだけあって、Laravelは<code>composer</code>で入れる、また、<code>vagrant</code>も標準で準備されています。最高!最高!ふぅうううーーーーーー!!</p>
<pre><code class="language-bash">$ composer require laravel/homestead
</code></pre>
<pre><code class="language-bash">$ php vendor/bin/homestead make
</code></pre>
<p>ここまでやれば<code>vagrant up</code>までたどり着きます。マジかよ楽かよ。</p>
<pre><code class="language-bash">$ vagrant up
</code></pre>
<pre><code class="language-bash">$ vagrant ssh
</code></pre>
<p>あとはアプリをサクッと作るぜ!</p>
<pre><code class="language-bash">$ composer create-project laravel/laravel --prefer-dist laravel-apps
</code></pre>
<p>とここまで来て気づいたんですが、プロジェクト配下でアプリを作ってしまったので階層がちょっと気持ち悪い感じになってしまいました。</p>
<p>のでちょっと変えて、こんな感じに。<code>vagrant</code>関連はvagrant配下に押しやっています。ちょっとスッキリ。</p>
<pre><code class="language-bash">$ tree -L 1 ./
./
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── gulpfile.js
├── package.json
├── phpunit.xml
├── public
├── readme.md
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vagrant
└── vendor
</code></pre>
<p>あとはブラウザから<code>http://192.168.10.10/</code>を叩けば、デフォルトページが出ていますね!ね?え?出るよね?</p>
<h2 id="チュートリアル">チュートリアル</h2>
<p>公式にはチュートリアル的なものがなかったので、<a href="http://qiita.com/fumiyasac@github/items/78a335880f7abb1de8bf">こちら</a>のチュートリアル的なのを参考に、Laravelっていきます。</p>
<p>やることはリンク先にある通りなので爆、ポイントをかいつまんで説明します。</p>
<p>マイグレーションファイルを作るコマンドは以下。中身は完全Skeletonなので、自分でガリガリ書いていきましょう。書くべし書くべし!</p>
<pre><code class="language-bash">$ php artisan make:migration create_topics_table
</code></pre>
<p>マイグレーションの適用もちゃんとコマンドで。</p>
<pre><code class="language-bash">$ php artisan migrate
</code></pre>
<p>戻したければロールバックもできる。ロールバックは、「前回適用したもの」がロールバックされるようだ(※一気に幾つかマイグレーションしたら一気にいくつかロールバックされる)。</p>
<pre><code class="language-bash">$ php artisan migrate:rollback
</code></pre>
<p>モデルもジェネレータで生成できる。</p>
<pre><code>$ php artisan make:model Topic
</code></pre>
<p>ときたら当然コントローラーもジェネレータで生成できます。</p>
<pre><code>$ php artisan make:controller TopicsController
</code></pre>
<p>でもこれ、ホント単一ファイル(テストもないしViewもない)しか生成してくれないので、そんなに使い勝手は良くないかも。。コレくらいだったら<code>cp</code>でコピーしちゃった方がいいかもしんない。</p>
<p>まぁそれは置いといて、<code>rails c</code>的なあれもあります。</p>
<pre><code>$ php artisan tinker
</code></pre>
<p>ルーティングは前のバージョンとは変わっていて、<code>routes/web.php</code>で定義されてるっぽい。設定されているルーティングを見るにはこのコマンド。<code>resource</code>でRESTfulなURIも生成できる!Railsライクですね。</p>
<pre><code class="language-bash">$ php artisan route:list
+--------+----------+--------------------+------+----------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------------+------+----------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\TopicsController@index | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | topics/add | | App\Http\Controllers\TopicsController@add | web |
| | POST | topics/create | | App\Http\Controllers\TopicsController@create | web |
| | POST | topics/delete | | App\Http\Controllers\TopicsController@delete | web |
| | GET|HEAD | topics/edit/{id} | | App\Http\Controllers\TopicsController@edit | web |
| | POST | topics/update/{id} | | App\Http\Controllers\TopicsController@update | web |
| | GET|HEAD | topics/{id} | | App\Http\Controllers\TopicsController@show | web |
+--------+----------+--------------------+------+----------------------------------------------+--------------+
</code></pre>
<p>とまぁこんな感じで←え、なんとなくざっくり理解できました。</p>
<p>ここまでのソースは<a href="https://github.com/nabeen/laravel_apps/tree/hello-laravel">Github</a>にあげているので、ご自由にどうぞ。</p>
<h2 id="ちょっと気に食わないところ">ちょっと気に食わないところ</h2>
<p>箇条書きでいきます。</p>
<ul>
<li>ControllerがHttp配下にあるのが慣れない</li>
<li>ModelがApp直下にあるのはどうなの?</li>
<li>ルーティングファイルの名前が<code>web.php</code>だと?</li>
</ul>
<p>まだ殆どLaravelのメリットは感じられていませんが、とりあえず慣れ親しんだ感じのフォルダ構成から結構逸脱してるなぁという印象。まぁこういうのは慣れだし、そこまで障害にはならないんですが(自分好みの定義にも変えられるんだろうけど、なるべくデフォルトから逸脱したくはない)。</p>
<h2 id="おわりに">おわりに</h2>
<p>なんか全然Laravelの機能が把握できなかった気がするけど、触りとしてはこんなもんでいいですかね?</p>
<p>次回はソーシャルログイン辺りを実装していきます。</p>
</description>
</item>
<item>
<title>LAMPエンジニアがSwiftを始めた時に必ずぶち当たるであろう壁について簡単に説明する</title>
<link>https://catatsu.github.io/2016/09/29/hello-swift</link>
<pubDate>Thu, 29 Sep 2016 20:55:14 +0900</pubDate>
<guid>https://catatsu.github.io/2016/09/29/hello-swift</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>ペーペーエンジニアの僕ですが、今までは基本的にPHPでお仕事してきました。でもとあるプロジェクトでいきなりSwiftで書かれたプロダクトを引き継ぐことに、、、!今日はそんな僕が最初に躓いた(今でも躓いている)ことについてお話させていただきます。</p>
<h2 id="大前提">大前提</h2>
<p>チュートリアルから始めて新規開発とかだとまた違うんでしょうけど、「既存のプロダクト」を「SwiftのSも知らないLAMPエンジニア」が引き継いだ、というちょっと変わった状況であることを念頭に置いておいてください。</p>
<p>ちなみに、Objective-Cも書いたことはありません。</p>
<h2 id="viewの作り方がわからんよ">Viewの作り方がわからんよ</h2>
<p>現時点の結論:Storyboardで全体の画面遷移を定義して、細かい部品をxibで作る</p>
<p>我々LAMPエンジニアは、Viewと言えばHTMLです。CSSです。JSです。<strong>でもSwift(というかネイティブ)は違うんだってね!</strong></p>
<p>基本的にはGUIで作り込んでいくことになります。GUIでなんとかコンポーネントをドラッグ&amp;ドロップして、GUIでサイズ指定して、GUIで位置指定して、GUIでごにょごにょ。この辺はコード的にはXMLで定義されてるんですけど、なんだか「見えない部分でやってる感」がすごい。</p>
<p>なんか昔Dreamweaverのビジュアルエディタで位置調整してた時を少し思い出したよ。</p>
<h2 id="view作ってたらconstraintsがーーって怒られるよ">View作ってたらConstraintsがーーって怒られるよ</h2>
<p>現時点の結論:きちんと制約をつけましょう</p>
<p>Xcodeは結構頭がいいので、「なんかこれどこに配置するのかあやふやじゃね?」って時に、ちゃんと僕を怒ってくれます。赤で怒られるから、結構強めに怒ってるのかな。</p>
<p>でも悪いのはConstraintsをきちんと設定していない僕なので、今ではむしろ感謝しています!Xcodeありがとう!</p>
<h2 id="xib表示しただけでなんかdiff出るんだけど">xib表示しただけでなんかdiff出るんだけど?</h2>
<p>現時点の結論:自分が「意図的に変更した」部分以外はrevertする</p>
<p>なんかXMLにOXのシステムバージョンを持っていて、更新されてるとdiffが出てしまう。これはマジでうざい。システム情報なんて持たないで欲しい。ファック!ファック!!ファック!!!</p>
<p>社内のメンターに聞いたところ、「そういうもん」らしい。まじかよ。マゾかよ。</p>
<h2 id="とか-とかあるけど-あれなんなん">?とか!とかあるけど、あれなんなん?</h2>
<p>現時点の結論:とりあえず<a href="http://qiita.com/maiki055/items/b24378a3707bd35a31a8">ここ</a>読んどけばいい</p>
<p>オプショナル型っていうらしい。いわゆるヌルポ(この前覚えた言葉)を防いでくれるために使われるやつで、世界各国のSwiftエンジニアが便利便利と阿吽絶叫しているようだけど、他の言語にはない概念なので( ゚д゚)ポカーンとしていた。</p>
<p>でも上記の記事を読んでおけば、( ゚д゚)ポカーンから(<em>´﹃`</em>)ダラーくらいにはなると思う。</p>
<h2 id="delegateってなんだよファックかよ">delegateってなんだよファックかよ</h2>
<p>現時点の結論:自分で使える気がしない</p>
<p>delegateはprotcolとセットで出てきて、「何かの処理を依頼する」時に使われるもの、らしい。という概念自体は<a href="http://qiita.com/mochizukikotaro/items/a5bc60d92aa2d6fe52ca">このへん</a>とか読めばわかるんだけど、なんか現実的なユースケースがよくわからない。</p>
<p>ごめん。</p>
<h2 id="viewのviewdidloadとかっていつ呼ばれんの">ViewのviewDidloadとかっていつ呼ばれんの?</h2>
<p>現時点の結論:ライフサイクルはわかったけどいつ何の処理を書けばいいのやら</p>
<p>例えば僕がやっているプロジェクトだと、ViewControllerでこういうのが結構呼ばれている。</p>
<pre><code class="language-swift">override func viewDidLoad() {
super.viewDidLoad()
//ごにょごにょ
}
</code></pre>
<p>上記から察するに、「親クラスのアクションを上書きしてるんだな」「親クラスのアクションも呼び出すんだな」ってことはわかるんだけど、じゃあこれいつ呼ばれんの、と。調べてみると<a href="http://qiita.com/mo_to_44/items/0ca628b4cc74c8c5599d">ライフサイクル</a>がちゃんとあって、呼び出し順があるようだ(当然か)。jQueryの<code>$(document).ready</code>みたいなもんね。</p>
<p>でもこのライフサイクルがあるのはいいけど、どこになんの処理を書くのがベストプラクティスなんですか?</p>
<h2 id="デフォルトで組み込まれているクラス群-関数群がわからない">デフォルトで組み込まれているクラス群、関数群がわからない</h2>
<p>現時点の結論:覚えるしか無い</p>
<p>Javaもそうなんだけど、「やたらと長い名前の標準関数」みたいなのが、Swiftにもあります。んで、そもそもどんなクラス、関数があるのかってのは、もう覚えるしかない。覚える以外の方法があったら教えて欲しい。</p>
<h2 id="observerにobservable">ObserverにObservable</h2>
<p>現時点の結論:僕にはまだ早かった</p>
<p>いわゆるReactiveプログラミングの概念。監視対象を決めて、それが変わったらあれもこれもそれも自動で変えてねっていうような感じの仕組み?かな?</p>
<p>わかってる人風に言うと、<strong>Reactiveを使えば簡単に状態管理を制御できます。</strong></p>
<p>Swiftうんぬんというよりも、Reactiveプログラミングに触れたことがない僕はまだまだ理解に及んでいません。</p>
<p>ううっ。</p>
<h2 id="おまけ-感想">おまけ:感想</h2>
<p>基本的にはViewを作るだけなのに、なんでこんなに知らない技術が出てくるんだ!</p>
<p>プロダクトの特性上、ネイティブでロジックをガリガリ書くってことはなく、APIのレスポンスで何をどう表示するかってのがメインになります。要はViewをいい感じにするだけ、処理はAPI。でもでもでもでもなんだか難しい!</p>
<p>そもそもコンパイラ型言語っぽい書き方にまだ慣れてない。</p>
<h2 id="おわりに">おわりに</h2>
<p>とりあえず今日からiOSエンジニアって名乗っておきますね(<em>´﹃`</em>)</p>
</description>
</item>
<item>
<title>ReactNativeの開発環境構築</title>
<link>https://catatsu.github.io/2016/09/27/react-native-tutorial</link>
<pubDate>Tue, 27 Sep 2016 23:35:00 +0900</pubDate>
<guid>https://catatsu.github.io/2016/09/27/react-native-tutorial</guid>
<description>
<p>どうも僕(<a href="https://github.com/matumotto">@matumotto</a>)です。
ReactNativeを久しぶりに覗いたらバージョンがめっちゃあがってたので、1からやりなおしていきます。</p>
<p>※OS X環境想定<br />
node: 4.2.2,
react: 15.3.2,
react-native: 0.34.0</p>
<hr />
<h2 id="reactnativeでhelloworldまでやってみる">ReactNativeでHelloWorldまでやってみる</h2>
<hr />
<h3 id="環境準備">環境準備</h3>
<ul>
<li>まずnode.jsとwatchmanをインストール</li>
</ul>
<pre><code class="language-bash">brew install node
brew install watchman
</code></pre>
<p>※watchmanは推奨。Facebook製のファイル監視ツール。</p>
<ul>
<li>npmでReactNativeのコマンドツールをインストール</li>
</ul>
<pre><code class="language-bash">npm install -g react-native-cli
</code></pre>
<hr />
<h3 id="プロジェクト作成-ビルド">プロジェクト作成〜ビルド</h3>
<ul>
<li>まずはプロジェクトを作成する</li>
</ul>
<pre><code class="language-bash">react-native init TestProject
</code></pre>
<ul>
<li>移動</li>
</ul>
<pre><code class="language-bash"> cd TestProject
</code></pre>
<ul>
<li>Android用にビルドして実行
※事前にエミュレータを立ち上げておいてください(もしくは実機接続)</li>
</ul>
<pre><code> #実機でやる場合のみ必須
adb reverse tcp:8081 tcp:8081
react-native run-android
</code></pre>
<p>※ iOSの場合は <code>run-ios</code> になります。</p>
<hr />
<h3 id="アプリが立ち上がった">アプリが立ち上がった!</h3>
<p>すこし文言を替えてみます!<br>
起動したままで、プロジェクト内にある&rdquo;index.android.js&rdquo;を変更してみましょう!</p>
<ul>
<li>文言を変更する</li>
</ul>
<pre><code class="language-bash"> sed -i '' 's/Welcome to React Native!/Hello React!/g' index.android.js
</code></pre>
<hr />
<h3 id="変更をアプリに反映">変更をアプリに反映</h3>
<p>アプリのメニューからReloadを選択するとテキストが更新されます。<br>
Hello React! やったね!</p>
<p>おしまい。</p>
<p>つぎは何かモノを作っていきます。</p>
</description>
</item>
<item>
<title>Rails5で爆速チャットアプリを作ってみた</title>
<link>https://catatsu.github.io/2016/09/27/rails5-chat-app</link>
<pubDate>Tue, 27 Sep 2016 23:09:27 +0900</pubDate>
<guid>https://catatsu.github.io/2016/09/27/rails5-chat-app</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>Rails5では、コアを構成するライブラリにAction Cableが追加されました。これを使うと、Web Socketを使ったリアルタイムなチャットアプリケーションが簡単に作れるらしい、、!?</p>
<p>※本記事は<a href="http://gihyo.jp/magazine/wdpress/archive/2016/vol93">WEB+DB PRESS Vol.93</a>の内容を一部改変したものになります。</p>
<h2 id="前準備">前準備</h2>
<p>まずはローカルにプロジェクト用のディレクトリを掘る。</p>
<pre><code class="language-bash">$ mkdir trailen
$ cd trailen
</code></pre>
<p>んでgit管理下にして、<code>README.md</code>を追加しておきます。</p>
<pre><code class="language-bash">$ git init
$ touch README.md
$ echo &quot;trailen&quot; &gt;&gt; README.md
</code></pre>
<p><code>.gitignore</code>は<code>gibo</code>で作るのがトレンドだと信じているので、giboを使って生成しようそうしよう。</p>
<pre><code class="language-bash">$ touch .gitignore
$ gibo OSX Ruby Rails Vagrant JetBrains &gt;&gt; .gitignore
</code></pre>
<h2 id="開発環境構築">開発環境構築</h2>
<p>僕は<a href="https://github.com/rails/rails-dev-box#whats-in-the-box">rails-dev-box</a>をベースにちょこっとカスタマイズして使いました。基本、cloneして来るだけで使えるのでここでは詳細は割愛。</p>
<p>後は簡単ですね。</p>
<pre><code class="language-bash">$ vagrant up
$ vagrant ssh
</code></pre>
<h2 id="railsのインストール">Railsのインストール</h2>
<p>グローバルに<code>rails</code>をインストールします。</p>
<pre><code class="language-bash">$ sudo gem install rails
$ rails -v
Rails 5.0.0.1
</code></pre>
<p>最新版キタ━━━━(゚∀゚)━━━━!!</p>
<h2 id="新規アプリの作成">新規アプリの作成</h2>
<p>テストなし、DBをmysqlで作成します。完全に僕の好みです。テストはRspec使いたいんでね(この記事では書きません)。</p>
<pre><code class="language-bash">$ rails new trailen -T -d mysql
</code></pre>
<p>DBは作ってくれないので、ここは手動で。</p>
<pre><code class="language-sql">mysql&gt; create database trailen_development;
Query OK, 1 row affected (0.00 sec)
</code></pre>
<p>ここまで来ればサーバー起動でデフォルト画面が表示されます(DBのパスワードとかはちゃんと設定してね)。rails5になってデフォルト画面変わっていることに少しの感動を覚える僕。</p>
<pre><code class="language-bash">$ rails s -b 0.0.0.0 -p 8888
</code></pre>
<h2 id="コントローラーの作成">コントローラーの作成</h2>
<p>長い前準備が終わり、ようやく本命のチャットアプリに着手します。ジェネレータでチャット表示用のコントローラーを作成します。</p>
<pre><code class="language-bash">$ ./bin/rails g controller rooms show
</code></pre>
<h2 id="モデルの作成">モデルの作成</h2>
<p>次は当然モデルですね。メッセージ保存用。</p>
<pre><code class="language-bash">$ ./bin/rails g model message content:text
$ ./bin/rails db:migrate
</code></pre>
<h2 id="ビューの作成">ビューの作成</h2>
<p>本体と、</p>
<pre><code class="language-haml">&lt;h1&gt;Chat room&lt;/h1&gt;
&lt;div id=&quot;messages&quot;&gt;
&lt;%= render @messages %&gt;
&lt;/div&gt;
</code></pre>
<p>パーシャル。</p>
<pre><code class="language-haml">&lt;div class=&quot;message&quot;&gt;
&lt;p&gt;&lt;%= message.content%&gt;&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<h2 id="チャネルの作成">チャネルの作成</h2>
<p>んで、これまたジェネレータでチャンネルを作っていきます。</p>
<pre><code class="language-bash">$ ./bin/rails g channel room speak
Running via Spring preloader in process 11323
create app/channels/room_channel.rb
identical app/assets/javascripts/cable.js
create app/assets/javascripts/channels/room.coffee
</code></pre>
<p><code>app/channels/room_channel.rb</code>と<code>app/assets/javascripts/channels/room.coffee</code>が作成されました(ナニコレ)。前者がサーバーサイドの処理、後者がフロント側の処理を担当するっぽい。</p>
<p>んで、ここまでくればWebSocketのコネクションが貼れるはずだったんだけど、ここでエラーが発生します。どうやら許可されていないホストらしい。わざわざ許可せないかんのか。</p>
<pre><code class="language-bash">Started GET &quot;/cable&quot; for 192.168.33.1 at 2016-09-27 12:40:45 +0000
Cannot render console from 192.168.33.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Started GET &quot;/cable/&quot; [WebSocket] for 192.168.33.1 at 2016-09-27 12:40:45 +0000
Request origin not allowed: http://192.168.33.33:8888
Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Finished &quot;/cable/&quot; [WebSocket] for 192.168.33.1 at 2016-09-27 12:40:45 +0000
</code></pre>
<p>先人によると、設定を追加してあげないといけないようで、</p>
<p>参考:<a href="http://morizyun.github.io/blog/action-cable-introduction-reading/">Action CableのREADMEを読んでみた!</a></p>
<p>僕の環境だと、以下の設定を<code>config/environments/development.rb</code>に追記してあげました。ここは人それぞれだと思うので、自信の環境に合うように設定してください。</p>
<pre><code class="language-ruby">config.action_cable.allowed_request_origins = ['http://localhost:8888']
</code></pre>
<p>追記して再起動したらOKになりました。うん、いいね順調順調。</p>
<pre><code class="language-bash">Finished &quot;/cable/&quot; [WebSocket] for 10.0.2.2 at 2016-09-27 12:43:43 +0000
Started GET &quot;/cable&quot; for 10.0.2.2 at 2016-09-27 12:43:43 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Started GET &quot;/cable/&quot; [WebSocket] for 10.0.2.2 at 2016-09-27 12:43:43 +0000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
RoomChannel is transmitting the subscription confirmation
</code></pre>
<p>あとはもうガーッとコーディングしていけば完成!DBに突っ込んだりイベント発火させたりわちゃわちゃわちゃわちゃ必要だもんね。ガーッと書きましょう。ガーッと。</p>
<p>で、この時点のコードを見たい方は<a href="https://github.com/nabeen/trailen/tree/chat-app-base">Github</a>に乗せていますので、そちらをご参照あれ(書く気力がなくなった)。
もちろん本番で運用する場合はもっと設定が必要ですが、とりあえずサクッと作れそうだなという感触は得られましたね。</p>
<h2 id="おわりに">おわりに</h2>
<p>今回はサクッと作るところまでで終わったけど、最終的にはあれやこれやしてメインのWEBアプリのサブ機能的な位置づけでひっそり存在するくらいにはしていきたいという願望。</p>
<p>ぼくはれいるずとおともだちになるんだ!</p>
</description>
</item>
<item>
<title>【イベントレポート】HackerTackleに参加してきた #hackt</title>
<link>https://catatsu.github.io/2016/09/26/hackertackle</link>
<pubDate>Mon, 26 Sep 2016 21:09:27 +0900</pubDate>
<guid>https://catatsu.github.io/2016/09/26/hackertackle</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>今更感が半端ないですが、先日開催された<a href="https://hackertackle.github.io/">HackerTackle</a>に参加してきたので、そのイベントレポートをば!もう一ヶ月近く前の話だから、半分以上忘れてしまったいるッ!</p>
<h2 id="セッション一覧">セッション一覧</h2>
<p><a href="https://hackertackle.github.io/">公式</a>をご参考あれ。</p>
<p>べ、別に書くのが面倒くさいわけじゃないからねっ!</p>
<h2 id="セッション詳細">セッション詳細</h2>
<p>では僕が聞いたセッションと感想をバババーっと見ていきましょうー。さっきも言ったけど、もう半分以上は記憶がない。やっぱりこういうのは頭が新鮮なうちに書くべきやなーと改めて思いますた。</p>
<h3 id="vr-ar-mr-ってなんだっけ-unityで作ってみる">VR?AR?MR?ってなんだっけ?Unityで作ってみる</h3>
<p>Vuforiaを使えばUnityで超簡単にAR出来ちゃうぜ!って話。</p>
<p>何を隠そう、僕はこのセッションに触発されてUnityでARを始めました!いいよーいいよーARいいよー。AR/VR/MRは、これまでとは一線を画すようなUXが提供できるので、今後もどんどん伸びていく分野だと個人的には思っています。</p>
<p>んで、今日時点で企業として本格的にAR/VR/MRに取り組んでいるところはまだ多くはない印象。ってことは、今から始めればアーリーアダプタになれますぜ、兄さん。</p>
<p>発表資料:<a href="http://kzonag.hatenablog.com/entry/2016/09/12/231614">Hacker Tackle 2016でVR/AR/MRの話をしてきました</a></p>
<h3 id="スマートフォン体験を一歩先へ-プログレッシブウェブアプリの作り方">スマートフォン体験を一歩先へ プログレッシブウェブアプリの作り方</h3>
<p>一言で言えば、「ネイティブアプリ要らなくね?」って話です。</p>
<p>プログレッシブウェブアプリで出来ることは以下。</p>
<ul>
<li>ホームアイコン</li>
<li>スプラッシュ画面</li>
<li>全画面</li>
<li>オフライン対応</li>
<li>Push通知(ただしAndroidに限る)</li>
</ul>
<p>僕「やべぇ、ネイティブで欲しい機能全部あるやん。」</p>
<p>ソシャゲなんかはネイティブでゴリゴリやらないといけない部分があったりするけど、ツール系だったりEC系だったり、WEBベースのものに関してはこれからこういう流れが加速していくかも?特に僕が担当しているサービスなんかまさにこれ(って言ってメンバーに話したら全く乗り気じゃなかった罠。</p>
<p>発表資料:<a href="https://docs.google.com/presentation/d/1wYHzG3uezJz2LBEWleVBpw8oYT_to7YowwP7PW2gkuI/pub?start=false&amp;loop=false&amp;delayms=3000&amp;slide=id.gf39949af9_0_0">プログレッシブウェブアプリの作り方</a></p>
<h3 id="今日からkotlinでandroid開発を始められるようになる話">今日からKotlinでAndroid開発を始められるようになる話</h3>
<p>KotlinならJavaより簡潔に記述できまっせーって話。</p>
<p>ただ悲しきかな、Javaをやったことが無い僕は、話の半分以上わかりませんでしたとさ。</p>
<p>確かにKotlinの方が短く直感的に書けることはわかる。でも、やっぱりこういうのは予備知識があった上で聞かないとって感じですね。予習しとけばよかったでござる。</p>
<p>発表資料:見つからない&hellip;けど、たろうさんの<a href="https://speakerdeck.com/ntaro">他の発表資料</a>を見つけた</p>
<h3 id="ハッカーの思考でqolを向上させよう">ハッカーの思考でQoLを向上させよう!</h3>
<p>すみません、マインスイーパーが高速でクリアされていく様しか覚えていませんww</p>
<p>あとはKinectセンサーでリアルタイムで3Dモデルに踊らせたりとか、あーこういうことも出来るのかーっていう部分が多かったです。ただ、このセッションを聞いてQoLが向上するかどうかは定かではありません。</p>
<p>Kinectセンサーは、ARアプリと組み合わせるといい感じになりそう!</p>
<p>発表資料:見つからない&hellip;</p>
<h3 id="俺が考えた最強のreactiveインターフェイス">俺が考えた最強のReactiveインターフェイス</h3>
<p>はい、Reactiveのりの字も知らない僕が通りますよっと。</p>
<p>内容自体は、「Reactiveをやってれば困るであろう」部分にフォーカスした内容でした。ただReactiveを知らない僕にとってはそのユースケースは全くピンとこず。でも若干Reactiveプログラミングってどんなもんなのかっていう知識は身につきました。</p>
<p>後で調べたんだけど、各言語でReactive向けのライブラリが結構あるみたいですね(RxJSとか)。そもそも僕、SwiftはHello World程度なので、他の言語で始めるのがベストプラクティスだと思った。最近はJS気になってるから、JSで始めてみよう!そうだそうしよう!</p>
<p>発表資料:見つからない&hellip;</p>
<h3 id="ブロックチェーンでフィンテックするビジネスに可能性を感じている皆様へ">ブロックチェーンでフィンテックするビジネスに可能性を感じている皆様へ</h3>
<p>ブロックチェーンの概念的な部分の話。</p>
<p>ぶっちゃけ全くわからんかったです。。。だいがくのせんせいのおはなしむずかしい。</p>
<p>発表資料:見つからない&hellip;</p>
<h2 id="おわりに">おわりに</h2>
<p>次のイベントは<a href="http://event.shoeisha.jp/devsumi/20160929/">デブサミ</a>です!行けるかどうかはわからんけども。もし知ってる人に会ったら大きい声でこんにちはって言いますね!</p>
</description>
</item>
<item>
<title>Catatsuの技術ブログ始めました!</title>
<link>https://catatsu.github.io/2016/09/23/initial-commit</link>
<pubDate>Fri, 23 Sep 2016 20:22:41 +0900</pubDate>
<guid>https://catatsu.github.io/2016/09/23/initial-commit</guid>
<description>
<p>どうも僕(<a href="https://github.com/nabeen">@nabeen</a>)です。</p>
<p>有志でやってる<a href="https://github.com/Catatsu">Catatsu</a>というプロジェクトがあるんですが、せっかくなのでってことでプロジェクト用のブログを立ち上げることにしました!エンジニア的にはアウトプットした方がいいしね??</p>
<h2 id="どこで書くかを決める">どこで書くかを決める</h2>
<p>金無し職無しスキル無しの僕らはそんなに高望みはしません。<strong>無料で使えるものを最大限に活用します。</strong>Tech Blogってこともあり、以下の点に重きを置いて選定しました。</p>
<ul>
<li>Markdownで書けること</li>
<li>一生涯無料で利用できること</li>
<li>ギークな感じのするもの ← これ重要</li>
</ul>
<p>もうここまでくれば決まったようなもの。Hugoを使って、Werckerでbuild、deployするのがベストプラクティスだと信じ、この構成で作りました。</p>
<h2 id="構成">構成</h2>
<ul>
<li><a href="https://github.com/Catatsu/catatsu.github.io">catatsu.github.io</a>:Github Pagesホスティング用</li>
<li><a href="https://github.com/Catatsu/catatsu.blog">catatsu.blog</a>:Hugo管理用</li>
</ul>
<p>同じリポジトリだとなんだか面倒くさそうな匂いがプンプンしたので、サクッと作れて単純明快ということでホスティング用リポジトリと管理用リポジトリで分けています。</p>
<h2 id="記事作成手順">記事作成手順</h2>
<p>デフォルトだとちょっと扱いづらいので、shellを叩いて記事を作成するようにしてあります。</p>
<pre><code>$ sh create.sh hello-world
</code></pre>
<p>参考:<a href="http://blog.sgr-ksmt.org/2016/02/05/hugo_new_post/">&lsquo;hugo new&rsquo;を便利にするスクリプト</a></p>
<p>あとは記事を書いてpushするだけで公開されます。楽ちん。</p>
<h2 id="werckerの設定">Werckerの設定</h2>
<p>Werckerでハマったので、そこだけ記載しておきます。全て公式が古いのが悪いです。僕は悪くありません。ハマった時間を返して(ry</p>
<p><code>wercker.yml</code>はこんな感じで設定しましょう。</p>
<pre><code class="language-yml">box: debian
build:
steps:
- arjen/[email protected]:
flags: --buildDrafts=false
theme: startbootstrap-clean-blog
deploy:
steps:
- install-packages:
packages: git ssh-client
- leipert/git-push:
gh_oauth: $GIT_TOKEN
basedir: public
repo: Catatsu/catatsu.github.io
branch: master
</code></pre>
<p>参考:<a href="https://blog.nabetama.com/post/2016-05-12-30/">Hugo, github pages, werckerで自動デプロイ 2016/05/12版</a></p>
<h2 id="おわりに">おわりに</h2>
<p>GithubPages × Hugo × Werckerでサクッとブログを立ち上げられるってのは非常に便利ですね。日本中全ての会社でサクッとツルッとブログを立ち上げるといいですよ。</p>
<p>さて、次は<a href="https://github.com/matumotto">@matumotto</a>がいい感じにデザインを整えてくれるはずなので、次回も乞うご期待!</p>
</description>
</item>
</channel>
</rss>