カレンダー作成問題[Ruby]
こちらの記事の1問目をやってみた。 blog.jnito.com
require 'date' #今日 d = Date.today #今月と今年 m_y = d.strftime("%B %Y") #月初の曜日 fd = Date.parse(Date.today.strftime('%Y-%m-01')) fd = fd.strftime("%a") #月末の日付 ld = Date.new(Time.now.year, Time.now.month, -1).day puts " " << m_y puts " Su Mo Tu We Th Fr Sa" array = [] for num in 1..ld do array << num.to_s.rjust(3) end case fd when "Sun" then print "" blank_day = 0 when "Mon" then print " " blank_day = 1 when "Tus" then print " " blank_day = 2 when "Wed" then print " " blank_day = 3 when "Thu" then print " " blank_day = 4 when "Fri" then print " " blank_day = 5 when "Sat" then print " " blank_day = 6 end array.each do |day| print day day = day.to_i + blank_day if day.to_i % 7 == 0 then puts "" end end puts ""
fdのところがかなりいまいちだとは思った。
解いた方の記事を見た。 qiita.com
リファクタリングした。
require 'date' #今日 d = Date.today #今月と今年 m_y= d.strftime("%B %Y") #月初の曜日(0~6) fd = Date.new(d.year,d.mon,1).wday #月末の日付 ld = Date.new(d.year, d.month, -1).day puts " " << m_y puts " Su Mo Tu We Th Fr Sa" array = [] for num in 1..ld do array << num.to_s.rjust(3) end fd.times do print " " end array.each do |day| print day day = day.to_i + fd if day.to_i % 7 == 0 then puts "" end end puts ""
曜日を0~6の値で表すことでだいぶすっきりした!
ぐるなびAPIを使って、営業時間がすぐにわかる飲食店検索サイトを作った。
ぐるなびAPIを使って、営業時間がすぐにわかる飲食店検索サイトを作った。
めしタイム
めしタイムの作成中に考えたことや、やったことを書いていく。
なぜ作ったか
- 役に立つwebアプリを作ってみたかった
- ある特定の飲食店の営業時間を知りたいときに、スマホでググって大手グルメサイトのページに飛んで、下にスクロールという操作を簡略化したかった
なぜぐるなびAPIを使うのか
使用ケースの例
- ある特定の飲食店の開店時間、または閉店時間を知りたいとき
検索キーワードの例「新小岩 牛角」 - その地域または駅付近で朝早くからやっている、または夜遅くまでやっている店を知りたいとき
検索キーワードの例「目黒駅 居酒屋」
使った技術
- Rails
- Heroku
- Bulma
Herokuは無料プラン
Herokuのdynoスリープ回避方法
- uptimerobotを使った
.envを使用したときの注意点
- こちらの記事を参考にした
最初のリリースまでにかかった時間
- 10時間程度
最初に公開したのは3月4日
ユーザーからフィードバックを頂いた
- チャットサイトを使ってユーザーを集め、フィードバックを頂いた
ユーザーフィードバックの抜粋
- どんなキーワードを入力すればいいのか分からない
- 検索画面が簡素すぎて食欲が湧かない
- 地域指定を入れてほしい
- 食事関係なのにTwitter色はどうなのか
- シンプルすぎてなんか怪しい
- 検索した後の表示が遅い
- トップページを見て何のサイトか明確じゃない
ユーザーフィードバックをもとに修正
- place holderの文字を変更した
「キーワードを入力」→「キーワード(駅名、店名、料理名など)を入力」
今後修正したい箇所
- ページネーションをページが切り替わるのではなく、「もっと見る」ボタンを押したら、下に表示されるようにしたい
- 検索した後のレスポンスが遅いのでなんとかしたい
ユーザー数とPV
(リリースから2週間経過)
- 170ユーザー
- 1000PV
(Googleアナリティクスで自分のアクセスを除外する方法)
(Googleアナリティクスで自分のスマホのアクセスを除外する方法)
まとめ
- 作るの面白い!!
Selectではなく、Withを使う。[VBA]
Sheets("Sheet1").Activate Range("4:4").Select Range(Selection, Selection.End(xlDown)).ClearContents
上のコードは、以下のようにWithを使うとSelectを使わず書ける。
With Sheets("Sheet1") .Range(.Rows("4:4"), .Rows("4:4").End(xlDown)).ClearContents End With
Selectを使わない方が処理が早い。
VBAと100時間向き合って気づいたこと
VBAは、「Visual Basic for Applications」の略で、MicrosoftがMS Officeの拡張機能として提供しているプログラミング言語。
VBAでのツール作成に費やした100時間で、学んだことや思ったことについて書く。
- Option Explicitを使うと、変数を必ず宣言しないといけなくなる
- 処理の前に
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
処理の後に
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
を書けば処理が早くなることが多い - 処理を早くしたければselectを使わない
(例)
Range("A1").Copy Range("B1")
A1をB1にコピー Withを使うことによってコードを簡略化できる
フィルターの絞り込みを複数条件でやりたい場合は配列を使う
- 文字の結合は「&」ではなくjoinを使ったほうが圧倒的に処理が早い
- 他人のコードが読めない場合はデバッグで1行ずつ見てみる
- 1から作ることができない場合は、「マクロの記録」でやりたいことをやってみて、生成されたコードをリファクタリングする
結論
調べれば、作れる。
調べればだいたいのものがそこそこのクオリティで作れるという自信がついた。
0.5秒かかっている処理を0.1秒に縮める(そこそこではなく、極限まで処理を早くする)、みたいなことは難しいと思った。
動画のツイート情報の取得(Twitter gem)[m3u8&ts]
Twitter 6.2.0を使って、m3u8とtsの情報を取得する方法の備忘録。
#(例) client.user_timeline(params[:name],{count: 3}).each do |timeline| client.status(timeline.id).media[0].video_info.variants end
(取得される情報)
[#<Twitter::Variant:0x00007f9a9298b488 @attrs={:bitrate=>432000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/320x320/6Njwsfm5UWqO0oU-.mp4?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b438 @attrs={:bitrate=>1280000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/720x720/8XtxUTxm1tUG4ac_.mp4?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b398 @attrs={:content_type=>"application/x-mpegURL", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/pl/QiuW1-iWLaygvK25.m3u8?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b1b8 @attrs={:bitrate=>832000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/480x480/pcsPrvRLvMExgib5.mp4?tag=6"}>]
ドキュメントには書かれていないが、#bitrateや#content_typeと同じように#urlでURLを取得できる。
#(例) client.user_timeline(params[:name],{count: 3}).each do |timeline| client.status(timeline.id).media[0].video_info.variants[0].url end
(取得される情報)
https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/320x320/6Njwsfm5UWqO0oU-.mp4?tag=6
content_typeがapplication/x-mpegURLのURLを使えばm3u8をダウンロードできる。
(m3u8の中身)
#EXTM3U #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=432000,RESOLUTION=320x320,CODECS="mp4a.40.2,avc1.4d001e" /ext_tw_video/1093540366576275456/pu/pl/320x320/tfV38oY4Vgf57IDU.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=480x480,CODECS="mp4a.40.2,avc1.4d001f" /ext_tw_video/1093540366576275456/pu/pl/480x480/cP4EMl50LdmPmbDe.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,RESOLUTION=720x720,CODECS="mp4a.40.2,avc1.640020" /ext_tw_video/1093540366576275456/pu/pl/720x720/X3HUpbxApZP_9kO9.m3u8
末尾のURLを使って再度m3u8をダウンロード。
(m3u8の中身)
#EXTM3U #EXT-X-VERSION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-ALLOW-CACHE:YES #EXTINF:3.000, /ext_tw_video/1093540366576275456/pu/vid/0/3000/720x720/fOF3nKjZy6cFCfG0.ts #EXTINF:3.000, /ext_tw_video/1093540366576275456/pu/vid/3000/6000/720x720/p_XXWwSLqZadr473.ts #EXTINF:2.976, /ext_tw_video/1093540366576275456/pu/vid/6000/8976/720x720/wFfB8JO78KQDVYTr.ts #EXT-X-ENDLIST
tsファイルの情報を取得できる。