OmniAICreator/Qiita-1.07M huggingface dataset:
Monacaを業務で1年使っての感想

NIJIBOX Advent Calendar の19日目の記事です。

HTML5ハイブリッドアプリ開発環境である、Monacaを1年ほど業務で使っていたので
Monacaによるスマホアプリ開発に関する個人的な感想を書いてみたいと思います。

#個人的に良いと思うところ

##学習コストが低い
HTML+CSS+JavaScriptで作ったページがそのままアプリに使えます。
デバイス機能を利用する時だけ、専用APIを使いますが学習コストは低いです。
~~*(昔Titaniumという似たような技術をさわったときは独自SDKの学習で挫折しました)*~~

##単純なアプリならすぐ作れる
ハッカソンなどのイベントで簡単なプロトタイプを作るときに Monaca で開発しますが
2～3時間くらいでAndroid/iOS両方のビルド済みアプリまで完成しています。

#実案件で使って見ての感想

##WEB制作と同じチームでそのまま開発できる
アプリ専門のエンジニアはいませんが、WEB制作と同じチームで開発できています。
HTML+CSSはデザイナー、JavaScriptはエンジニアといった具合で問題なく分業できていると思います。

##アプリ機能の検証にデバッガーが超便利
ライブリロード機能でコードの修正がリアルタイムで反映されるので、確認作業が大変らくです。
スマホとPCをUSB接続すると Chrome Dev Tools が使えるため、デバッグ作業も効率的に行えました。

##クラウドIDEではチーム開発が困難
チームで開発する時に複数人で同じプロジェクトを編集すると、デグレが起こる可能性があったため
本番コードに直接さわれるクラウドIDEは利用せず、Monaca Localkit によるローカル開発を行っています。

##アプリによってはプレビュー機能が使えない
表示確認が簡単なWEBのプレビュー機能ですが、Cordova API やクロスドメインの Ajax リクエストを
使ったアプリだと動かなくなることがあったため、普段は Monaca デバッカーを使用していました。

##バージョン管理の連携機能がGitHubしかない
私のプロジェクトでは、BacklogのGitリポジトリを使っていたため連携ができませんでした。
しかたがないので、普段は Monaca Localkit を使ってローカル環境でGitでの管理と開発を行い
Monaca CLI を使ってクラウド先のプロジェクトと同期をとるようなことを行っています。

##バックエンドサービスのPUSH通知機能の回数が少ない
Goldプラン(月額5000円)でも月5万件、Platinumプラン(月額8000円)でも月10万件と少ないです。
ニフティmBaaSなら月200万回まで無料で使えるので、個人的には[こちら](http://mb.cloud.nifty.com/price.htm)がおすすめです。

##標準で提供されない機能もCordovaプラグインで拡張できる
サードパーティ製のプラグインがたくさん公開されているので、それらを使うことで
簡単に機能を拡張することができます。(Goldプラン以上)
JavaやObjectiveCの知識があれば、自作のプラグインも作れます。

##外部プラグインを使いはじめるとメンテナンスが大変になる
世の中そんな甘くはないです。サードパーティ製のプラグインを使っていると、
MonacaのCrodovaバージョンを上げた際に動かなくなったり、ビルド失敗で苦労しました。
安易に公式以外のプラグインに飛びつくと、保守作業で痛い目にあいます。

##ビルド作業とアプリの配布に手間がかかる
リリースビルドを複数人に配布してQA作業を行っていると、報告→修正→配布のサイクルが
頻発するため、通常の作業手順だとビルドと配布に多くの手間と作業時間が発生していましたが、
この問題については DeployGate と Jenkins を組み合わせたCI環境を構築したことで大幅改善されました。

[詳細はこちらの記事を見てください](http://qiita.com/nb-nishizawa/items/d765e1c194cb30418d15)

#総括
- :frowning2:　今後はCordova自体の理解も深める必要がある 
- :innocent:　Cordovaプラグインを作れるようになると自由度が広がる 
- :scream:　結局はネイティブAPIを使うため Java と ObjectiveC の学習は必要
TinyConsoleの使い方

TinyConsoleというデバイス上にコンソールを表示するライブラリを紹介します。

[https://github.com/Cosmo/TinyConsole](https://github.com/Cosmo/TinyConsole)

### TinyConsoleとは

TinyConsoleは、アプリ上にコンソールを表示するライブラリです。アプリを操作しながらログを確認することができます。

### 導入

CocoaPodsかCarthageで他のライブラリと同様に導入できます。

Carthage

```Carthage
github "Cosmo/TinyConsole"
```

CocoaPods

```CocoaPods
pod 'TinyConsole'
```

### 実装

RootViewControllerがTinyConsoleControllerになるようにします。

AppDelegateのdidFinishLaunchingWithOptionsで

```Swift
window = UIWindow(frame: UIScreen.main.bounds)

let rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()!

window?.rootViewController = TinyConsoleController(rootViewController: rootViewController)
window?.makeKeyAndVisible()
```

と実装します。

### ログの出力

ログの出力には以下のようなものがあります。

```Swift

// 通常のログ出力
TinyConsole.print("hoge")

// 色を指定したログ出力
TinyConsole.print("red hoge", color: UIColor.red)

// エラーメッセージ
TinyConsole.error("何かがおかしいです")

// マーカーを表示
TinyConsole.addMarker()

// コンソールクリア
TinyConsole.clear()
```

### コンソールの表示

TinyConsoleは幾つかのジェスチャーに対応しています。

#### コンソール表示

デバイスをシェイクします。シミュレーターで実行している場合は「cmd + ctrl + z」です。

#### マーカー表示

コンソール上を左から右にスワイプします。

#### ログ出力

コンソール上を2本指でタップします。

#### クリア・メール送信

コンソール上を3本指でタップすると、メールを送れたりコンソールをクリアしたりすることができます。
簡単にそりｗそりすぎてソリになるRubyスクリプト

こんにちは。今年、転職ドラフトでリブセンスに入社した@saxtondreyです。
この記事は[リブセンスアドベントカレンダー2枚目](http://qiita.com/advent-calendar/2016/livesense_2)の19日目です。

# そりすぎてソリになったｗ

```
　　ぽきたw 魔剤ンゴ！？ ありえん良さみが深いw
    二郎からのセイクで優勝せえへん？ そり！そりすぎてソリになったw
    や、漏れのモタクと化したことのNASA✋ 
    そりでわ、無限に練りをしまつ
    ぽやしみ〜
```
皆さんも初めてこのコピペを見た時からツイッターオタク文法に囚われてしまい、「○○過ぎる」などと聞くとすぐにソリになってしまっていませんか？私はなっています。
ex)
- マメすぎて→豆になったｗ
- 暑すぎて→アッツ島になったｗ

しかし、ネタ切れ著しいので、単語を入れたらコピペの「ソリ」の部分を生成する、簡単なスクリプトを書きました。

# 概要
とりあえず頭韻を踏めばいいと思うので、MeCabを使った形態素解析で、最初の単語の読みを調べます。
そして、そのよみをGoogle Suggest APIに突っ込み、検索候補の一位を取ってきます。
このとき、「ぽきたｗ」を入力すると、「ぽきたｗ　コピペ」などが返ってくることがありますが、今回は先頭の一単語の読みのみをAPIに投げるため、大体の場合、予測変換も一単語の身になると思われます。

# コード

``` ruby
require 'kconv'                                                             
require 'natto'                                                             
require 'google_suggest'                                                    
nm = Natto::MeCab.new                                                       
yomi = nm.parse(ARGV[0].match(/.+(?=過ぎて)/).to_s.toeuc).toutf8.split("\n").first.split(',').last.tr('ァ-ン','ぁ-ん')                                  
                                                                             
result = GoogleSuggest.suggest_for(yomi, region: 'jp')                      
puts "#{result.first}になったｗ"                    
```

nattoとgoogle_searchの２つのGemを入れています。Kconvで文字コードを変換しているのは、MeCabのインストール時に適当に文字コードを設定してしまったからか、入出力の文字コードを調整する必要が出てしまったからです。

# やってみた
``` bash
[saxtondrey@22:04:48 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb ソリ過ぎて
ソリオになったｗ
```
残念ながらソリになることはできませんでしたが、良さそうです。ほかの言葉でもいってみましょう。

``` bash
[saxtondrey@22:17:47 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb キモ過ぎて
着物になったｗ

[saxtondrey@22:17:56 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb あるある過ぎて
アルファードになったｗ

[saxtondrey@22:20:57 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb おかし過ぎて
お菓子になったｗ

[saxtondrey@22:21:03 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb 歩き過ぎて
アルキメデスになったｗ

[saxtondrey@22:22:19 ~/work/ruby/sorisugiter]$ bundle exec ruby app.rb 遠過ぎて
トートバッグになったｗ
```

結構ジワる感じの出力が得られました。
サジェストの結果を再度形態素解析して、「名詞のみ」「入力そのものとは違うもの」にすると、さらにいろいろなものになれそうです。
そりでわ、無限に練りをしまつw
AWS Redshiftの運用を楽にするWebコンソールを作った

<img width="1114" alt="Screen Shot 2016-12-17 at 22.45.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/5492/e42533e1-a485-68df-4511-5c3e93ad2d89.png">

## はじめに

[AWS Redshift](https://aws.amazon.com/jp/redshift/)は、PostgreSQL 8.0.2をベースに作られた列思考DBです。  
DWHとして使われることが多く、GCP BigQueryがクエリ課金であるのに対し、AWS Redshiftは時間課金です。そのためRedshiftは、大規模なデータソースに対して高頻度にSQLを実行する場合に、非常にコストを抑えることができる製品です。

一方で、非常に高負荷なSQLが実行されたときに、他のクエリの実行に影響が出たり、はたまたテーブルを定期的にVACUUMしたりと、ある程度のモニタリングや管理が必要になります。

それらのモニタリングを楽にする[Redshiftコンソール(Spectrometer)](https://github.com/taise/Spectrometer)を作ったので、紹介させていただきます。Redshift(赤方偏移)にちなんで、Spectrometer(分光器)という名前です。


## 機能

- Digest認証
    - Redshiftの接続ユーザ/パスワードで認証します  
      (スーパーユーザ権限が必要です)
- AWS ClowdWatchのメトリクス表示
    - CPUUtilization、Percentage Disk Space Usedなど
- Admin View

| Admin View       | 表示内容                                                                    |
|------------------|-----------------------------------------------------------------------------|
| Query Timelines  | 直近の長時間クエリをタイムライン&リスト表示(AWS コンソールのアレに近いもの) |
| Schema Tables    | スキーマとテーブルのリスト                                                  |
| Stats Queries    | クエリの実行回数グラフ                                                      |
| WLM Queue state  | WLMキューの状態 (STV_WLM_SERVICE_CLASS_STATE)                               |
| Inflight Queries | 実行中のクエリの表示 & キャンセルの実行                                     |
| Slow Queries     | スロークエリ一覧                                                            |
| Stats Off Tables | 統計情報の古いテーブルのリスト (VACUUM & ANALYZEの実行推奨リスト)           |
| Vacuum Results   | VACUUMの実行一覧                                                            |
| Cluster Restart  | Redshiftクラスタのリスタート履歴                                            |
| User list        | ユーザの名前と直近のクエリ実行回数のリスト表示                              |
| Error list       | エラー一覧(STL_ERROR)                                                       |
| Load Error list  | データロードエラー一覧(STL_LOAD_ERROR)                                      |

※ 2016年12月18時点のものです

## セットアップ

[こちらのREADME](https://github.com/taise/Spectrometer)を参考にセットアップしてください。
Redshiftに接続するスーパーユーザの情報をdatabase.ymlに、
AWS CloudWatchからメトリクスを取得するためにaws.ymlの設定が必要です。


### 蛇足

実は他にも[Redshift Console](https://github.com/EverythingMe/redshift_console)という名前そのままのものがありましたが、リポジトリ所有者のEverythingMeが解散してしまっていることと、1年以上メンテナンスされていない様子だったので1から作り直しました。


[Livesense Advent Calendar 2016](http://qiita.com/advent-calendar/2016/livesense_1)の19日目の記事でした。
ピクトグラムとアイコン

ピクトグラムとアイコンの違いがわかりますか。

Webやアプリデザインの現場では、たまに「ピクトアイコン」「ピクトグラムアイコン」という言葉を聞くことがあります。
まあ言わんとすることは分かるが、ピクトグラムとアイコンって別のもなんですけど。。と思いつつ、
自分でもはっきりこうだ！とは言えない所もありちょっと調べてみました。


#ピクトグラム
![pictgram.jpg](https://qiita-image-store.s3.amazonaws.com/0/73318/07864342-01d7-a8bc-64c5-53a94c77876a.jpeg)


空港や駅といった公共施設の案内標識などによく見られるものですね。
あらゆる人に、言葉で説明をしなくても情報が伝わるよう絵で表現したものです。


[ピクトグラム引用元](https://ja.wikipedia.org/wiki/%E3%83%94%E3%82%AF%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0)  [JIS企画ピクトグラム](http://www.ecomo.or.jp/barrierfree/pictogram/picto_top.html)

#アイコン
<img width="1440" alt="スクリーンショット 2016-12-19 1.10.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/73318/38d62a9f-a45d-1f5e-0955-832ce2160754.png">


アイコンとは、プログラムやファイルの種類をシンボル化した小さな絵記号。WindowsやMacのデスクトップにもいくつか小さな絵が並んでると思いますが、ユーザーが直感的に分かりやすく操作できるようにしている。これがアイコンです。
アイコンの場合はピクトグラムほど単純化しなくても成り立つことが多いので、装飾やカラフルなものなども含まれます。

アイコンには、2つの意味がありますね。
1つは、プログラムやファイルの種類、操作する対象を指定しやすく、見分けやすくするために小さな絵で表したもの。ファイルの内容やプログラムの機能などを絵文字にしてディスプレー上に表示した図形・記号。
２ 偶像。あこがれや崇拝の的となるもの。また、象徴的なもの。ファッションアイコンなど。

[アイコン引用元](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3)


#アイコンの簡略化
![20140325123732.png](https://qiita-image-store.s3.amazonaws.com/0/73318/c21d7515-17b5-bb4a-8cf5-7111dc8e6070.png)


フラットデザインやマテリアルデザイン等の普及によって、アイコンがより簡略化されていきました。
簡略化されていったことにより、ピクトグラムとアイコンが同じものとして認識されることが増え、「ピクトアイコン」「ピクトグラムアイコン」という、呼ばれ方になっていったのでしょう。
こういった簡略化したアイコンはピクトグラムと呼べるのかもしれませんが、あらゆる人に、言葉で説明をしなくても情報が伝わるよう絵で表現したもの。という観点でみれば必ずしも絵だけで、理解しにくいことが多いのも事実です。




[参考ページ](https://blog.codecamp.jp/pictogram#i-2) [参考ページ](http://chi-design-ooo.com/pictgram-icon-mark-symbol-distinction/)

#最後に
多くの場合、ピクトグラムやアイコンを見て文字を確認し、クリックし、無意識のうちにサイトやアプリ内へと入るようになっています。ピクトグラムは、限られた画面でいかに情報を伝えるかという点で相性がよく、ますますピクトグラムの活用シーンは増えていく中で、ピクトグラムとアイコンの違いを理解し、現場で生かしていきたいですね。
お金がなくてもクラウドで遊びたい！

こんにちは @totem です
この記事は[eeic advent calender その2](http://qiita.com/advent-calendar/2016/eeic2)の18日目の記事です
* * *
学生って何かとお金が無いですよね。
僕はバイトやインターンをほぼしてないので、特にお金が無くてヒイヒイしています。

そんな訳で今回は、お金の無い学生がお金を使わずクラウドを利用できるプログラム等を紹介していきます。
(~~本当はGCPのCLIでインスタンス立てて云々な入門記事を途中まで書いたのですが、なぜかスマフォにSMSが届かなくなって2段階認証出来なくなってGCPにログイン出来なくなって死にました~~)

# AWS
現在最大のクラウドサービスは[AWS](https://aws.amazon.com/jp/)です
Amazonが運営しているクラウドで、多彩なサービスが提供されています。
![aws.png](https://qiita-image-store.s3.amazonaws.com/0/147125/f11060d7-23c9-9a94-f127-007e3061d0fa.png)

### 無料利用枠
AWSは登録してから1年間は[無料利用枠](https://aws.amazon.com/jp/free/)が与えられます。
これはEC2のt2.microのインスタンスを1月に750時間動かせるので、インスタンスを立てて放置してても大丈夫です。

またAWS DynamoDBやAWS Lambda等は無期限の無料使用枠があるので、これらで遊んでいくという手もあります。(~~herokuでいいじゃん~~)

### 学生向けプログラム
AWSは学生向けプログラムの[AWS Educate](https://aws.amazon.com/jp/education/awseducate/)もやっています。
加盟校なら100ドル、非加盟校なら40ドルのクレジットがもらえます。(僕の大学は残念ながら40ドル)

### キャンペーン等
また時期によっては[Xmasキャンペーン](https://aws.amazon.com/jp/campaigns/2016-xmas/)など、加入時に25ドルのクレジットをもらえるキャンペーンを展開していることもあります。
Xmasだけではなく、春などにもそういったキャンペーンを展開しているので、是非そういった時期を見逃さずクレジットを貰っていきましょう(๑•̀ㅂ•́)و✧
また、AWSの勉強会に参加するとたまに25$のクーポンがもらえることがあります。
積極的に勉強会に行きましょう。

# Microsoft Azure
[Microsoft Azure](https://azure.microsoft.com/ja-jp/)はMicrosoftが運営しているクラウドです。
サービスもかなり豊富です。
Microsoftが運営ですがもちろんLinux鯖も動かせるのでご安心を笑
![aure.png](https://qiita-image-store.s3.amazonaws.com/0/147125/16619c6a-e173-fc64-9d44-c14482af6cbf.png)

[窓辺クラウディア](https://twitter.com/Claudia_Azure)というAzure公認キャラクターもいます(オタクポイント高い)
![claudia.jpg](https://qiita-image-store.s3.amazonaws.com/0/147125/558f8b64-f75c-bb9f-1b3d-3978e4e29841.jpeg)

### 無料利用枠
Azureももちろん無料利用枠があります。
登録してから1ヶ月、20500円分のクレジットが自由に使えます。
また[無期限利用枠](https://azure.microsoft.com/ja-jp/free/pricing-offers/)もあります。
ちょっとしたwebのホストなんかは自由に出来ます(~~github pagesでいいじゃん~~)

### 学生向けプログラム
Azureには学生向けプログラム[Microsoft Imagine Azure プラン](https://azure.microsoft.com/ja-jp/offers/ms-azr-0144p/)が存在します。
が、これはクレジットカード無しで登録できるというだけで、特に特典はありません。

### 開発者向けプログラム
Azure には開発者向けプログラム[Visual Studio Dev Essentials](https://my.visualstudio.com/Benefits)が存在します。
登録すると月に25$のAzureクレジットがもらえます。
ですがこれは、開発+テスト用のサブスクリプションなので、運用環境と判断されるとインスタンスが消されます💦
でもまあ、遊ぶ分には大丈夫かもしれません。

### キャンペーン等
僕は実際にもらったことは無いですが、勉強会に行くとAzureのクーポンが貰えることもあるらしいです

# Google Cloud Platform
クラウドはAWS、Azureが強いですが、その次点はおそらくGCPでしょう。
![gcp.png](https://qiita-image-store.s3.amazonaws.com/0/147125/67750dee-6556-5c32-284b-ff8701bb611e.png)

### 無料利用枠
[60日間の無料試用](https://cloud.google.com/free-trial/) があります
無料試用版では60日間で300$分遊べます

### 学生向けプログラム
2016/11/30 現在で、米国内限定で学生向けプログラムを提供しているようです

### キャンペーン等
僕はもらったことありませんが、GCP関連の勉強会に行くとクーポンが貰えることがあるらしい？です

# さくらのクラウド
上の3つのクラウドに比べて提供しているサービスの種類はやや劣りますが、IaaSとしては十分です
![sakura.png](https://qiita-image-store.s3.amazonaws.com/0/147125/d2b9620b-a4d8-f977-6ba6-e22b71b50b23.png)

### 無料利用枠
特に見当たりません

### 学生向けプログラム
無さそうです

### キャンペーン
さくらインターネットさんが関わっているセキュリティやインフラっぽい勉強会に参加するとたまに1年間有効な2万円分のクーポンをいただけることがあります。他のサービスよりクーポンの有効期限が長いのがポイントです。

# まとめ
学生枠や無料利用枠を活用しつつ、勉強会に参加してクーポンを貰っていきましょう
何か見落としているプログラムがあれば教えていただけるとありがたいです
明日は @nontan-rh さんの「グラフィックスAPIについて」 です
アルゴリズムとデータ構造(挿入ソート)


```ruby
arrs = [5, 2, 4, 6, 1, 3]
arr_size = arrs.size
arrs[1..arr_size].each_with_index do |val, index|
  p "start: #{arrs}"
  puts "val = #{val}"
  puts "index = #{index}"
  j = index
  while j >= 0 && arrs[j] > val
    arrs[j + 1] = arrs[j]
    j -= 1
  end
  arrs[j + 1] = val
  p "end: #{arrs}"
end
```

表示結果
% ruby insertion_sort.rb
"start: [5, 2, 4, 6, 1, 3]"
val = 2
index = 0
"end: [2, 5, 4, 6, 1, 3]"
"start: [2, 5, 4, 6, 1, 3]"
val = 4
index = 1
"end: [2, 4, 5, 6, 1, 3]"
"start: [2, 4, 5, 6, 1, 3]"
val = 6
index = 2
"end: [2, 4, 5, 6, 1, 3]"
"start: [2, 4, 5, 6, 1, 3]"
val = 1
index = 3
"end: [1, 2, 4, 5, 6, 3]"
"start: [1, 2, 4, 5, 6, 3]"
val = 3
index = 4
"end: [1, 2, 3, 4, 5, 6]"
cnt = 9

#計算量について

こんな配列だったら、cntは3回

```ruby
arrs = [1, 2, 3, 6, 5, 4]
```

こんな配列だったら、cntは15回

```ruby
arrs = [6, 5, 4, 3, 2, 1]
```

こんな配列だったら、cntは45回

```ruby
arrs = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
```

こうやって確認できる。

```ruby
arrs = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
arr_size = arrs.size
cnt1 = 0
cnt2 = 0
arrs[1..arr_size].each_with_index do |val, index|
  p "start: #{arrs}"
  puts "val = #{val}"
  puts "index = #{index}"
  j = index
  cnt1 +=1
  puts "cnt1 = #{cnt1}"
  while j >= 0 && arrs[j] > val
    arrs[j + 1] = arrs[j]
    j -= 1
    cnt2 +=1
  end
  arrs[j + 1] = val
  puts "cnt2 = #{cnt2}"
  p "end: #{arrs}"
end
```

N個の値をもつ配列に対して、最悪で(N^2 - N) / 2の計算量となる。
N^2 - N/2においてはN/2はN^2に比べて十分に小さいので無視する。
定数の1/2も無視して、計算量はN^2、Nの二乗に比例すると仮定できる。

例えば
10個の値をもつ配列に対して
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 45
(10^2 - 10) / 2 = 45の計算量となる。
一般化すると
1 + 2 + 3 + 4 + (N - 1)
(N^2 - N) / 2

cnt2をみるとわかる
1回目のループは1
2回目のループは3
3回目のループは6
4回目のループは10
5回目のループは15
6回目のループは21
7回目のループは28
8回目のループは36
9回目のループは45

####計算量は、最大値を見るので、O(N^2) のアルゴリズムとなります
隕石の衝突デモをGLSLに投稿してみたｗ

[Web3Dもくもく会(WebGL,WebVR,Unityなどなど)](https://web3dj.connpass.com/event/39687/)で、GLSLでレイマーチングのデモを書いたので、投稿してみる。

投稿先、[GLSLSoundBox](http://glslsandbox.com/e#37390.0)に投稿しましたｗ

## ソースの説明
### 隕石の衝突（球体の関数）
```c++
float sphere(vec3 p){
	return length(p - vec3(1.0 - 1.0 * time, 6.0 - 6.0 * time, 3.0 - 3.0 * time)) - 1.0;
}
```
座標(1.0,6.0,3.0)から等速直線運動で書いている。

### 衝突後の盛り上が方
```c++
float g = 2.0 * sin(useTime) * exp(-(p.x * p.x)/(30.0*sin(useTime*0.1)) -(p.z * p.z)/(30.0*sin(useTime*0.1)));
```

[ガウス関数](https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E9%96%A2%E6%95%B0)を使用

### 地表のデコボコのつけ方。
```c++
float rnd(vec2 n) {
	return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);
}

float noise(vec2 p){
	vec2 v = floor(p);
	vec2 u = fract(p);
	u = u * u * (3.0 - 2.0 * u);
	float r = mix(
		mix(rnd(v), rnd(v + vec2(1.0, 0.0)), u.x),
		mix(rnd(v + vec2(0.0, 1.0)), rnd(v + vec2(1.0, 1.0)), u.x),
		u.y
	);
	return r * r;
}

float snoise(vec2 p){
	float n = 0.0;
	for(float i = 0.0; i < 4.0; ++i){
		float v = pow(2.0, 2.0 + i);
		float w = pow(2.0, -1.0 - i);
		n += noise(p * v) * w;
	}
	return n;
}
```

で、ノイズをつける。
参考:[[連載 GLSL 物語] チカラが欲しいか……（最終話）](http://qiita.com/doxas/items/9664d7f79d9caf9518b5)

![inseki.PNG](https://qiita-image-store.s3.amazonaws.com/0/102634/7ad5d17e-a2c6-b3fd-617e-867840d8225a.png)
React Nativeのpackagerが真っ白になったらwatchmanを更新しよう

久しぶりにReactNativeで新しいプロジェクト作ってみたらサンプルが起動すらしなかったのでメモです。

# 環境
```bash
$ react-native --version
react-native-cli: 2.0.1
react-native: 0.39.2
```

# 症状

- `react-native init SampleProject` が `sudo`をつけないと最後まで実行されない
- その後Xcodeから実行しても `react native libc++abi.dylib: terminating with uncaught exception of type NSException` というエラーがXcode上で出力されてすぐ落ちてしまう
- `react-native run-ios`を実行した後、React Packagerが`~/path/to/project/node_modules/react-native/packager ~`のまま停止する

# watchman古かったです。
新しくしましょう。

```bash
rm -rf /usr/local/var/run/watchman/ && brew uninstall watchman && brew install watchman
```

参照
https://github.com/facebook/react-native/issues/2797#issuecomment-253696005
PHPUnit DBテスト インサートで引っかかったこと

仕事で、PHPUnitでDBテストしていたときに、テストデータのインサートでエラーが発生したので備忘録。
テストデータは、指定したテーブルのデータを既存DBから吸い出し、XML形式にする自作ツールで生成。

#エラーその1
```
Opening and ending tag mismatch: br line 行数 and value
```

この原因はタグが `<p>` や `<br>` がデータに含まれていたことによるもの。
タグを消去したら、このエラーは消えた。
どうやら、フロントのコーディングがしやすいように入ってたらしい…。

#エラーその2
```
EntityRef: expecting ';'
```

この原因はデータが文章になっており、その中に「&置換文字&」という文字が含まれていることによるもの。
このデータをDBにデータとして持つのは違うような気がする。
置換文字を空白に置換し、エラー回避。

# 参考サイト
[PHPUnit マニュアル – 第8章 データベースのテスト](https://phpunit.de/manual/current/ja/database.html)
Unity5.5をインストールしている環境でXCodeビルドでプラグインのコンパチビリティーでエラーが出る場合の対処法

Unity5.5へ移行後、XCodeビルドで

```
xcodebuild[92008:20196698] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin' not present in DVTPlugInCompatibilityUUIDs
```

とエラーが出た場合、Unity4XC.xcpluginへのシンボリックリンクが古い可能性があります。

```shell-session
> ls -l ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin
/Users/xxx/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin -> /Applications/Unity/Unity.app/Contents/PlaybackEngines/iOSSupport/Tools/OSX/Unity4XC.xcplugin
```

と出た場合はリンク先が変更されているので、

```shell-session
rm ~Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin
ln -s  /Applications/Unity/PlaybackEngines/iOSSupport/Tools/OSX/Unity4XC.xcplugin ~Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin
```

とすれば直るハズです。

その他のケースについては、
http://qiita.com/usagimaru/items/59745e26584a00ddfba3
の『Xcode の更新でプラグインが使えなくなる事もあるので注意』を参照ください。
quick time player で画面キャプチャしたやつを gif にする

qiitaとかにgifを埋め込みたいときにつかう。
ただしエンコードが時間かかるので意外とさっくり終わらないことがある。
さっさとやりたい人はricecapのほうがいいかもしれないけど、紹介する方法のほうが出力の質が良いらしい(？)

適当にquick time playerで撮って以下の手順をするとgifが排出される

ffmpegとImageMagickを使うので、入っていないならまずは以下をする

```sh
$ brew update
$ brew install ffmpeg
$ brew install ImageMagick
```

作業ディレクトリ内に動画ファイルがあるとして、

```sh
$ mkdir frames
$ ffmpeg -i input.mov -r 50 frames/%03d.png
$ convert -delay 2 -layers optimize frames/*.png output.gif
$ rm -rf frames
```

で完成

参考：http://genjiapp.com/blog/2014/06/04/generating-better-animated-gif-from-mov-recorded-by-quicktime-player.html
heroku login でエラー（解決）

こんばんは。
最近、Node.js を勉強している者です。

Node.js で作成したサンプルプログラムを Heroku にデプロイしようと思い、Heroku CLI で heroku login を実行してみました。

しかし、何度やっても TLS timeout や certificate signed by unknown authority が出力されてログインに失敗します。

メールアドレスに記号を含んでいるのが悪いのかと思い、Heroku の登録メールアドレスを変更してみたり、Mac の OS アップデートを試すも一向に解決せず、半ばあきらめかけた矢先、ふと思いついたのがセキュリティソフトのカスペルスキー。

カスペルスキーのアプリケーションを終了したらあっけなくログイン成功しました・・・。

私の環境ではアンチウイルスソフトウェアが原因でしたが、その他に色々な原因が考えられるようで、Github にも issue があります。
https://github.com/heroku/legacy-cli/issues/2018
２つのカンバンを同時に使う ビジネスサイドとの関心の違い

## 関心事の違いによる問題

SIのように作りたい機能の方針が決まっているときには良いのですが、Web系のシステムで、その機能を作るべきかどうかがより揺らぎやすい時、何人ものアイデアが集まってきてしまう時にカンバンに全てをのせてしまうと制御できなくなってしまいました。

ビジネスとシステムのやりたいことの粒度が違い、カンバン上のチケットが中途半端になって、状況把握が難しくなってしまったので、この方法を試そうとしているところです。

## システムサイド、エンジニアの関心事

システム側としては仕様の複雑さの整理やアーキテクチャ選定、検証作業などスケジュールが読みづらいリスクの高い作業があります。また、これはビジネス側から見ればほとんど進捗が見えません。
また、作業中の開発タスクの粒度も違います。実装の他にも沢山の作業があるのです。
進めること以外に、機能ではない非機能な部分がたくさんあります。中長期的な観点や協調作業のための時間も必要です。

技術的負債の解消やリファクタリング、設計やドキュメント、レビューなどです。
レビューが止まってしまえば短期的なスピードは上がっても中長期的なクオリティが保てないのは当然です。
そしてレビュー時間を正しく掌握出来なければ、他の作業の進捗が押してしまうのは当然です。

エンジニアとしてはチケットをできるだけ細かくして、やることを明確にすることで実装などのシステム化に集中することが出来ます。

## ビジネスサイドの関心事


ビジネス側の興味関心は「スケジュール」と「提供させる機能」がどこまでのことが実現できるかということです。

ビジネス側はやりたいことは沢山出てきます。プロダクトバックログに追加されます。
スプリントバックログに落とし込まれます。
方針が決定された上で落とし込まれたものであれば良いのですが、仕様の粒度が大抵の場合は大きいです。
なぜなら、必要な機能の幾つかが揃ってから初めて価値を生むからです。

では、ビジネスサイドはプロダクトバックログとスプリントバックログのストーリーだけ見ればよいのでしょうか？
それはカンバンを全体に表示している意味はあるのでしょうか？
じゃあ、カンバン全体を見れば良いのでしょうか？ カラム追加を確認するのにビジネスサイドの人間の時間を使って良いのでしょうか？


## 現状で挑戦しようとしていること

この項目については、まだ自分の中でも答えを見つけれていません。
今チャレンジしようとしているのが、ビジネス側と意識を合わせるためのカンバンと開発チームが使うカンバンを分けて、全く違う粒度と違うコミュニケーションをするためのチケットの作り方を定義して回すようにしました。

ビジネス側がビジネスのカンバンにストーリーを書き、優先順を決めるのは変わりません。
システム側はそのカンバンにはビジネスに共有したい内容と大きな負債対応などの作業などの要望を書いたりします。
このときにはビジネスサイドに伝わる言葉で書くということです。
alter tableやzabbix設定とかは書いたらダメです。
あえて書くなら、データベース構造の変更とシステム監視設定の追加です。


システムサイドはビジネスサイドのカンバンを受けて、各一人がメインにつけれるくらいのストーリーなどに落とし込んだり、システムカンバンでは親子関係が生まれくらいチケットを細かく定義し直します。
要件や機能のリスク、アーキテクチャ方針などをできるだけ落とし込むことが出来ることで、ビジネスとシステムのやりたいことの粒度が中途半端になって、状況把握が難しくなってしまったルールを変えました。


管理コストが上がってしまうことと、ビジネスサイドもしっかりと運用してもらうための意識付けが必要なため、難易度が高いかもしれませんが、良い結果が出せれば、また違う場所で報告ができればと思います。
verdaccioでprivateなnpmリポジトリを作成

プライベートnpmリポジトリサーバである[verdaccio](https://github.com/verdaccio/verdaccio)の導入方法

# verdaccioとは

同じくプライベートnpmリポジトリサーバである[Sinopia](https://github.com/rlidwka/sinopia)からforkされたものです。
Sinopiaは2015年6月からアップデートされていなかったため、最近（2016年12月時点）でもアップデートされているverdaccioを導入しました。

sinopia, verdaccioの利点として以下のようなことが挙げられます。

* 簡単に導入できる(CouchDBとかが不要)
* クライアント側の対応が少ない

# verdaccioの使いどころ

> * 企業内のネットワーク等、開発者全員がInternetに接続可能ではないケースで, Proxyとして利用.
> * 開発において, 作成したNode.jsのパッケージをチーム内で共有したいが, Internetには晒したくないケースで, Private Repositoryとして利用.

引用: [SinopiaでPrivateなnpmレポジトリを作成する方法](http://qiita.com/Quramy/items/2d019474bdcf692f7c1a)

# verdaccioの導入方法

基本的にSinopiaと同じです。

### npmでインストール

```bash
$ npm install -g verdaccio
$ verdaccio
```

### dockerでインストール

```bash
$ docker pull verdaccio/verdaccio
$ docker run -it --rm --name verdaccio -p 4873:4873
```

### Proxyの設定

verdaccioを動作させているサーバがProxy環境下にある場合、npmレジストリに接続するために設定ファイルにProxy設定を行う必要があります。

```yaml:config.yml
http_proxy: http://{host}:{port}/
https_proxy: http://{host}:{port}/
no_proxy: localhost, 127.0.0.1
```

## 

# クライアントの設定

構築したverdaccioをクライアントから利用します。

### ユーザの登録

```bash
$ npm adduser --registry {verdaccioのURL}
```

### リポジトリの設定

構築したverdaccioを利用するために${home}/.npmrcに設定を行います。

```ini:~/.npmrc
registry={verdaccioのURL}
```

### 確認方法

```bash
$ npm info npm
```

# 参考
[SinopiaでPrivateなnpmレポジトリを作成する方法](http://qiita.com/Quramy/items/2d019474bdcf692f7c1a)
Go shinyでGenpeiGo(源平碁==リバーシ)のGUIを作成する(shiny導入編)

# きっかけ #
今年の夏、C言語でプログラミングの学習を始めた頃になんとなく作ったコレ。

![genpeoGo_cui.gif](https://qiita-image-store.s3.amazonaws.com/0/143910/17576d4a-8ca4-fcab-0d5c-4c0773779bdc.gif)
ターミナルでコンピュータプレイヤと対戦できるリバーシ(登録商標のため控えるけどオ◯ロのこと)をC言語で書いた。
自分でアルゴリズムを紙に書いたりして、配列の中身を出力させたりしながらバグをとって組み上げていくのがとても楽しかったことを覚えている。

というわけで、引き続きこのネタで楽しいことをしようと思い、Goでこのプログラムを書き直すことにした。
そして、どうせならGUIでマウスでポチポチと楽しめるような、一番最初にやりたかった仕様を実現させるようにしようと思う。

そこで、今回はまず本体の移植の前に、GoのGUIをどんなライブラリで実装するかを検討し、軽いプロトタイピングをしてみたので、紹介していく。

# Go x GUI #
Goのコマンドラインアプリの実装でのパワフルさは、色々なweb上のtipsや書籍、また自身の業務の中で実感している。
逆に、GUIはまだまだこれからというような意見が多く、これぞというGUIのフレームワークは確立されていないように思える。
現在Web上で見かける開発が進んでいるGoのGUIライブラリは以下のようなものがある。
* Go-qml
* go-gtk
* WALK
* shiny
参考:[Go最後の秘宝「GUI」を探しに行く](http://qiita.com/shibukawa/items/cd8d122dfeb41e1608d1)

いくつかのものを試食してみた結果、今回はshinyを使用して開発してみることにした。
今回は記事執筆時点で最新の`golang/exp`のリビジョン`03962049e143533dbf9467cffb8a52a15595b718`
を使用している。
# shiny #
shinyはGoオフィシャルのサブプロジェクトとして、2015年の7月にプロポーザルが出され、https://godoc.org/golang.org/x/exp 以下で開発が進められているGUIフレームワークである。

あくまでもサブプロジェクトであるため(READMEによると"experimental and deprecated  packages"とある)、`go get`でインストールする。
`go get golang.org/x/exp/shiny/...`

そしてまずはサンプルコードを...、今回shinyを選んだのはクロスプラットフォームなことと、なにより最大の理由はこれである。

`go run main.go board.go xy.go`
![goban_test.gif](https://qiita-image-store.s3.amazonaws.com/0/143910/b4cf1842-de4d-2b81-0d82-4e67fcc156c6.gif)
https://github.com/golang/exp/tree/master/shiny/example/goban

なんとGoだけに碁のGUIサンプルが付属しているのだ。
これはこのままリバーシに転用できそうだということで、今回はこのサンプルコードをモディファイする形でGUIを作成してみることとする。

#　Go(碁)からgenpeiGo(源平碁)へ #
 "Goなんだったら碁を作れよ"という声が聞こえてきそうなので、今回のプロジェクトはリバーシの別称源平碁(genpeiGo)とした。

そしてとりあえずできあがったのがこちら。

`go run main.go board.go xy.go`
![genpeiGo_test.gif](https://qiita-image-store.s3.amazonaws.com/0/143910/40e82641-4efd-c01d-54dc-c57735076fb4.gif)
※Gopherの原著作者はRenée French氏

なんとかリバーシのGUIとして使えそうだ。

# コードのモディファイ #
それでは、サンプルのソースコードに加えた変更を、要点を絞って解説する。
今回はライブラリの良さを上手く活用できているであろうサンプルソースへ、最小限の変更を加えて実装することを目標とした。

まず、上記サンプルの`goban`では碁のスタイルなので、升目は8x8となっているが、石の置き場は9x9となっているため、8x8にしてやる必要がある。
`board.go`
![diff5.png](https://qiita-image-store.s3.amazonaws.com/0/143910/9daf0a15-73e1-1cb3-d041-d1b845ea24d6.png)
`main.go`
![diff4.png](https://qiita-image-store.s3.amazonaws.com/0/143910/c1567550-91b3-e1ff-4085-d291503bbc59.png)
この二点のみの変更で置き場の配列とクリックイベントのフィールドを8x8に変更できた。

そして、コメントによると盤上のラインは、配列一つ一つのフィールドの中心に描画することで碁の盤を表現していると書いてあるので以下の記述を変更した。

`board.go`
![diff6.png](https://qiita-image-store.s3.amazonaws.com/0/143910/838e939c-15c9-42ae-703c-f719f6596c04.png)
これにより、配列のフィールドの枠にに沿ったラインの描画に変更することができた。

3ファイル全体でも500行程で記述されており、シンプルな書き方となっているので、とても扱いやすく、これから不必要な記述を減らしていけばかなりコンパクトなGUIソースにできそうだ。

#　まとめ　#
* まだまだ開発中のshinyだが、色々と試作してみるには使えるパッケージではないだろうか
* 引き続きGUIのコードを煮詰めながら、冒頭のCソースのGoへの移植とGUIとの紐付けを行っていく
AIプロジェクト3日目：文章中に現れた単語に対して知識をひけらかす機能

とりあえず、持てる知識をどんどん出していってほしい。
それがAIに学習させる醍醐味だと思うのです。

とりあえず、プロトタイプとして、

- 文章を区切り、sentenceにする
- sentenceに対して、語彙リスト=voがの中の単語=キーが含まれているか確認する
- 含まれていた単語に登録している知識=値からランダムに抽出
- ランダムに抽出した知識をsentenceに対するコメントとして当てはめる。

こんなものを作りたいと思う。

# 文章を区切り、sentenceにする
これは前回かそこらでやったけど、結局単語を細かく切っていくと、おかしなことになってしまうので一文ずつに切っていくのが良いとの結論に至った。

```py
content='''
長い文章・・・
'''
split_list1= '。|\n'
sentence_list=re.split(split_list1,content)
```

こんな感じで、元の文章を「改行」と「。」くらいで区切って、リストを作ってやる。


# 語彙リストから参照する

```py
vo={'単語1':['知識1','知識2'],'単語2':['知識1','知識2']}
keys=list(vo.keys())
comment_list={}  #空の辞書＝{sentence:['知識','知識'],sentence2:['知識']}
for sentence in sentence_list:
    comment_list.update({sentence:[]}) #辞書に追加していく
    for key in keys:#それぞれのsentenceに対して
        if key in sentence:#語彙=キーが含まれているとき
            try:#語彙の知識=値をランダムに出して登録
                comment_list[sentence].append(random.choice(vo[key]))
            except:#語彙はあるけど知識がないときはスルー
                pass
        else:#語彙がないときもスルー
            pass
print(comment_list)
```

こんなんで、多分行けるはず。

試しに、
sentence_list=['JVCケンウッドは、JVCブランドより、新シリーズ「SOLIDEGE（ソリデージ）」のハイレゾ対応ヘッドホンとして「HA-SD7」を発表']

で、試してみる。一応、語彙と知識はそれなりに貯めつつある。

## 結果

```
{'JVCケンウッドは、JVCブランドより、新シリーズ「SOLIDEGE（ソリデージ）」のハイレゾ対応ヘッドホンとして「HA-SD7」を発表': ['神奈川県横浜市神奈川区（旧日本ビクター本社所在地）に本社を置く、映像機器・音響機器・無線機器メーカー', '音楽用CD(CD-DA)を超える音質の音楽データの総称']}
```

おー、ちゃんとでてくれた。
ちなみに、ヒットした語彙は、「JVC」と、「ハイレゾ」かな。
これで、ひっちゃかめっちゃか自動で語彙を登録していき、ヒトの手でこつこつ知識を蓄えてあげていけば、、、成長するAIが作れるかもしれない・・・


今日はここまで。

次は、多分かなり進んでいると思う。
論理削除フラグと有効フラグ

仕事で使っているDBテーブルに、「論理削除フラグ」「有効フラグ」というカラムが併設されていることが話題に上がったのでメモ。

# 基本の運用
1. データの通常時　　　　　　->　有効フラグ = 1, 論理削除フラグ = 0
2. データが無効になった場合　->　有効フラグ = 0, 論理削除フラグ = 0
3. データを消したい場合　　　->　有効フラグ = 0, 論理削除フラグ = 1


# 問題点
オペミスなどで、基本の運用の 3. が、有効フラグ = **1**, 論理削除フラグ = 1 の場合があるかもしれない。(実際ありそうな気がして怖い)
そうすると下記のSQLに引っかからなくなる。

```SQL:SQL
SELECT *
FROM table
WHERE enabled = 0 AND deleted = 1
```

あとは、カラムが増えるし、レコードが減ることもなくも永久的に増えていく。
それに、SQLに必ず条件を書かなければいけない。

# 解決案
1. 論理削除フラグと有効フラグを状態を保存するカラムに纏める。0:有効、1:無効、3:削除 のような
2. 削除するレコードは削除テーブルに移動する
3. いっそ「戻す必要があるかもしれない」という概念は無いとして、物理削除してしまう
AEのエクスプレッションでカラーピッカーで遊ぶ。

　AEのエクスプレッションはスクリプトと同様 **ExtendScript** を使用していますが、スクリプトの機能を制限しつつエクスプレッションとして扱いやすいようにカスタマイズされたものとなっています。
　例えば、割りと使い道のある ```propertyDepth``` のような属性が **Property** オブジェクトから削除されてるかと思えば、 ```$.getenv('GOPATH')``` のように環境変数を取得するものが残ってたりします。

　それ以外に面白いのがカラーピッカーです。スクリプトで色指定する際に重宝する ```$.colorPicker()``` ですが、エクスプレッションでも使用できます。とりあえず以下のようなエクスプレッションを組んでみました（出来るだけ短いコンポ、レイヤーで試してください）。


```js:ColorPicker.exp
function rgbToHex( rgb ) {
  rgb = clamp( rgb, [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ] );
  var r = ~~( 255 * rgb[ 0 ] ) << 16,
    g = ~~( 255 * rgb[ 1 ] ) << 8,
    b = ~~( 255 * rgb[ 2 ] );
  return r | g | b;
}

function hexToRgb( hex ) {
  var r = ( hex >> 16 ) & 255,
    g = ( hex >> 8 ) & 255,
    b = hex & 255;
  return [ r / 255, g / 255, b / 255, 1 ];
}

var hex = $.colorPicker( rgbToHex( value ) );

if( hex ) {
  hexToRgb( hex );
} else {
  [ 0, 0, 0, 0 ];
}
```

<blockquote class="twitter-video" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/6CEKqWHeGp">pic.twitter.com/6CEKqWHeGp</a></p>&mdash; かれをばな＠3日目R-18b (@kareobana) <a href="https://twitter.com/kareobana/status/810484392636403713">2016年12月18日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

　入力してエクスプレッションを有効化すると、エクスプレッションが評価されカラーピッカーが呼ばれます。最初に、適用したレイヤーの有効フレームの分だけ評価されるので閉じても閉じても何度も出てきます。したがって下手に長いレイヤーで実行すると痛い目にあいます。

　プロジェクト読み込み時に一回だけ評価されるだけなら、今日は運勢的にこの色を背景にするか、みたいな使い方も可能なわけですが、何せやたらと再評価されてそのたびにカラーピッカーが出て来るので今のところちょっと使いみちが思いつかないです。

おわり。
炎の型工房 火の型 15日目 : ラケットに触れるとボールが跳ね返るようにしよう!!：Pongを作ろう --6--

[<ruby>炎<rt>ほのお</rt></ruby>の<ruby>型<rt>かた</rt></ruby><ruby>工房 <rt>こうぼう</rt></ruby>ScratchとDartでゲームプログラム<ruby>入門<rt>にゅうもん</rt></ruby> Advent Calendar 2016](http://qiita.com/advent-calendar/2016/firefirestyle-studio)
の<ruby>記事<rt>きじ</rt></ruby>です



<img width="500" alt="magic.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/9a61b53f-85ab-6f82-177a-787c4d80d2a7.png">


ケーキを<ruby>食<rt>た</rt></ruby>べながら

<ruby>理解<rt>りかい</rt></ruby>、<ruby>分解<rt>ぶんかい</rt></ruby>、<ruby>再構築<rt>さいこうちく</rt></ruby>
　
..
　
どんな<ruby>味<rt>あじ</rt></ruby>がするのかな

<ruby>材料<rt>ざいりょう</rt></ruby>は<ruby>何<rt>なに</rt></ruby>かな

どんな<ruby>香<rt>かおり</rt></ruby>がするのかな

<ruby>誰<rt>だれ</rt></ruby>が<ruby>作<rt>つく</rt></ruby>ったのかな

どこで<ruby>作<rt>つく</rt></ruby>られたのかな

...



# ラケットに<ruby>触<rt>ふ</rt></ruby>れるとボールが<ruby>跳<rt>は</rt></ruby>ね<ruby>返<rt>かえ</rt></ruby>るようにする

## コードを<ruby>追加<rt>ついか</rt></ruby>する
<img width="500" alt="v001.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/5c7e2590-db03-f86c-17c1-ab846f5668e6.png">


## <ruby>確認<rt>かくにん</rt></ruby>する

https://scratch.mit.edu/projects/136840391/

<img width="500" alt="v002.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/19f74059-08c7-4da0-ed3c-743a334014f3.png">

1. <ruby>緑<rt>みどり</rt></ruby>の<ruby>旗<rt>はた</rt></ruby>をクリックすると、ボールか<ruby>動<rt>うご</rt></ruby>き<ruby>出<rt>だ</rt></ruby>すこと
2. <ruby>黄色<rt>きいろ</rt></ruby>のラケットに<ruby>当<rt>あた</rt></ruby>ると、ボールが<ruby>跳<rt>は</rt></ruby>ね<ruby>返<rt>は</rt></ruby>ること
3. <ruby>紫色<rt>むらさきいろ</rt></ruby>のラケットに<ruby>当<rt>あた</rt></ruby>ると、ボールが<ruby>跳<rt>は</rt></ruby>ね<ruby>返<rt>は</rt></ruby>ること

　　
　　
　　
　　

　
# <ruby>得点<rt>とくてん</rt></ruby>が<ruby>入<rt>はい</rt></ruby>るようにする

## コードを<ruby>追加<rt>ついか</rt></ruby>する
<img width="500" alt="v003.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/eaa80a6c-b671-5e29-c053-e8b32b03c68a.png">


## <ruby>確認<rt>かくにん</rt></ruby>する
https://scratch.mit.edu/projects/136840911/

<img width="500" alt="v004.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/175b341c-d722-fb5f-e1b7-90279aa97b69.png">

1. <ruby>緑<rt>みどり</rt></ruby>の<ruby>旗<rt>はた</rt></ruby>をクリックすると、ボールか<ruby>動<rt>うご</rt></ruby>き<ruby>出<rt>だ</rt></ruby>すこと
2. <ruby>赤色<rt>あかいろ</rt></ruby>の<ruby>壁<rt>かべ</rt></ruby>に<ruby>当<rt>あた</rt></ruby>ると、RScoreに<ruby>得点<rt>とくてん</rt></ruby>が<ruby>入<rt>はい</rt></ruby>ること
3. <ruby>緑色<rt>みどりいろ</rt></ruby>の<ruby>壁<rt>かべ</rt></ruby>に<ruby>当<rt>あた</rt></ruby>ると、LScoreに<ruby>得点<rt>とくてん</rt></ruby>が<ruby>入<rt>はい</rt></ruby>ること


## チュートリアルはここまで、

Pongのチュートリアルはここまで、
もっと、<ruby>色々<rt>いろいろ</rt></ruby>と<ruby>機能追加<rt>きのうついか</rt></ruby>してゲームを<ruby><rt>かんせい</rt></ruby>させよう

アイデアをドンドン<ruby>詰<rt>つ</rt></ruby>め<ruby>込<rt>こ</rt></ruby>もう。

#### みほん
サーブのルールを<ruby>変<rt>か</rt></ruby>えたりしてみました。
https://scratch.mit.edu/projects/136841605


　
## Thanks
<div>
ここまで、<ruby>読<rt>よ</rt></ruby>んでくれてありがとう!!
</div>

<div>
では、<ruby>次回<rt>じかい</rt><ruby>、また
<ruby>会<rt>あ</rt></ruby>えることを、
<ruby>楽<rt>たの</rt></ruby>しみにしています。
</div>

そして、<ruby>次回<rt>じかい</rt></ruby>は、<ruby>色々<rt>いろいろ</rt></ruby>、<ruby>小<rt>こ</rt></ruby>ネタを<ruby>紹介<rt>しょうかい</rt></ruby>していきます
<div>
ではでは
</div>
[Heroku] 環境変数を別のアプリへ移行する方法

これは、[Heroku Advent Calendar 2016](http://qiita.com/advent-calendar/2016/heroku) 18日目の小ネタになります。

やたらめったらとかんたんな小ネタになっている風ですが、これには、２つの理由があります。

1. 大掃除が立て込んでいる
2. Macbook買ってみたので、色々試している

ということで、主に 2.の理由により、Macbook で`Kobito`使って、blogを投稿するの巻です。

# 環境変数を別のアプリでも再利用したい

仕事柄でしょうか、同じような Herokuサイトを何個も作ることがありまして。その際に、環境変数もほとんど同じようなものをコピペすることがあります。

しかし、通常ですと、Heroku Dashboard から一つ一つ手打ちで、コピペを繰り返す方法が主かと考えられます。一つや二つくらいなら諦めもしますが、そのときは10前後の環境変数がありまして、かつやたらめったら長い奇天烈な文字列がほとんどなので、コピペせざるを得ないですし、まちがえそうです。せめて、一通りの環境変数を作った上で、必要な部分のみ変更する方法が取りたい。

ということで、まるまる、別のアプリで使用している環境変数を、他のアプリでも設定する方法です。

## heroku コマンドを使いましょう

`heroku config` コマンドを利用すると、環境変数の内容を表示したり、設定したりできます。なんだこれでかんたんじゃんと見せかけておきながら、通常の表示方法ですと、再利用できない形式で表示されます。

そこで利用するのは`-s`オプションです。shell で利用できるように、`環境変数=変数の内容`という形式で 1行ずつ吐き出してくれます。さて、複数行のときはどうするかと。コピペするにしても、複数行だとうまくいかなそうですが、1行で実はうまくいってしまいます。

```bash:heroku
$ heroku config:set `heroku config -s -a APP01` -a APP02
```

- `APP01` Heroku アプリケーションで定義された環境変数のすべてを、`APP02` Heroku アプリケーションへ設定

`heroku config:set` コマンドは、入力として標準入力を容認してくれないものの、実行結果はそのまま受け入れてくれる包容力があります。そこで、`heroku config -s` の結果をそのまま引数とすることで、すべての環境変数を移行することができます。

心ゆくまでお試しください。
（備忘録）Chrome拡張機能で「Cannot read property 'setBadgeText' of undefined」が出た時の対処法


Chromeの拡張機能が作りたくて、いろいろ触っていたのですが、１個詰まってしまったことが解決できたので一応残しておきます。

setBadgeTextは、拡張機能で表示されるここのバッジテキスト。
![スクリーンショット 2016-12-18 22.30.05.png](https://qiita-image-store.s3.amazonaws.com/0/153088/c47c7236-97fc-5836-e9fb-93eaa6e93396.png "スクリーンショット 2016-12-18 22.30.05.png")

表示の仕方はとても簡単で、「manifest.json」に「background.js」へのアクセスを追加して、jsファイルを作成するだけ。

``` manifest.json
"background": {
     "scripts": ["background.js"]
}
```

``` background.js
chrome.browserAction.setBadgeText({"text":"100"}) // 100個表示
```
![スクリーンショット 2016-12-18 22.33.00.png](https://qiita-image-store.s3.amazonaws.com/0/153088/7d6c6c16-b076-8838-ced5-6771e1b0d279.png "スクリーンショット 2016-12-18 22.33.00.png")

だが実行しても、エラー
そんなものは定義されていないと。。。


![スクリーンショット 2016-12-18 22.33.42.png](https://qiita-image-store.s3.amazonaws.com/0/153088/7ab4a156-1629-9900-ed59-ff702d3cee3c.png "スクリーンショット 2016-12-18 22.33.42.png")

原因は「background.js」は、「browser_action」ありきで、「manifest.json」に下のようなコードを入れないといけなかった。

``` manifest.json
"browser_action": {
    "default_title": "hoge hoge hoge hoge"
}
```
【Fuse】Javascriptをデバッグしよう

基本的なエラーの確認はFuse Monitorを使うことができます。Monitorはローカル実行時のみ、`(command or Ctrl) + m`で開くことができます。これで、実行時にどの部分でエラーが発生したかがわかります。コンパイルエラーに関しては、コマンドラインやエディターから実行すれば、どこでエラーが発生しているかを確認できると思います。

さて、今回はFuseでのJavascriptのもう少し細かいデバッグの仕方を説明します。大きく分けて、iOSをターゲットに実行する場合、それ以外をターゲットにする場合でデバッグ方法が違うので、分けて説明します。

###それ以外のほう

それ以外のほうには、V8エンジンで実行されるものを含んでいます。具体的には、Android、DotNet（ローカルプレビューを含む）、CMake、Microsoft Visual C++が含まれます。Fuseは基本的にV8エンジンでJSを実行します。

`-DDEBUG_V8`オプションをつけてビルドされたアプリケーションはport:5858のソケットの接続を購読します。V8デバッガープロトコルを備えたデバッガーは基本的に動作するはずですが、Mac OSとWindowsで使用できる、Visual Studio Codeを推奨しています。

###codeのセットアップ

まずは[こちら](https://code.visualstudio.com/)からcodeをダウンロードします。終わったら、デバイスのポートをFuse用に設定します。`uno adb`コマンドを使うことで、設定することができます。

```
uno adb forward tcp:5858 tcp:5858
```

終わったら、

```
uno adb forward --remove-all
```
などを実行して、転送を削除するのも忘れないようにしましょう。デバッグの手順は下記です。

1. プロジェクトフォルダをcodeで開きます。
2. サイドバーからデバッグを選択して、上の再生マークをクリックして、実行環境は`node.js`を選択します。
3. 再生マークの横にあるドロップダウンから、`プロセスに添付`を選択します。

これで準備完了です。

###デバッグを始める

今度は自分のコードの方にデバッグを追加して、Javascriptにブレークポイントを設定してみます。
ブレークポイントを設定するには、ブレークしたいポイントに`debugger;`を書きます。もちろん関数の中に書けば、実行されるたびブレークされます。

```sample.ux
<JavaScript>

var _test = "hoge";

debugger;

module.exports = {
	test: _test
}
</JavaScript>
```

設定し終わったら、`-DDEBUG_V8`オプションをつけて、実行します。
アプリが立ち上がったら、VSCodeのデバッグ開始ボタンをクリックします。あとはブレイクポイントを設定した場所まで操作すれば、設定した箇所でアプリが停止し、左側に変数などが一覧されると思います。

#####デバッグ出来ないとき
自分の場合、`debugger`を書いてもちゃんと動作しませんでした。`debugger`と同時に、同じポイントにVSCodeのブレークポイント（行番号の左側のやつ）を設定すると動作しました。また、`preview`実行時も動作しなかったので、`build`して確認しました。

```
fuse build -t=Android -r -DDEBUG_V8
```

windowsではファイヤーウォールが接続を要求してくる場合は許可してください。

[こちら](https://www.youtube.com/watch?v=GloEpBr2lK0&feature=youtu.be)からビデオチュートリアルを見ることもできます。

###iOS

iOSでのデバッグはiOS 8.0以降のみに対応しています。設定アプリからsafariの項目を開いて、webインスペクターをONにしておいてください。また、実行するPC側のsafariの開発メニューも表示しておきます。iOS側の準備はこれだけです。

準備ができたら、デバイスプレビューを実行します。アプリが立ち上がったら、PC側のsafariを開いて、開発メニューから実行しているデバイスを選択し`JSContext`を選択します。

そうすると、Webインスペクタからデバッグすることができます。デバッガのタブを選んでブレークポイントを設定したりすることができます。

iOS版も[こちら](https://www.youtube.com/watch?v=EDjymiMxHSw&feature=youtu.be)からビデオチュートリアルを見ることができます。
リモートのElixirアプリをobserverでモニタリングする

# 概要

observerでリモートサーバー上のElixirアプリを監視したい。

<img width="490" alt="remote-observer.png" src="https://qiita-image-store.s3.amazonaws.com/0/28174/fe81cbdb-8957-552d-4b43-707a268088fe.png">

# 使用するツール/機能

## observer

GUIのサーバーモニタリングツールです。iexから、```:observer.start```とすることで起動します。erlで起動する時は、```erl -run observer```で。
利用するにはErlangのコンパイル時にws(wxWidgetsのErlangバインディング)を有効にしないと利用できないのでご注意ください。

## epmd

Erlang Port Mapper Daemon。
分散Erlang環境における名前解決を行います、使用ポートはデフォルトで4369です。起動時のオプションとして、inet_dist_listen_min、inet_dist_listen_maxを指定する事で設定できます。

# 方法

## step.0

リモートサーバー上でcookieを指定しアプリを起動

```
iex --name rmote@127.0.0.1 --cookie my-cookie --erl "-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001" -S mix
```

## step.1

ローカルとリモートサーバーをsshで4369ポートをポートフォワーディングする

```
ssh -N -L 9001:localhost:9001 -L 4369:localhost:4369 root@remotehost
```

## step.2

epmdがローカルとリモートサーバーのErlangVMをクラスタリングする。

## step.3

observerをローカルで立ち上げると、(クラスタリングされた)リモートサーバー上のErlangVMをモニタリングすることができます。

```
erl -name monitor@127.0.0.1 -setcookie my-cookie -run observer
```
CodeIgniterのライセンス問題あれからどうなったか

この記事は[CodeIgniter Advent Calendar 2016](http://qiita.com/advent-calendar/2016/code_igniter)の13日目です。

CodeIgniterでは、一時期ライセンス問題がありました。ライセンス問題の影響として、CodeIgniterの利用を避ける（将来的な懸念として）、FuelPHP（CodeIgniterに関わっていた人たちが開発したフレームワーク）やLaravel、CakePHPなどの他のPHP Webアプリケーションフレームワークへ移行した国内の企業や国内のエンジニアが多く発生する、CodeIgniterユーザー会の活動低下など、様々な問題を生じさせることとなりました。

現在リリースされているCodeIgniter3.xではライセンス問題は解消されていますが、本エントリでは過去にあったライセンス問題について解説をしていきたいと思います。

CodeIgniterはライセンス問題が継続していると誤解されている方がいれば（まだまだいるように感じますので）、そのような方々の誤解を解くきっかけになればと考えています。また、CodeIgniterに関心のある方、これからCodeIgniterの利用を検討している方の参考になれば幸いです。
# CodeIgniterのライセンス問題とは

CodeIgniterのライセンス問題は、現在（本エントリの執筆時点）より5年前の2011年10月に遡ります。
大きくは次のとおりとなります。

* CodeIgniter 3.xのライセンスがOSL-3.0,AFL-3.0になる
* CodeIgniter 1.x, 2.xのライセンスであるCodeIgniter LicenseはGPL非互換である

それぞれの内容ついては、以下で解説をしていきます。

## CodeIgniter 3.xのライセンスがOSL-3.0,AFL-3.0になる

2011/10/20に開催された、ExpressionEngine & CodeIgniter Conference 2011 (EECI 2011) において、当時のCodeIgniterのオーナーであった米EllisLab CEOのLeslie Camacho氏の発表内容が発端となります。「CodeIgniter licensed with Open Source  License v3(CodeIgniterのライセンスがOpen Software License3.0へ変更される)」という発表が行われました。

また、2011/10/21にGithubへCommitされたCodeIgniterのリポジトリにおいては、「systemディレクトリ以下はOSL-3.0,applicationディレクトリ以下はAFL-3.0にする」旨の記載が追加されました。
https://github.com/bcit-ci/CodeIgniter/commit/f4a4bd8fac188ebc9cda822ffc811c218fd92b45

以上により、CodeIgniter3.x（当時）ではOSL-3.0,AFL-3.0の２つのライセンスが採用されるという方向になりました。

詳細は、[@Kenji_s](https://twitter.com/kenji_s)さんおよび[@NEKOGET](https://twitter.com/nekoget)さんの以下の記事にわかりやすくまとめられていますので、そちらを参照いただければと思います。

「CodeIgniter のライセンス変更問題のタイムライン」
http://d.hatena.ne.jp/Kenji_s/20111118/1321603906

「CodeIgniterのライセンスについて」
http://www.slideshare.net/NEKOGET/code-igniter-talk-02

## CodeIgniter 1.x, 2.xのライセンスであるCodeIgniter LicenseはGPL非互換である

2011/11/1にEllisLabよりCodeIgniter License（CodeIgniter1.x, CodeIgniter2.xに採用されているライセンス）はGPLの非互換のライセンスである旨の発表が行われました。この発表は、従来までBSDライクな（GPL互換の）ライセンスと考えて利用していたユーザーに混乱と不信感をもたらしました。

GPL or not to GPL
https://expressionengine.com/blog/gpl-or-not-to-gpl

# ライセンス問題はその後どうなったか

現在リリースされているCodeIgniter3.xのライセンスはMITライセンスです。MITライセンスはGPL系ライセンスと互換性があります。

前述の通りCodeIgniter3.xはOSL-3.0とAFL-3.0のデュアルライセンスになる予定でしたが、CodeIgniterのオーナーがElislabからBCIT(ブリティッシュコロンビア工科大学)へ移管された際に、MITライセンスに変更されることが決まりました。

CodeIgniter 3のライセンスがMITライセンスに変更され、いわゆるライセンス問題は完全に解消
http://blog.a-way-out.net/blog/2014/10/31/codeigniter-3-license-mit/

以上により、GPLのプロダクトやライブラリ等と組み合わせて利用することも問題なく行え、また日本国内でも知名度のあるライセンスであることから、CodeIgniter3.xにおいては、ライセンス問題は解消されたといえます。

なお、Legacy VersionであったCodeIgniter1.xおよび2.xはCodeIgniter Licenseの(GPL系ライセンスと非互換）のままです。新規プロダクトでこれらのバージョンを利用するケースは極めて稀であると思いますが、GPL非互換という点に注意が必要です。とはいえ、GPL非互換であること以外に大きな問題はありませんので、その点注意して利用すれば問題ないといえます。
[*OnsenUI*] OnsenUIを使ってみた経緯・感想など

# はじめに
[Onsen UI Advent Calendar 2016](http://qiita.com/advent-calendar/2016/onsenui)の18日目です。

仕事でOnsenUIを使っているので、使うに至った経緯と感想とかをまとめたいと思います。

# スマホアプリを作ることに
とあるシステムをスマートフォンアプリ化するという案件に携わることになりました。
ハイブリッドアプリでの開発にしようというのは結構初期段階で決まっていました。
業務中に勉強するような時間は取れないし、スマホのアプリは作ったこと無いけど、WebアプリはみんなやってるのでHTML/CSS/JSくらいならどうにか・・・と。

* Cordova
* AngularJS

・・・あとはUI系をどうするか、ということになりました。

# ionic or OnsenUI
あまりマイナーすぎるものを選ぶと、困ったときに情報が見つからなくて困りそうなので、
ある程度知名度がありそうなものを調べたところ、`ionic`か`OnsenUI`かなということに。
ざっと調べた感じだと、`ionic`の方が知名度は高いのかなぁという感じがしました。

フレームワークとか選定している当時は`Monaca`も使っており、
場合によっては導入してもいいねみたいな話もしていて、Monacaを使ってサンプルアプリを作ったりしていました。
結局Monacaは費用とか色々な面で導入することはなかったのですが、
`OnsenUI`はMonaca使用時に親しみが湧いたというのもあり、導入してみたいなと思いました。

日本語ドキュメントがあったのもよかったです。
いざという時、日本語で質問したら答えてくれそう・・・という淡い期待も持ちつつ。

# OnsenUI 1 or 2
アプリのプロトタイプとかを作っているときはOnsenUI1を使っていました。
OnsenUI2はrc版だったと思います。
OnsenUI1はiOS風の見た目をしていて、作るアプリ自体はAndroid用に決まっていたので、
AndroidなのにiOS風なのもチグハグしているので２が使いたいなと思いつつ、
rc版だし、正式リリースは近いのだろうけどいつになるかわからないしどうしようかなと思っていました。
結局、OnsenUI2のUIの方がいいなと思ってプロトタイプじゃない方の実際作るアプリではrc版を使うことにしました。
その当時はOnsenUI2はドキュメントも英語で、ネット上に情報もそう多くはありませんでしたが、
まぁなんとかなるやろ・・・と。

OnsenUI2は既に正式リリースされていますが、作ったアプリは未だrc版のままとなっています。
正式版入れたいなぁといつも思っているのですが、業務アプリだし現状特に不具合も無いのでなかなかフレームワークのバージョンを上げるというのも上げざるを得ない理由がないためできていません。

# おわりに
OnsenUIを使うことで、スマホっぽい動きが簡単に実現でき、
見た目もAndroidならAndroidのマテリアルデザイン風になって、チーム内にデザインが得意という人も少ないですがいい感じになったなぁという印象です。
OnsenUIを使ってなかったら統一感のない、とっちらかったすごい見た目になっていただろうなと思います。
OnsenUI2も日本語ドキュメントが少しずつ充実してきてうれしいです。
OnsenUIについて詳しく語れるところも現状そう無いのですが、
現在アプリの追加機能を作ったりしていて、今後もOnsenUIのお世話になる予定ですのでもっと勉強していきたいと思います。
今後のOnsenUIの進化に期待しつつ、終わりにしたいと思います。
3年目Webアプリエンジニアの応用情報受験記

# 3年目Webエンジニアの応用情報受験記
## 応用情報技術者試験受かりました

都内在住、社会人歴・プログラマ歴３年目です。
主にWebアプリケーションを作成しております。

2016年度秋期で応用情報処理技術者試験に無事しました。
受験は今回3回目。
基本的に勉強は苦手な人なので、けっこう苦労しました。
自分の振り返りとしてアウトプットします。

## なぜ、受けたの？
Webアプリケーションを作る上で必要な基礎知識を身につけるためです。
昨年の春期に基本情報は社会人になってから取得できました。
しかし、基本情報に受かった時にあまり知識が身についていなかったのがもやもやして、一段階上の応用情報処理技術者試験を取得しようと思い立ちました。

## 勉強期間
7月-10月
(上記の通り基本情報は取得済み＆応用情報3回目なので一通りの知識はありました）

* 平日
朝の1時間
昼休み1時間
(定時で帰れた日は+2時間)

* 予定のない休日
9:00-21:00まで
小休憩あり(途中でネットサーフィンなど有り・・)
まっ！多くても1日、約7時間くらいかな・・・

* 予定のある休日
まぁボチボチ・・・
電車の中とか早めに集合場所近くのカフェで勉強しました。

トータルはよくわかりません。
一応期間と平日、休日の時間の割合は上記の通りです。

## 勉強方法
### 過去問を解く
ひたすら解く。
間違えた問題はノートにまとめる。
**自分の間違えた部分対策ノート**を作成しました。

SSLの仕組みやOSI基本参照モデルは図として自分で書いてみました。

間違えた単語は調べました。
単語によっては、対策本に載ってる説明だけでは説明不足感が否めず、その用語の背景や仕組みまで調べました。

### アプリ
有料アプリを入れました。
問題量もそこそこあり、スペースがない電車の中や、仕事で疲れてヤル気が起きない昼休みなどもサクッとできるので平日に重宝しました。
間違った問題の蓄積などもしてくれるので、ありがたいですね。

### Webページ
[応用情報技術者試験ドットコム](http://www.ap-siken.com/)
大いに利用させていただきました。
過去問道場とても好きです。
ありがとうございます。

## 勉強する上で工夫したこと
### 誰かに説明することを意識した
基本情報を取った時に知識の定着率があまりないなと感じました。
それはアウトプットが足りなかったんだろうなと思っています。
だからこそ、仮想として会社の後輩に説明することをイメージして、自分の言葉で話せるように練習しました。

### 専門書を購入した
苦手な分野はあります。
苦手分野をハッキリさせ、対策として専門書を購入してやりました。
私はネットワーク部分が特に苦手だったので専門書を買いました。
苦手な分野だからこそ基礎をおろそかにせず勉強することが大事だと思います。

### ライバル
運が良いことに一緒に頑張れるライバルがいました。
ライバルがいると闘争心が燃え上がりますね。

## これから
さて、どうしましょうか・・・
データベーススペシャリストとって、[平匡さん](http://www.tbs.co.jp/NIGEHAJI_tbs/)を目指すのも良いかなと思います。

ただ、ここは一回技術者試験から離れて言語(Ruby、PHP)の勉強に当てていこうと思います。

また、応用情報で得た知識は時を経ることで忘れて行きそうなので、次回技術者試験を受ける人を会社などで見つけて、積極的に講師役をかって出たいと思います。
引き続き積極的に学ぶ姿勢を大切にします。
WACATE2016 冬 技術以外のレポート

# 概要

若手じゃないけど [WACATE](http://wacate.jp/2016/winter/gaiyo.html "WACATE2016 冬")にはじめて参加してきました。
とても楽しく、また、とてもとても濃い二日間でした。

ひとまず速報的なレポートとして、技術以外のことを無駄に長々とレポートしてみました。
なぜにこういう投稿かというと、今回わたしが参加を検討するにあたって、事前に様子を知りたいなぁと思ったからです。
合宿形式って様子が判らないとけっこう不安だし、自分でもまた参加するときの備忘録として書いておきたいと思います。

# 会場

## アクセス

京急線三浦海岸駅 徒歩約 5分の、「マホロバ・マインズ三浦」というところが会場です。
事前にGoogleマップで確認したわたしは、駅前に京急ストアがあるからそれを目印にしようと思ってました。
京急ストアは駅の両側にあるので、あやうく線路の反対側で彷徨うところでした。
改札を出たら、左手側が正解です。

駅前の開けた場所に出ると、正面の小高くなったあたりに、大きなマンションのような建物が見えます。
それがマホロバ・マインズ三浦の本館です。
とりあえず、そびえ立ってる建物を目指して歩いて、本館に到着できました。
別館は本館入り口の前を通り過ぎて、さらに奥の方です。

## 広すぎる

セッション会場は別館なのですが、宿泊や食事は本館です。
けっこう行ったり来たりしたり、本館の中でも何度も移動するのですが、とにかく広大な建物なのです。
一人だと迷うこと間違いないので、先輩参加者の方にずっとくっついて移動していました。

## ナゾの段差

本館でも別館でも、廊下や扉の前後などに階段一段分くらいの段差が多くありました。
注意してないとコケます。
運営委員や先輩参加者の方々も心得ていらっしゃるのか、移動時に後ろに「段差あります」と注意を回してくれることが良くありました。

# セッション会場

## エレベーター混む

10階にセッション会場があったのですが、エレベーターは13人乗りが 2台です。
60名近い参加者がいっせいに移動するので、心と時間に余裕を持って利用する必要がありますね。

## 眺め良好

会場からは海が、会場前の廊下からは富士山が良く見えました。
ま、基本的にセッション中はカーテン締め切って籠るわけですが。
休憩時間とかにベランダに出て、海を眺めていた方がかなりいました。

# 宿泊部屋

## 広くてキレイ

合宿施設にありがちな和室 1部屋に布団をみっちり敷くとかじゃなく、広々とした 2LDKでした。
クローゼットもたっぷりあるし、掃除も行き届いていました。

## ベッドとお布団

部屋によると思うのですが、今回わたしが泊まった部屋は、寝室にベッドが2つあり、和室に布団も敷けました。
同室の方との相談になると思いますが、好きな方に寝れます。

## 部屋にお風呂とキッチン

どうもマンションをホテルに改装した模様で、とっても立派なキッチンがあります。
部屋のキッチンはまったく利用する余地がありませんでしたが。
あと、お風呂も広めのユニットバスがあります。
大浴場が苦手な方でも大丈夫ですね。

# 大浴場

## 温泉

ちょっと、しょっぱい温泉です。
露天風呂もあります。
内風呂も露天風呂も広々してて、特に冬は露天風呂サイコーですね。

## けっこう混んでる

とにかく大きなホテルで、WACATEの参加者だけでなく多くの個人・団体が泊まってます。
わたしはディナーセッション前の 18時前後の時間に行ったのですが、大浴場はけっこう混み合ってました。

## 2回くらい行きたかったけど

ディナーセッション後は分科会がありますし（任意参加ですが）、隙間時間にはポジションペーパーを読み込みたいし。
重ねて温泉に浸かってくるような余裕は何回行っても作れそうにないです。


# 服装

## 昼間のセッション

スーツの方はいないです（念のため）。
わたしの体感では暑い寒いということもなく、上着などでの調整が必要なことはありませんでした。

## ディナーセッション

ここから部屋着で過ごしている方がほとんどでした。
トレーナーの類を持ってけば良かったー。
浴衣姿の方も多数です。

## 浴衣とか

ホテル提供の浴衣は、きれいめの紫色で可愛かったです。
羽織はもちろんですが、足袋型の靴下がついてました！
冬は裸足にスリッパだと寒いので、ありがたいお心遣いだと思いました（着なかったケド）。

# 食事

## 美味しい

合宿所のお食事的なおざなりなものは一切なく、昼夜朝昼の4食いずれも大変美味しかったです。
なんてコスパの良いイベントなんだ。＜そこ?

## お酒

ディナーセッションはお酒が出ます。
ノンアルコールの方もいらっしゃいますが、がんがん飲んでる方もまた多い。
なんてコスパの良いイベントなんだ。＜そこなの??

## カレーだけではない

WACATEといえばカレーだそうですが、カレーしか出ないわけではありません。
というか、カレーは1回しか出ません。
場所柄、海鮮系がとても豊富です。
お魚が苦手だと、ちょっとつまらないかもしれないですね。
わたしは大好きなので堪能しました。


# 最後に

セッションの感想なども一緒に書こうと思ってはいたのですが、技術以外だけで長くなりすぎたので、まずはここだけ投稿します。
最後になりましたが、登壇された方々、実行委員の方々、親切にしてくださった先輩参加者の方々、一緒に楽しんでくれた同じ初参加の方々、すべてに感謝の気持ちでいっぱいです。
本当にありがとうございました!!
ConohaのVPSに対してpingがtimeoutしてしまう場合の対処

#環境
Conohaの1GBプランを借りた。
OS: CentOS Linux release 7.3.1611 (Core)

#症状
・sshが繋がらない
　　ただしportは22番ではない。/etc/ssh/sshd_configの設定も問題ないし、firewalldでsshに使用するポートは開けてある。

・外部からのpingに応答しない
　　以下のようにICMPリクエストもDROPされてしまう。

```
$ ping XXX.XXX.XXX.XXX
PING XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5
^C
--- XXX.XXX.XXX.XXX ping statistics ---
7 packets transmitted, 0 packets received, 100.0% packet loss
```

#原因
Conohaで最初にサーバーを立ち上げる時の初期設定において、接続許可ポートにSSH(22)しかチェックを入れていなかったため。

<img width="1268" alt="スクリーンショット 2016-12-18 21.15.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/37881/d750e81a-fee1-2944-4363-2969db0bcb41.png">

私の勘違いで、SSH(22)にチェックを入れてVPSを作成したらfirewalldの設定がそのようになるものだと思っていました。しかしそうではなくてConohaのコントロールパネルの"接続許可ポート"で設定されたインフラ側のふるいによってもまた、ポートの制限が行われているようです。

#解決
Conohaコントロールパネルの接続許可ポートで、全てに許可にチェックを入れる。

AWSのVPSを借りた時にもiptableが効かなくて悩んだこんな機能でしたが、Conohaにもいつの間についてたとは・・・。
COBOLerを脱出して、Web業界に行こう

#下請けCOBOLerに未来はあるのか

###結論から言うと、一定の需要はあります。

半世紀以上積み上げてきたCOBOL資産は、誰かが運用保守しなくてはいけません。
さらに団塊エンジニアの大量離職も関係して、現在は若年者のCOBOLerが不足しています。
そのため、今からCOBOLのスキルを身につけるのも決して無駄な選択ではありません。

下記の記事のように、COBOL自体は悪ではありません。
30年以上前に書かれたプログラムが問題なく実行できるという保守面を考えたら素晴らしい言語なのです。
**ビジネスではケースバイケースでCOBOLを使っていけばいいのです。**

[だから、「COBOL」の問題じゃないってば](http://www.nurs.or.jp/~ogochan/essay/archives/4401)

###しかしクリエイティブではない

COBOLが使われている現場というのは、昔ながらのITゼネコン構造が根付いている現場です。
ウォータフォール開発により、厳密な工数管理のもとに上流から下流へ作業が流れています。
下請けCOBOLerの仕事の大半は下流工程だと考えられます。
仕様書通りに実装、指示書通りに運用だけの職場です。
言われたことを言われた通りに完成させることが目標なので、創意工夫の余地が非常に少ないです。
知的好奇心が全く刺激されません。

#自身の決断

###このままCOBOLerを続けていたら、いつか腐ってしまう

私は新卒で零細ITベンダーに入社して、3年間COBOLを使い続けていました。
当時は、他の同僚と比較して、後進的なプログラムをしていると思っていました。
正直、仕事でワクワクしたことがなかったです。

###現場の先輩は将来の自分

大変失礼ながら、現場の先輩方は技術に興味がある方々ではありませんでした。
周りにSlackってかっこいいですよねと言ってもみんな知りません。
Rails?AWS?なにそれ状態です。
ITに対してのアンテナ感度が鈍感です。
自分自身、こんな人たちと一緒だったらロクな将来にならないと思い始めました。
私は転職を決意しました。

#どこの業界であればCOBOLerのスキルが生きるのか

###Web業界

プログラミング経験が多少なりともあるのは、有利です。
私は、Web業界で生きていきたいと思い、オンラインブートキャンプでPHPを勉強して
Webエンジニアになりました。

###IT業界の営業

IT業界の内情を知っていれば、営業としてかなり建設的な提案ができるものと思われます。
少なくとも各開発フェーズで何を行っているか理解できるのは有利です。

#転職後

###現在の職場

現在私はWeb系の自社開発の会社で働いています。
ITゼネコン構造から解放されて、心が楽です。
なおかつ、周りにアンテナ感度の高い人が多いので、とても楽しいです。

2017.09追記

また転職しました。
さらに自由な社風であり、OSSに参加している方もいる職場です。
頻繁に社外アウトプットが行われており、とてもオープンな環境です。

###未来像

将来的には、自身の手でミニマムなサービスをローンチしたいと思っています。
今の自体はモバイルがメインストリームなので、そっちの方で可能性を見出したいです。