アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


Rails / Ruby 予約語一覧

Railsでアプリケーションを開発する際に、ユーザー名をurlに含めたい場合がありますね。
例えばTwitterみたいに。

https://twitter.com/yahoojapan

その際、登録されるとまずいユーザー名があります。
例えばsupportとかhelpとか。

そのリストはこちらにまとめてくれている方がいます。
qiita.com

さらに、Rails / Ruby予約語もできれば避けたいです。
ということでRails / Ruby予約語もまとめてみました。

引用元

www.rubymagic.org

Rails / Ruby予約語リスト

ADDITIONAL_LOAD_PATHS ARGF ARGV ActionController ActionView ActiveRecord ArgumentError Array BasicSocket Benchmark Bignum Binding CGI CGIMethods CROSS_COMPILING Class ClassInheritableAttributes Comparable ConditionVariable Config Continuation DRb DRbIdConv DRbObject DRbUndumped Data Date DateTime Delegater Delegator Digest Dir ENV EOFError ERB Enumerable Errno Exception FALSE FalseClass Fcntl File FileList FileTask FileTest FileUtils Fixnum Float FloatDomainError GC Gem GetoptLong Hash IO IOError IPSocket IPsocket IndexError Inflector Integer Interrupt Kernel LN_SUPPORTED LoadError LocalJumpError Logger Marshal MatchData MatchingData Math Method Module Mutex Mysql MysqlError MysqlField MysqlRes NIL NameError NilClass NoMemoryError NoMethodError NoWrite NotImplementedError Numeric OPT_TABLE Object ObjectSpace Observable Observer PGError PGconn PGlarge PGresult PLATFORM PStore ParseDate Precision Proc Process Queue RAKEVERSION RELEASE_DATE RUBY RUBY_PLATFORM RUBY_RELEASE_DATE RUBY_VERSION Rack Rake RakeApp RakeFileUtils Range RangeError Rational Regexp RegexpError Request RuntimeError STDERR STDIN STDOUT ScanError ScriptError SecurityError Signal SignalException SimpleDelegater SimpleDelegator Singleton SizedQueue Socket SocketError StandardError String StringScanner Struct Symbol SyntaxError SystemCallError SystemExit SystemStackError TCPServer TCPSocket TCPserver TCPsocket TOPLEVEL_BINDING TRUE Task Text Thread ThreadError ThreadGroup Time Transaction TrueClass TypeError UDPSocket UDPsocket UNIXServer UNIXSocket UNIXserver UNIXsocket UnboundMethod Url VERSION Verbose YAML ZeroDivisionError
base_path accept Acces Axi action attributes application2 callback category connection database dispatcher display1 drive errors format host key layout load link new notify open public quote render request records responses save scope send session system template test timeout to_s type URI visits Observer
created_at created_on updated_at updated_on deleted_at lock_version type id position parent_id lft rgt quote_value
alias and BEGIN begin break case class def defined? do else elsif END end ensure false for if module next nil not or redo rescue retry return self super then true undef unless until when while yield __FILE__ __LINE__

【おすすめPodcast】 熊谷と繪面がプログラミングコードの内から聴こえてくる声に耳を傾けて楽しむラジオ

最近ハマっているのがこちらのPodcast

mookmookradio.com

本当に面白い!!
プログラミングをやってる人、特にSwiftを書いている、Swiftに興味がある人には非常に面白いPodcastだと思います。
だいたい毎回テーマが決まっていて、例えば列挙型について延々とお二人で数十分語る回など。
出演者は以下のお二人です。

熊谷 友宏さん

Twitter

1977年生まれ。小学生でホームコンピューター MSX と出会い、それから今日まで、プログラミングと人生を共に歩んできました。プログラミングとは幼馴染です。独学でプログラミングを学びながら、そこで得た喜びを知識に添えて、ブログに綴ったり、勉強会に自主的に参加してみんなに届けたり、仕事を通して提供したりしています。最近の興味は Swift 言語での試行錯誤と勉強会。趣味人で活気溢れる世の中を夢見て生きるこの頃です。特に勉強会はもっとも注目しているもののひとつで、この前向きで明るいエネルギー溢れる世界をどう広げていくか、そんなところに意識を傾けがち。プログラミングを通して見つけた喜びを、もっともっと伝えていきたい。 【主催勉強会】yidev 横浜 iPhone 勉強会、カジュアル Swift 勉強会主催 【書籍】「Xcode 5 徹底解説」【講師】NPO 法人 MOSA 【ブログ】技術ブログ EZ-NET

繪面 友香さん

Twitter

現在は iOS アプリの開発を主としています。モバイルアプリ開発は学部 3 年 (4 年前) から始め、受託をメインとした会社でエンジニアとしてアルバイトをしていました。当初は Android アプリをメインに開発し、その後、iOS 版、Android 版の両アプリの開発を担当しました。 在学中は IBM の基礎研究所のインターンシップに参加し、データ可視化システムを C++ で実装しました。また、課外プログラムである Cisco Networking Academy Program を修了しました。研究室配属後は Web アプリケーションの設計を題材とした研究を行いました。 大学院卒業時にインドへ短期留学し、Network Operating System コースを受講・修了しました。

お二人ともプログラミングに非常に造詣が深いという事はもちろん、本当にプログラミングが好きなんだなぁということが伝わってきて 聞いていて楽しくなります。

また、このPodcastは言語仕様の解説を趣旨としているものではなく、思想や設計の部分を二人で議論しながら深掘りしていくスタイルで、まさにタイトル通り、]]「プログラミングコードの内から聴こえてくる声に耳を傾けて楽しむ」__といった感じです。

Swiftやプログラミングに対する理解非常に理解が深まりますし、「なるほど!」という発見も多く楽しいです。
何より熊谷さんの喋り方と繪面さんとのやりとりがとても癒やされます。笑

本当に面白いので、今後もずっと続けてもらえたら嬉しいなと思います。

mookmookradio.com

serverless.ymlでDynamoDBテーブル定義エラー

以下みたいなDynamoDBテーブルをserverless.ymlで定義し、deployしようとするとエラーが。

resources:
  Resources:
    HogeUsers:
      Type: "AWS::DynamoDB::Table"
      Properties:
        TableName: Users
        AttributeDefinitions:
          - AttributeName: Id
            AttributeType: S
          - AttributeName: UserName
            AttributeType: S
        KeySchema:
          - AttributeName: Id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
エラー内容

Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes

そうでした。
DynamoDBはスキーマレスなので、キースキーマとなる属性以外最初に定義する必要はありません。

なので、キースキーマ(プライマリキー、レンジキー) やセカンダリインデックスで使用する以外の属性を記載していると、
キースキーマとセカンダリインデックスと一致しないよ、と怒られてしまいます。
RDBばかり使っていたので、たまに混乱することがあります。

特定のDockerイメージに属するコンテナを一括削除してスッキリする

気づいたらあるDocker imageのコンテナが200個ほどできておりました。

docker rm コンテナ名 コンテナ名 コンテナ名

と複数指定して削除もできますが、200個は無理ということで、特定のdocker imageに属するdocker containerを一括削除するコマンドが以下です。

特定のDockerイメージに属するコンテナを一括削除するコマンド

docker rm $(docker ps -a | grep "Dockerイメージ名" | awk '{print $1}')

docker ps -a で起動していないものも含め全てのcontainer を列挙します。
これをgrepで絞込み、1つめに出力されるdocker container のIDを、docker rm に渡しています。

これでスッキリ!!

スッキリしました。

追記: もっとスッキリ書ける方法

ブコメにてもっといい方法を皆様に教えていただけました。ありがとうございます!!

bottomzlife さんおすすめの方法

$ docker rm $( docker ps -qa --filter name=image名 )

mapk0y さんおすすめの方法

$ docker rm $(docker ps -a -q -f ancestor=image名)

Twitter Kit for iOSを使う

Twitter 関連のモバイルアプリを作るなら非常に便利なのが Twitter Kit。
Twitter公式のライブラリです。
導入がすごい簡単。
Twitter Installation — Fabric for Apple documentation

わかりにくいんだけどこちらにライブラリ公式ドキュメントがあります。

TwitterKit Reference

TwitterKit Reference

Xcode Embedded framework で no such module

iOSプロジェクトでDDDやってみたいと思い、名前空間切れたり、副次的なメリットも多くて色々嬉しいということで embedded frameworkに挑戦してみた。

  • ui
  • domain
  • data
    というembedded framework を作って作業をすすめた。問題もなくいい感じ。
    が、最初は順調に行ってたのだけど、途中からなぜか domain層から import data 記述が no such module エラーをはくようになる。
    また、初めて見るこんなファイルからもエラーが。

module.modulemap

module data.Swift {
    header "data-Swift.h"
}

なぜ突然‥?!と思ってたんだけど、 framework同士の依存関係も明示的に設定してあげないといけない模様。

TARGETS の domainから Build Phases -> Target Dependency でdataフレームワークを追加してあげるとエラーが出なくなった。

それにしても、むしろなぜ今まではこの依存関係を明示していなくても動いていたのかが謎。うーむ。
まぁ問題は解決したのでよしとしよう!

参考リンク

stackoverflow.com

【新しいAppleの push通知】http/2を使ったAPNs Provider API

http/2を使ったPUSH通知について (APNs Provider API) が出てたんですね。
以下にまとめたとおりいいことづくめですが、各種PaaSは未対応のところが多い模様。
しかし、自前実装でも十分その恩恵を受けられます。
以前のめんどくささに比べるとcurlでコマンド叩いてPUSH通知送れるのは正直感動すらあります。

APNs Provider API のいいところ

  • APIにPOSTするだけで通知送信できる
  • 通知の成功/失敗がすぐ確認できる。失敗した場合はその理由も。   => なぜか届かない!みたいな事象に苦しめられることがなくなる
  • 本番/開発で証明書を分けなくて良い

懸念

  • 各種PaaSが未対応のところが多そう

各言語でもラッパーライブラリデているのではないかと思います。(未確認)
Rubyはありました。

通知発行用Rubyライブラリ

github.com

github.com

サーバーサイドを自前で実装している方は、Paasを待たずに自前でやってしまったほうがよいのでは。

公式ドキュメント

developer.apple.com

developer.apple.com

cURLで通知を送る

qiita.com


おまけ

http://qiita.com/itosho/items/2402df4de85b360d5bd9

https://mike-neko.github.io/blog/http2apns-ios/