NameError: uninitialized constant AWS
「NameError: uninitialized constant AWS」のエラーが出た時の対応メモ。
エラー内容
NameError: uninitialized constant AWS
原因
NameError: uninitialized constant AWS. If you receive this error, you likely have upgraded to version 2 of the aws-sdk gem unintentionally. Version 2 uses the Aws namespace, not AWS. This allows version 1 and version 2 to be used in the same application.
参考:https://github.com/aws/aws-sdk-ruby#nameerror-uninitialized-constant-aws
対応
ネームスペースの修正。
version 1(修正前)
AWS.config({ :access_key_id => ENV["AWS_ACCESS_KEY_ID"], :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"] })
version 2(修正後)
Aws.config.update({ region: 'us-west-2', credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']) })
リージョンの指定は適宜。
参考
Rails環境の構築
Rails環境構築
rbenv + ruby-build
$ sudo yum update $ sudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison git $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ source ~/.bash_profile $ rbenv -v $ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build $ rbenv install -l $ rbenv install 2.2.2 $ rbenv global 2.2.2 $ rbenv rehash $ rbenv versions
Rails
$ gem install rails --version="5.0.1" $ rails -v
Nginx
$ sudo yum -y install nginx $ sudo service nginx start $ sudo chkconfig nginx on $ sudo chkconfig --list nginx
Basic認証
参考
ChainerでMNISTを試す
ChainerでMNISTのサンプルコードを試しました。
Chainerをインストール
$ pip install chainer
サンプルコードを動かす
chainer/examples/mnistのディレクトリにMNISTのサンプルコードがあります。学習時間は15分程度でした。
$ python train_ptb.py GPU: -1 # unit: 1000 # Minibatch-size: 100 # epoch: 20 Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz... Downloading from http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz... Downloading from http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz... Downloading from http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz... epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time 1 0.191542 0.090873 0.944033 0.9713 50.9736 2 0.0741329 0.0754302 0.976317 0.9765 99.1206 3 0.0467661 0.0721968 0.985067 0.9797 161.049 4 0.0359696 0.0728168 0.988083 0.978 209.989 5 0.0290916 0.0821801 0.9904 0.977 261.491 6 0.0242685 0.0734186 0.9921 0.9806 311.869 7 0.0202083 0.0895192 0.993467 0.9795 360.346 8 0.0173684 0.0807823 0.9944 0.9785 407.156 9 0.0185823 0.0856489 0.994 0.9792 456.174 10 0.0167096 0.0783728 0.9947 0.9797 506.884 11 0.0103569 0.095445 0.9968 0.9797 556.816 12 0.0153957 0.0862309 0.995267 0.982 605.577 13 0.00907149 0.104247 0.9972 0.9803 653.676 14 0.013558 0.0988746 0.995767 0.9794 708.906 15 0.0123224 0.0865951 0.99605 0.9825 762.177 16 0.0102555 0.0927854 0.99725 0.982 815.14 17 0.0100652 0.094853 0.996733 0.9805 877.995 18 0.00979173 0.0833932 0.997183 0.9849 932.327 19 0.00768291 0.116505 0.997767 0.9801 992.164 20 0.00946933 0.100418 0.9974 0.9836 1054.31
学習が終わるとresultディレクトリの中に学習結果のデータが作成されます。
accuracyが精度、lossが誤差を表しています。学習回数が増す毎に数値が改善されています。(グラフの読み方は勉強中です。)
まとめ
MNISTのサンプルコードを試すことができました。このあとは、コードの中身をチラ見したり、他に用意されているサンプルを試しながら、少しずつ自分でもコードを書けるようになればと思います。
参考
CapistranoでPermission denied (publickey)が出た時の対処
Capistranoでdeploy:check時にPermission denied (publickey)のエラーが出た時の対処法メモ。
原因
デプロイ先のサーバーで秘密鍵・公開鍵の作成管理が行われていないため、デプロイ先のサーバーからgithubに接続できない。
対応
ssh agent forwardingを利用。
参考:capistrano3でssh agent forwarding
エラー内容の確認
$ bundle exec cap staging deploy:check (略) git:check 01 git ls-remote --heads git@github.com:hoge/huga.git 01 Permission denied (publickey). 01 fatal: Could not read from remote repository. 01 01 Please make sure you have the correct access rights 01 and the repository exists.
ssh-agentに登録されている鍵の確認
$ ssh-add -l The agent has no identities.
ssh-agentに鍵を登録
$ ssh-add ~/.ssh/huga.pem $ ssh-add -l 2048 (略) /Users/hoge/.ssh/huga.pem (RSA)
参考
Rails5で日本語化
Rails5で日本語化する時のメモ。
./config/application.rb
# Application configuration should go into files in config/initializers
initializers以下の設定に変わったようです。設定は下記のissueを参考にしました。
https://github.com/rails/rails/issues/25398
Rails5で日本語化の設定
./config/initializers/locale.rb
I18n.config.available_locales = :ja I18n.default_locale = :ja
日本語訳ファイルをダウンロード
共通
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
devise
https://gist.github.com/yhara/606476
参考
フリーランスエンジニア3年目の2016年振り返り
フリーランスエンジニアとして3年目の2016年の振り返りです。
個人開発
尊敬するエンジニアの方が主催したシードアクセラレータープログラムに参加しました。残念ながら、そこで開発したサービスから話が発展することはなかったのですが、サービスの企画検討からリリースまでを担当できたことは大きな経験となりました。今回は無償で友達にも手伝ってもらったのですが、次回また何かをつくる機会があったら、多少なりお金を払うことができて本人の実績としても残してもらえるような環境作りが必要だと感じました。サービスのコンセプトが弱かったり、運用体制に持続性がなかったりなど、リリース後に発生する課題への見通しの甘さも反省点でした。その他にも、サービス開発からペライチのサイトまで大小合わせて今年は10~15程度の個人開発を行いました。なるべく多く試す機会をつくるために、機能を使いまわせるように整理したり、有料テンプレートを導入するなど工夫をしました。簡単に試したい場合は、facebookページやinstagramを使いました。
情報収集
海外でサービスをつくる可能性を探るために伸びしろの大きい東南アジアを中心に海外を見て回りました。今年は、タイ・インドネシア・中国に行きました。タイ・中国は想像していたよりも完成されていましたが、インドネシアは荒い部分が多く残っていたり物価も他の国に比べると安い印象だったので、個人でも何かできるかもしれないという可能性を感じました。滞在中は回線速度を測ったり、街の主要な位置関係を調べたり、スマートフォン専門のモールで市場調査を行うなどしました。帰国後に物件の相場を調べたり、現地の言語で簡単なペライチのサイトをつくってアクセスが来るかなどを試しました。渡航費用は、LCCの深夜便やエクスペディアのセールを利用することで多少なり抑えることができました。
業務委託
常駐やリモートなどでいくつかの案件に携わりました。これまで雰囲気の良い現場しか経験したことがなかったのですが、今年初めて困難な現場に当たりました。忙しさよりもコミュニケーションの部分でストレスの負荷が高すぎて、最後の方は手足が痺れるなど健康状態に影響が出ていました。今後はあまりに困難な環境の場合は早めに現場から離れる判断を心がけようと思いました。
明るい話では、某企業のCTOの方から直接声をかけていただき継続的に開発に参画させていただくお付き合いも生まれました。
仕事場
今年から渋谷近辺に仕事場を借りました。移動時間を短縮できたので自由な時間が多く生まれて1日の開発時間も増えました。都心に出やすくなったので勉強会や仕事関係の飲み会などフットワークも軽く動けるようになりました。最初に書いたシードアクセラレータープログラムも、物理的な距離の近さで参加を承認された部分もあるのではないかと思います。 また、お誘いを受ける機会も増えました。「ちょっとお茶しませんか?」の流れから仕事の話になり、そのまま案件のご相談を頂くこともありました。
2017年に向けて
2016年は個人的に多くのチャレンジをしましたが、得るものは大きくても成果につなげることが出来ませんでした。来年は何かしらの方法で成果を出して結果を残したいと思います。今年は「日本にあって海外にないもの」という視点から海外でのサービス展開を視野に入れて東南アジアを見て回りました。2017年は「海外にあって日本にないもの」という視点からヨーロッパなどの先進国から日本に取り入れることができるサービスや仕組みを探してみようかと考えています。東南アジアの国を複数回る中で、中心地の空気はどこも似ているように感じましたが、中心から離れた地方エリアは国ごとの特色が強いように感じました。同じように日本でも地方のほうが日本らしい何かがあるのではないかと思い、2017年は国内で地方を中心に見て回ることも検討しています。
業務委託・受託案件については、広げていくことよりも既にあるお付き合いを大事にしていきたいと考えています。全体的に密度が上がるような年になればと思います。