memo
module IntegerConverter refine String do def to_decimal self.each_char .map{ |c| sixtytwo_table.index(c) } .inject{|a, b| a * 62 + b } end private def sixtytwo_table [*("0".."9"), *("a".."z"), *("A".."Z")] end end
memo
module IntegerConverter refine String do def to_decimal self.each_char .map{ |c| sixtytwo_table.index(c) } .inject{|a, b| a * 62 + b } end private def sixtytwo_table [*("0".."9"), *("a".."z"), *("A".."Z")] end end
このブログの下書きはすべてesa.ioを用いられています。
私はしがない同人サークルの一員なのでオンリーイベントを楽しみにしていました。いやマジで開催されるとは思ってなかったけど。(オンリーイベントかどうかはわからない)
esaに餌を与え続ける日々について薄い本なり語りなりしたいので開催楽しみにしてます
— 炬燵 (@sakahukamaki) 2019年4月23日
【お知らせ】🎂esa 生誕5周年記念パーティー(\( ⁰⊖⁰)/)🎂
— esa_io (@esa_io) 2019年5月7日
今週、5/10(金)の夜にやります!
よかったら遊びにきてください!
(募集直前になってしまってごめんなさいmm) #トノコト https://t.co/gluGQ30z7u #esa_io
esa 生誕5周年記念パーティー(\( ⁰⊖⁰)/) - connpass 今日の夜開催されていることでしょう。島根県民はこう…魂と…ブログを飛ばす…。(泣いてる)
仕事でいろいろなサービスに触れてきて、ナレッジ共有サービスもWikiも触ってはいたんだけど、一番ピンときたのがesa.io。いいバランスでカジュアルだと思う。堅苦しいのが良ければWordなどいかがですか?
まあesa.ioの誕生を祝いほめたたえる記事なのでよいところを書いていきましょう。私はesa.ioの新参オタクなので浅いところから書いていきたい。
楽しいのはいいこと。何が楽しいのかってこう わからん 言語化できない。人もサービスも楽しいので楽しい。触ればわかる。
好きなところを明確にしていくと楽しさが伝わるかと思いますので分けていきますね。どんどん行きましょう。
esa.ioのトリめっちゃ可愛いですよね。かわいい。かわいいは正義。
地方イベントに行くたびに新しい装いになるのほんと好き。ステッカー集めちゃう(集めている)。
ただのマークダウンエディタに何を言っているのかっていう話なんですが書き味がいい。いやもう本当に書き味がいい。言語化したい。分からん。書き味がいい。WEBのノートに書いている気持ちになる。
これはマークダウン記法が染みついている人間の感想。書きなれてない人はScrapboxのほうが好きだと思う。
マークダウンの改行ルールの半角スペース2つとかいうルールは要らない。楽しい。いやこれはマークダウンエンジンの問題だとは思うけどとにかく書いたとおりに表示されて思った通りに書けるってのは意外とオンラインで体験できることではないし楽しいことだし最高。
経験則だと10分以内に返事がある。
ほかのサービスはどうだか知らないんだけど、右下のお問合せフォームから問い合わせると速攻で返事が来ており体験がよい。これはリアルでも何度か中の人に「レス早くて大好き」って言ってるので継続されると思う。
「よっし問い合わせるか~」「問い合わせたぞ~」「いや~まだ返事来てないよn・・・ある~~~?!?!」という気持ちになり楽しい。
大体中の人(taea🐿(@ken_c_lo)さん | Twitter)と公式アカウント(esa_io(@esa_io) | Twitter)に捕捉される。Twitterでの承認欲求が高いTwitter廃人としては「esaのここがいい~」みたいなのを呟くと捕捉されるので楽しい。
help/esa.io グッズSHOP - docs.esa.io
esa.ioにはグッズがあるんですよ~~~!!!!オタク好きでしょ?好きでしょ?私は好き。
手軽なステッカーから定番のTシャツ、珍しいところだとサコッシュとかトートバッグとか。スマホケースもある。
手帳型スマホケースはないので欲しい。
余談だけど手帳型スマホケースはiPhone系とAndroid系に対応しなくてはならないので大変そう。私はiPhoneです。これは自己主張です。
esa.ioを作っているのは2人のエンジニアと1人のデザイナーという認識なんだけど、みんなでぬいぐるみ作ったりドローンで飛ばしたりしていて大変に楽しそう。中の人がたのしそうだとこっちも楽しい。ワイワイ。お誕生日おめでとう。
(このワイワイとかトノコトとか、半角カナの発言がじんわり浸透してコンテンツのイメージになっているの見ていて面白いので続けてほしい #トノコト #ダイスキ)
日々引っかかるところはあるんだけど問い合わせたら直ってしまう。これはひそかに温めていた(?)クレーム集です。
多分すぐ直ってしまうんだろうなあ。そういうとこめっちゃ好きです。
古き良き手順書みたいなノリでインストール手順などのスクショを何も考えずに貼り付けていくとプレビュー位置が迷子になる。もはやクレーム。
トリがパタパタしているのは読み込み中の時なのでかわいいなあと思っている。かわいい。トリが飛んでるなあ~~~とか考えているうちに読み込みが終わる。
ちなみに、普段何に使っているのかというとこんな感じ。
会社で契約しているチームにワンダーランド(カテゴリ)を作ってそこで一人で日報を書いている。なんかワンダーランドが伝染したらしくて恐れ多いなあって思った。
はてなブログに投げる記事をesaで書いている。便利。
WIPでも書いていくサービスの姿勢に合わせると、下書きを量産しやすい。あと、WIPのやつはまだ投稿してないんだなってビジュアル的にもわかりやすくていい。
日報内でこんな感じでTODOを仕込んでおけば次の日やることがわかって便利。
中の人がたのしそう&自分たちの作ったものを愛している姿勢が伝わってくるコンテンツって長生きすると思っていて、というのも作者が「Aって作品別にそこまで好きじゃないし思い入れもないんですよね…」とか発言してしまうと作品の受け手は悲しくなってしまう。
個人的には、esa.ioは普段使うWEBサービスという範疇を超えてリアルに侵食してきている、中の人込みで「楽しいコンテンツ」になってきている。ふしぎ。
だがしかしesa.ioというコンテンツ(正しくはWEBサービス)は中の人がesaの鳥を育てたりぬいぐるみにしたりネイルにしたりと様々な「たのしい」を発信していて受け手も楽しい。たのしい!
お誕生日おめでとうございます!今年はぼっちesaでも課金していきます。
RubyKaigi参加レポート、登壇者でもヘルパーでもなんでもない人間のレポートなんぞ読んでも得られるものはないと思うので書きたいことだけ書く。
島根から特急スーパーおきで新山口、新山口から新幹線で博多、博多から宿へ直行した。
正確には、直行しようとしたら近くのもつ鍋屋に行くことになった。
鳥と鍋なので広義でesa pic.twitter.com/f3gqii3iso
— 炬燵 (@sakahukamaki) 2019年4月17日
「Karaokeいくの?!」「あんずちゃんが連れ込んだの?」と桐生あんずの同類であると認識され一番入り口から近いうえに二段ベッドではない部屋になった。この判断は正しかった。
幅計算に失敗しました pic.twitter.com/e8kgmSPPRD
— 炬燵 (@sakahukamaki) 2019年4月18日
ちゃんと朝からKeynoteを聞いた。ちゃんと聞いただけで「ほえ~」とか言ってておわり。感想を抱け。
Matzが「こっち(壇上)からそっち(観客)よくみえないんだよね」と言っておりとある役者さんのことを思い出した。
舞台でキャストさんに「そこからなにが見えているのですか」と聞いたら「ライト眩しくてなんも見えてない!笑」と言われたのを思い出しています
— 炬燵 (@sakahukamaki) 2019年4月18日
その後はふらふらしたり野球盤で三振したり(というかサードゴロなのに2回目3回目とバッドを振らせてもらったことに気づいて呆然としている)屋台に並んだりした。このあたりは人と行動したり。
思い出したらお腹が減ってきた。
午後も興味のある話を聞いたりして、あとはブースを回ってスタンプを集めたりステッカーをあつめたり、esaのノベルティの前で待ち構える @ken_c_loさんと遭遇してきゃいきゃいしていた。
マルイ地下の日本酒がうまい店に連れ込まれて沈没。その後エモリハウスで自分の持ち込んだ酒を飲み自爆しアイドルとか引っ越しとかの話をしていた形跡はあるが記憶はない。
破滅している某氏を除いて集合写真を撮った。 (私の名前はTwitter上炬燵です)
RubyKaigi2019に参加して、エモリハウスを企画して、WTMKyushuに参加した
Keynoteスルーしちゃった。よくないね。この日はふらふら歩きまわったり博多を散歩したり宿近くの文具屋エモくない?!??と写真をとってフォロワーに送り付けたりなどしていた。
たまたまたどり着いたコインランドリーがきれいだった。
CSVが早くなった旨の漫談も聞いた。相変わらずさらっとすげーこと言ってるなあ、とか思う。あと人酔いした。
うどんが美味しかったと同居人(エモリハウス勢は同居人でいいのか?)に教えてもらい五島うどんを食べに行く。屋台は最高。美味しかった。
agilewareさんのドリンクアップからおすすめのラーメン屋(定食屋になっていた)、Karaokeへ行き、ヒトカラをしたり刀使ノ巫女を見ろと叫んだりした。3時くらいまで粘ったがアイマス部屋にこもった桐生あんずは出てこなかったので一人で帰るなどした。
ヒトカラしてます #rubykaraoke pic.twitter.com/npQ76h6yxl
— 炬燵 (@sakahukamaki) 2019年4月19日
オリジナルアニメーション「刀使ノ巫女」公式サイト https://t.co/UFVxWI1fnr
— 炬燵 (@sakahukamaki) 2019年4月19日
刀使ノ巫女をよろしくお願いします!!!!
#rubykaraoke
大体の知り合いはこの日にコンプした。
遊んでばっかりだなって思うけどその通りなので仕方ない。
いろんな人と話すのを目的としていたので、3日目は(スピーカーの人たちには申し訳ないけど)ブースをめぐって興味ある話を聞いたり話をしたり話をしたりしていた。
朝から酒を進められる生活。朝飲酒っていいなあって思った(飲んだ)。
エモリハウス、飲酒勢が多い(朝です)
— 炬燵 (@sakahukamaki) 2019年4月21日
朝適当に起きて博多駅ぶらついて帰った。
マッチャ! pic.twitter.com/A8hkixQmwJ
— 炬燵 (@sakahukamaki) 2019年4月21日
エモリハウスにて桐生あんずが介護対象なの面白すぎるんですよね、私も同レベルに酒の限界値測れてないのに…
— 炬燵 (@sakahukamaki) 2019年4月20日
通るたび思ってたんすけど「だんだん」は出雲では pic.twitter.com/sltUDpucvP
— 炬燵 (@sakahukamaki) 2019年4月20日
ここ何日かでうまいものしか食べてないせいでうまいものしか食べられなくなってしまったらどうしようと言う恐怖がある
— 炬燵 (@sakahukamaki) 2019年4月21日
福岡、宿代と朝ごはん、コインランドリー、ドリンクアップ後の二軒三軒目、タクシー代くらいしか払ってなくて想定の半分しか財布から減ってないの訳がわからない。お土産をたくさん買うしかない。
— 炬燵 (@sakahukamaki) 2019年4月21日
ジャンキーに無事戻りました。あと普段はそんなに酒飲まないです。
楽しい同室組です
目撃していた人はみんなご存知だと思いますが、RubyKaigiではにゃんこさんに保護されていたおかげで元気に過ごせていたと思うので本当に頭が下がらない(ハックスペースの運営も本当にありがとうございました)
— 桐生あんず (@anzu_mmm) 2019年4月22日
頭は下げてくれ
— nyanco🐈 (@nyanco15) 2019年4月22日
— nyanco🐈 (@nyanco15) 2019年4月22日
いいねそこそこきてて、ここでツイ消し投稿し直しても取り返し付かなそうなのでこのままにしておきます
— 桐生あんず (@anzu_mmm) 2019年4月22日
にゃんこさんには(色々お世話になりすぎてて)頭が上がりません!!!!!!!https://t.co/99pPnyqqkm
布教に成功した
esaのことが頭から離れない感じになってる
— 桐生あんず (@anzu_mmm) 2019年4月21日
ピンク軸から離れると沼が始まる
meishi キット | 遊舎工房 https://t.co/9lSXCitUZ5
— 炬燵 (@sakahukamaki) 2019年4月19日
Mint60のご紹介 - ゆかりメモ https://t.co/OxqswU1NxN
— 炬燵 (@sakahukamaki) 2019年4月19日
自分の名刺とアイコンのシールを作って遊びに行こう~~~と思ってそれぞれ100枚ずつ作って配り歩いたので満足しました。Rubyよりもpecoが好きな感じのあれです。peco知らないって人が多くて結構びっくりした。楽しいし楽なのでぜひどうぞ。
people = %w(高橋 田中 谷口) idx = 0 people.each do |person| puts "#{idx}: #{person}" idx += 1 end #=> 0: 高橋 #=> 1: 田中 #=> 2: 谷口 people.each_with_index do |person, idx| puts "#{idx}: #{person}" end #=> 0: 高橋 #=> 1: 田中 #=> 2: 谷口 people.each.with_index(0) do |person, idx| puts "#{idx}: #{person}" end #=> 0: 高橋 #=> 1: 田中 #=> 2: 谷口 people.each.with_index(5) do |person, idx| puts "#{idx}: #{person}" end #=> 5: 高橋 #=> 6: 田中 #=> 7: 谷口
each_with_index
はブロック変数の2個目に0から始まる添え字を突っ込む。冒頭の例、each
内でidx
という変数をこねくり回すのと同じ動きだ。
each.with_index(start)
は、ブロック変数の2個目に任意の数値から始まる添え字を突っ込む。0を指定すれば0からカウントするし、5を指定すれば5からカウントする。
アプリケーション内で Time.new.to_s
したときのフォーマットを指定できる。
対象としては、TimeクラスとDateクラス。
created_at.strftime('%Y/%m/%d %H:%M')
みたいなヘルパを大量に定義している場合、まとめて定義してしまったほうがいい。
定義したら、READMEなりナレッジなりに明記して周知すること。
config/initializers/time_formats.rb
などに定義するとよさそう。
余談だけど、Rails5からconfig/application.rb
にごちゃごちゃ書くのは非推奨になったので、アプリケーションに関連する定義は config/initializers/*.rb
に切り出すのが良い。
# date = Time.local(2009,12,24,15,30,27) Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M' # "2009/12/24 15:30" Time::DATE_FORMATS[:datetime] = "%H:%M %d-%b-%Y" # date.to_s(:datetime) ----> 15:30 24-Dec-2009 Time::DATE_FORMATS[:date] = "%d-%b-%Y" # date.to_s(:date) ----> 24-Dec-2009 Time::DATE_FORMATS[:time] = "%H:%M" # date.to_s(:time) ----> 15:30 Time::DATE_FORMATS[:google] = "%Y-%m-%d %H:%M:%S" # date.to_s(:google) ----> 2009-12-24 15:30:27 # In rails, output of a date field uses Date::DATE_FORMATS[:default] Date::DATE_FORMATS[:default] = Time::DATE_FORMATS[:date] # To display the current date and time in all the formats in your current environment: Time::DATE_FORMATS.keys.each{|k| puts [k,Date.today.to_s(k)].join(':- ')} Time::DATE_FORMATS.keys.each{|k| puts [k,Time.now.to_s(k)].join(':- ')} # date.to_s(:date) #=> "2018年4月1日(日)" Time::DATE_FORMATS[:date] = ->(t) { t.strftime("%Y年%-m月%-d日(#{%w(日 月 火 水 木 金 土)[t.wday]})") }
[日付/時間フォーマットのデフォルトを設定] (https://qiita.com/Vit-Symty/items/399c77d1fd681b77d593)
ActiveStorage::BlobsController
の該当アクションを上書きする
devise
入りなので user_signed_in?
とか current_user
とか使ってるけど、そこは良しなに読み替えてほしい
# config/routes.rb get "/blobs/:signed_id/*filename" => "blobs#show", as: :authenticated_blob_path
# application_helper.rb module ApplicationHelper def authenticated_blob_path(blob, **options) route_for(:authenticated_blob_path, blob.signed_id, blob.filename, options) end end
# brobs_controller.rb class BlobsController < ActiveStorage::BlobsController def show unless user_signed_in? flash[:alert] = "ログインしてね" redirect_to root_path and return end super end end
# view/xx.slim - link_to "ダウンロード", authenticated_blob_path(@xxx.file, disposition: "attachment")
rails/blobs_controller.rb at master · rails/railsで実際のダウンロード処理をしているので、それを上書きする。
rails_blob_path
とかは実際rails/routes.rb at master · rails/railsで定義されているので、それをまるっとパクった形になる。