プログラミングと自分
高校の時から夢見てた職業としてのプログラマに半年前になり、ふと自分はどのようにして学生時代PCやプログラミングと関わってきたのかを振り返ってみたくなったので軽く書いてみる。
PCとの出会い-小学校低学年
自分が生まれて初めてPCを触ったのは小学生低学年の時だった。 もうほぼほぼ憶えていないが、家にはデスクトップPCがあって、そのPCでブラックジャックを遊ぶのがすごく楽しかった気がする。
異国でコンピュータに触れる-小学校中・高学年
親の仕事の関係で、渡米することになった。 転校先の現地校では、こんな感じのIMacがずらーっと並んでいて、かっこいいなと思い、パソコンを使う授業がすごく楽しみだった。
この時はまだプログラミングをすることはなく、ひたすらブラインドタッチの練習や、オフィス系のソフトの操作などをやっていたような気がする。 友達と遊ぶにしてもPCゲームがメインだったので、親に自分のPCを買い与えられるまで、ひたすら家族のPCを一日中占拠していたのが懐かしい。 この時はダイヤルアップ接続だった気がする、やはり懐かしい。
日本に戻ってきて-中学生
中学生の頃もひたすらPCゲームをやっていた覚えがある。ダメ人間感がすごい。
夏休みはひたすら起きたらゲームを始め、飲み食いをほぼせずに一日が終わるまでひたすらオンラインゲームをしていた。
この時に技術の授業で初めてHTMLというものに触れた。交通系ICカードを紹介するサイトを作っていたのだが、リンクを貼ったり、画像を貼ったりと、自分の手で綺麗にサイトが出来上がっていくのを見てとても興奮した覚えがある。
プログラミング始め-高校生
ゲーム漬けだった中学生だったが、受験はアメリカ住まいで培った英語力でごり押し、なんとか無事志望校に受かることができた。
高校生になってからも相変わらずゲームが多かった気がする。頻度は少なくなっていたが、オンラインゲームは相変わらず継続していたし、PSPとかも出てきた影響もあり、時間があれば高校に集まってはみんなでワイワイとゲームをしていたことが多かった。
そんな中、ちょうど高校の選択授業でプログラミングの授業を2つ軽い気持ちでとることにした。中学生時代に味わったあの感覚をもう一度味わいたかったのだ。
しかしとった授業はC++とJAVAの入門。HTMLからこの2つの言語にいきなり入っていったので、初めて見るそれぞれの言語の書き方や考え方に少し戸惑った。
C++の授業はプログラミング大会か何かの問題をひたすら解く形式、Javaは指定の教科書を買ってくるように指示され、それを輪読して説明するというなかなかハードモードな授業だった。
特にJavaの夏休みの宿題は、Javaで「物理シミュレータ」を作って来いというとても範囲が広くて何を作れば良いのかわからない課題で、悪戦苦闘しながらブロック崩しを作ろうとして途中で挫折した覚えがある。でもその時は本当にその悪戦苦闘が楽しくて、いつの間にか徹夜もしてたし、うまくいかないところを絶対うまくいかせてやろうという気持ちに溢れていてがむしゃらにコードを書いては消してを繰り返していた。
ちょっと寄り道-大学生
大学生に入ってからは、サークルの活動で少しマイコンを触る機会があり、Cを少しやったり、研究室でC++やPythonを使っていたりした。 バイトでは初めてサーバの設定や、web系のプログラミングを始めるなど、徐々に職業:プログラマとしての土台が見え始めてきたところなんじゃないかなと思う。
特にサーバの設定はとても印象的で、少し高校時代の思い出が蘇るようなものだった。サーバの設定をするためのマニュアルを渡され、それを頼りにいろいろと設定を入れていくのだが、エラーなどがバンバン出てきて全然思うようにいかない。ひたすらネットで調べて色々と試してみて、最後には設定もちゃんと入り、動くようになってくれて、それはそれで達成感があったのは間違いないと思う。
こんな感じでメモっぽいものを書いてみたが、とても薄いものになってしまった気がする・・・。 もっと面白おかしく書くスキルを手に入れないとな、と思うのであった。
itamaeでsidekiqが使えるようにredisをremiからインストールする
問題
railsでActionCableを使ってアプリを作っていて、ActiveJobを処理させるためにsidekiqを導入しようとしたら、 epel
だとredisのバージョンが足りなかった。
github.com
# recipes/redis.rb package "redis" do options "--enablerepo=epel" action :install end service "redis" do action %i(enable start) end
解決
remi
から取ってくるようにするために、レシピを以下のように変更。
# recipes/redis.rb package "epel-release" do action :install end package "http://rpms.famillecollet.com/enterprise/remi-release-#{node[:platform_version][0]}.rpm" do not_if "rpm -q remi-release" end package "redis" do options "--enablerepo=remi" action :install end service "redis" do action %i(enable start) end
これでうまくsidekiqが起動、処理してくれるようになった🔪🔪🔪
gretelって名前がメルヘンだけどパンくずリスト作りに便利
パンくずリストの実装って結構面倒くさそうだなって思ってたけど、gretelはなんて素敵gemなんだろうと思った。 github.com
使ってみた
READMEにもかいてあるけど、おもむろに
Gemfile gem "gretel"
と書いて bundle install
次に設定ファイルを rails generate gretel:install
で生成。
生成される config/breadcrumbs.rb
に対して色々と設定を入れていけば良い感じ。
config/breadcrumbs.rb # ページのルート crumb :root do link <表示させたい文字列>, root_path end # 以下みたいなのをパンくずリストに表示させたい塊に対して書く crumb :<パンくずのシンボル用文字列> do link <表示させたい文字列>, <リンク先パス> end
のように記述する。
あとは各ページに対して
<% breadcrumb :<パンくずのシンボル用文字列> %>
とパンくずリストを表示させたい箇所で記述するのと、
app/views/layouts/application.html.erb <%= breadcrumbs style: :bootstrap" %>
と書いてしまえば bootstrap
スタイルの素敵なパンくずができちゃいます。便利ですね!
React&React Native入門者の会に参加してきた
React&React Native入門者の会というものに参加し、面白そうだと思ってたけど全然触れてなかったReactについて色々と話を聞いてきたので雑まとめ。
Reactive Nativeのおかげで爆速でNativeアプリが書ける話 @prologさん
アンドロイドアプリ作りたい
- 豊富なライブラリ
- awesome-react-native
- react-native-grifted-chat ➡︎ LINE風のチャットが実装できる
- react-native-action-button
- react-native-dialogs
Reactの基礎 @minakaco0301さん
https://github.com/minakaco0301/react_native_sample
- チュートリアルの話っぽい。あとで読んでみよう。
React Nativeを触り始めて@diskshimaさん
ListViewあるあるらしい
更新されない場合はCloneWithRawsを呼びましょう
React JSのオープソースを学び倒して脱初心者を目論んでいる話 @tkow39
- リアルなコードを書こう
- fillはfluxの良い実装
Ajax in React with axios @takanorip
Reactでpromiseなajax
- Promise ES2015を使ってajaxを実装
- JavaScript Promiseの本
- axios
- クロスドメインはNG
感想
- 全体的に、名前の通り入門者レベルの話だった気がした。
- とりあえずawesome-reactとかのプロジェクトを色々コードリーディングしていって、知識を取り入れられたらと思った。
【Rails】guard-livereloadを使ってみる
きっかけ
ReactJSの開発環境を設定している動画で、livereloadでサクサク開発をしているのが紹介されているのを見て、面白そうだなと思ってやってみました。
guard-livereload
RSpecとか更新時に色々と自動化してくれるやつのlivereload版。 viewファイルやCSSやJSなどといったファイルが更新された際に自動的にブラウザをリロードしてくれる。
インストール
Gemfile
group :development do gem "guard-livereload" end
と書き、
bundle install
でインストール。
guard init livereload
でどのファイルを更新した時にリロードするのかといった設定を書くためのGuardfile
を生成。
中身としては
# file needing a full reload of the page anyway watch(%r{app/views/.+\.(#{rails_view_exts * '|'})$}) watch(%r{app/helpers/.+\.rb}) watch(%r{config/locales/.+\.yml})
などといったwatch~~
な箇所が更新されたらリロードがされるようにデフォルトで生成されるファイルでは記述されている。
連携
chromeを使っているなら下から拡張機能をインストール。 chrome.google.com この状態で
bundle exec guard
を実行すると
INFO - LiveReload is waiting for a browser to connect.
という表示が出るので、
rails s
でサーバを立ち上げて、ブラウザでアクセスすると
INFO - Guard is now watching at [project名]
となり、これ以降にviewファイルなどを更新すると、自動的にリロードされるようになる。
Support
Guard::LiveReload is looking for a new maintainer. Please contact me if you're interested.
なんて書いてあって少し不安感あるけど、他にサクッと入れられるものはあるのだろうか。
【Rails】Time型で時間の条件だけを指定して取得
DBはSQLite3を使用
問題
id: 1, starttime: 2000-01-01 10:00:00 +0900 id: 2, starttime: 2000-01-01 10:00:00 +0900
このようなレコードがあった時に
Model.where(starttime: Time.parse("2000-01-01 10:00:00 +0900"))
ではid: 1
のみの取得となってしまった時があった。
調査
Model.find(1).starttime.to_i => 946688400 Model.find(2).starttime.to_i => 946688400
は両方同じものが返ってくる。 ということはDB側で値を比較する際に何かが起きている?
解決
とりあえずこれを
Model.where("time(starttime) == ?", Time.parse("2000-01-01 10:00:00").strftime('%H:%M:%S'))
と記述して、DB側で文字列化し、比較することによって両方とも取得ができた。 でもこれってDBの種類によって挙動が変わる可能性ないのかな?まだまだ調査が必要が感じがする。