スマートフォンで閲覧する時は改行してほしい。PC では改行してほしくない。
みたいなデザインを実装している時に、同僚の @kechol 氏にレビューで教えていただいたのでメモ
See the Pen Responsive Line Break by Masato Ohba (@ohbarye) on CodePen.
CSS のメディアクエリで改行タグの display スタイルを操作すればよい
スマートフォンで閲覧する時は改行してほしい。PC では改行してほしくない。
みたいなデザインを実装している時に、同僚の @kechol 氏にレビューで教えていただいたのでメモ
See the Pen Responsive Line Break by Masato Ohba (@ohbarye) on CodePen.
CSS のメディアクエリで改行タグの display スタイルを操作すればよい
『7つの言語 7つの世界』を読みつつ Clojure 入門している。その中でマクロに関する記述があったが LISP のマクロに馴染みがないので、コードを見ても何が起きているのか瞬時にわからなかった。
正解のコードを少しずついじりながら、なぜそう書かないといけないのか、なぜそう書くと動くのかを確かめてみた。
ちなみに例は unless
で、これはマクロ入門でおなじみらしい。
まずは挙げられているダメな例から。
(defn unless [test body] (if (not test) body)) #'user/unless (unless true (println "Lose Yourself")) Lose Yourself nil
body
が評価されてしまっている。test
が false
のとき以外は評価してほしくない。なのでこれがダメなのはわかりやすい。
正規順序でなく作用的順序で評価してしまうと無限ループが発生してしまう例が SICP にもあった(気がする)。
以下のようになるようだ。
(defmacro unless [test body] (list 'if (list 'not test) body))
これをいじってみる。
if
を即時評価していないのはなぜ'if
の部分は以下のように書けるのではないだろうか?
(defmacro unless [test body] (if (list 'not test) body)) (unless true (println "Nothing to tell.")) Nothing to tell. ;; 評価されてしまっている nil (unless false (println "This is it.")) This is it. nil
はい、body
が評価されてしまっているダメ。
(macroexpand '(unless cond body)) body
上記の unless をマクロ展開してみると body
を実行するだけのマクロになってしまっていることがわかる。
not
を即時評価していないのはなぜでは、'not
の部分は以下のように書けるのではないだろうか?
(defmacro unless [test body] (list 'if (not test) body)) (unless true (println "Nothing to tell.")) nil (unless false (println "This is it.")) This is it. nil
一見成功しているように見える…!
だがそれが命取り…!実は駄目…!
上記の unless をマクロ展開してみると条件部が既に評価されてしまっていることがわかる。
(macroexpand '(unless condition body)) (if false body) ;; 条件は false になるのに println が実行されない (unless (= 1 2) (println "This is it.")) nil
正しい unless
をマクロ展開すると条件部がまだ評価されていないことがわかる。
(macroexpand '(unless cond body)) (if (not cond) body) ;; ちゃんと unless 呼び出し時に評価されている (unless (= 1 2) (println "This is it.")) This is it. nil
defn
で書いたらどうなる?(defn unless [test body] (list 'if (list 'not test) body)) (unless true (println "Nothing to tell.")) Nothing to tell. (if (not true) nil) (unless false (println "This is it.")) This is it. (if (not false) nil) (class (unless false (println "This is it."))) This is it. clojure.lang.PersistentList
(list 'if (list 'not test) body)
が評価されてしまった後のリストが返ってくる。body
も評価されてしまっているので println
が実行されている。
評価してほしくないフォームに quote 関数を適用すると評価を抑制できる。
ダメなマクロの例を成り立たせるために body
を'
で遅延評価させられる。もちろん呼び出し側でコントロールしているのでよくない。
(defn unless [test body] (if (not test) body)) #'user/unless (unless true (quote (println "Lose Yourself"))) nil ;; ' 記号でも書ける (unless true '(println "Lose Yourself")) nil
defmacro
は defn
のように関数を定義するが、その戻り値は実行時にコンパイラにマクロとして解釈されるようになる。
(doc defmacro) ------------------------- clojure.core/defmacro ([name doc-string? attr-map? [params*] body] [name doc-string? attr-map? ([params*] body) + attr-map?]) Macro Like defn, but the resulting function name is declared as a macro and will be used as a macro by the compiler when it is called. nil ;; 確かに Macro と解釈されているようす (doc unless) ------------------------- user/unless ([test body]) Macro nil nil
ダニエル・アトラスら4人の男女で構成されたマジシャンチーム“フォー・ホースメン”がラスベガスでショーを行うのと同時にパリの銀行から金を盗み出すという大技を行う。FBI特別捜査官のディラン・ローズとインターポールが彼らの犯罪を阻止しようとするが、失敗して途方に暮れ、マジックの種明かしの名手サディアス・ブラッドリーに助けを求める。 グランド・イリュージョン (映画) - Wikipedia
映像美もあるし題材ならではの謎解き感もあるし、何よりクライムサスペンスなので全体的にスカッとして良かった。テンポもよい。
4人組のキャラクターもそれぞれ魅力的だし俳優陣も良い。特にゾンビランドのコロンバスとタラハシのコンビの再演は熱い。
マジシャンの常套句を使っている原題の方がどう考えても格好良いと思う。
というか “Now you see me” (見えますね) を使わないと作品の中の “Now you don’t!” (はい消えた!) が通じなくなるというか、軽くなってしまうような…。
「いやぁーそれは無理でしょ」と突っ込みたくなるようなショーマジックを観ていると「うーん、映画だなぁ」と一歩引いてしまう。実際のマジックも「いやぁー無理でしょ」というものなんだろうけど、ライブ感ゆえにそこに注意はいかない("近づくほど見えなくなる"から)。
映像の面白さとしては"有り"だし、必然性があってそう描かざるを得ない"映画的な嘘"については物凄く好きなのだが、一歩惜しかった印象。
年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしており、5月は主に物件探しに打ち込んだ。
物件探しは妥協したくないのだが仕事の片手間にやるのもなかなか大変だ。物件検索サイトをずっとウォッチしているのもストレスになるし、探す期間に終わりが見えないと辛い。というわけで5月にもろもろ片付ける勢いで頑張った。
以下の記事にまとめた通り、条件に見合う良い物件が見つかった。
条件には書かなかったが「光回線インターネット無料」「ミストサウナ付きバスルーム」など予想の斜め上の特典も付いてきて嬉しい。
ブコメにも「賃貸物件探しによくそんなにリソース割いたな」とあったけど、自分でもそう思う。1ヶ月で集中して終わらせるという気持ちを最初から持って臨んだおかげでなんとかなったと思う。
引越しの記事が思っていた数十倍バズってて驚いてる
— 広島の粗大ゴミ (@ohbarye) 2017年6月11日
言語学習(英語)とか引越しとか、社会性動物の尽きない悩みなので内容同じでも何度でも焼き直せそうな感じはあるな
PV / はてなブックマーク数の比が技術系の記事でバズったときより圧倒的に大きいのでどうやら"異方"に届いているようだ
— 広島の粗大ゴミ (@ohbarye) 2017年6月11日
ブログに入れた Google Analytics が初めて見ていて面白い感じになった。SmartNews からも来てるのか pic.twitter.com/AtNMxsNopN
— 広島の粗大ゴミ (@ohbarye) 2017年6月11日
ヨッピーさんの下に自分の名前あって光栄 pic.twitter.com/PIyvuiUsf6
— 広島の粗大ゴミ (@ohbarye) 2017年6月12日
1100強ブクマであわせて22000PV、このブログ1年分のアクセスだ…。
純粋に嬉しい。
が、今日職場でプロダクトマネージャーと卓球しながら雑談していたら「あんな内容でバズるんですね?」と煽られた。彼もまた引越しのベテランのようなのでそのうち知見を公開して欲しい(見積書みたいなのを作って業者に埋めさせるとか言ってた)。
ちょっと楽器を弾きたくなったので Victor Wooten の “Sometimes I Laugh” を頑張ってコピーした。
スタジオ版だとベースが何本も重なっているが、1本で弾けるようアレンジしているベーシストが Youtube で何人か見つかる。その中で最もかっこよかったこの人のアレンジをコピった。
途中で不可能ぽい運指があると思ったら12フレットのハーモニクスで音を繋いでいる箇所(0:49)があってけっこう感動した。
いろいろあり引っ越すことにした。
学生時代も含めるとこれが4回目の賃貸物件探しだ。過去の引越しも、その時々で良い物件を見つけられたと思っているのだが…どの体験もあまり満足度が高くなくて若干トラウマ感があった。
今回物件を探すにあたってこうした過去を乗り越えることにした。
はてブが集まっている人気記事などを読んでみると、どうやら引越しや賃貸物件探しの満足度が低い原因は「ネットで物件探しを済ませようとする」「良い不動産屋を探していない」ことなどにあるらしい。
特に
今回は良い物件を探すのではなく、良い不動産屋を探すという方向に考えを変えることができたのが良かった。 部屋探しは面倒、suumoやhomesで探しててもよく分からない、自分より物件探しのプロの不動産屋の方が物件探しは得意なんだからそこに任せたほうが結果的に良いだろう、なら任せられる人を探そうという感じ。 良い物件ではなく良い不動産屋を探した - $shibayu36->blog;
この考えに強く共感した。
早速まねする形で良い物件、もとい良い不動産屋探しを始めた。
今回の物件探しにおいて参考にしたサイトは以下です。大変助かりました、ありがとうございます。
良い物件ではなく良い不動産屋を探した - $shibayu36->blog;
http://www.swatz.net/entry/2014/01/16/211550
一部アレンジしているが、だいたいは上記サイトに書いてある通りに進めた。
ネットで探して即内覧とか、無策でとりあえず不動産屋に行ってみるといったアンチパターンを避けて、念入りに不動産屋を選んだ。
これはどっちでも良いと思うが、万一悪徳な不動産屋に情報を流されたりするといやだなと思って作成した。
プライベートアカウントに来るメールもそこそこ多いので、それらに混ざって不動産屋からの連絡を見落とさずにすんで良かった。
家庭で話し合って決めた。夢が広がってめっちゃ細かい要望とかも出てくるので Must 条件と Want 条件に分けた。
分け方は人それぞれだが 、油断すると全部 Must になってしまうので Must は5個まで、それ以外は Want、みたいな線を引くとよい。
決めた条件でテンプレートを作る。上記記事にもあるように「電話してほしくない」感を全面に出す。
実際、オンだろうがオフだろうが電話してほしくないし、なぜか不動産屋は留守電も残さず切ることが過去に多くてむかついていたので強調した。
また、この段階でもし理想に近い物件をネットで見つけられていたら参考までに付け加えておくとよい。後述するが、初回の回答でこの候補物件が空いているかどうかを見てくれる業者もいる。
送信したあとに何件かの業者から質問があったので以下の情報も足しておくと良さそう。
ちなみにドラム式洗濯機が置けるかどうかは管理会社も知らないし図面でも読み取れないことが多い。日当たりとか、こういう内覧しないとわからないような情報は書かなくても良さそうだ。
HOMESなどのサイトに、エリア別の不動産業者一覧がある。評価の高い順にソートし、評価の高い不動産屋リストを作る。
効率的な賃貸物件の探し方 | nanapi [ナナピ]では30社とあるが流石に多すぎて管理しきれないと思って10社にした。
テンプレートでまとめて問い合わせる。
不動産屋のホームページにはだいたい問い合せフォームがあるのでそこから問い合せる。ここで電話番号が必須になっている業者は候補から外す。問い合せフォームもメールアドレスの記載もない業者も外す。
問い合わせフォームがある場合は問い合わせをシステムで一元管理したいと思っているはずなので、記載されているからといってメールアドレスに送るのはやめよう。
余談だが、どの会社も問い合わせフォームが相似していて、不動産業向けの大手の ASP がいるんだなぁなどと思ったりした。
一番早いところだと5分で回答が来たが、いまだに回答が来ない会社もある。(それが悪いというわけではないおそらく別経路での流入・獲得に力を入れているのだと思う)
ただ、早さだけでは良い業者かどうかは測れない。挨拶程度のみの回答に「電話でなら…」とか「直接来店いただければ…」と付け加えてくることもある。コミュニケーションの期待値がずれているので早めに断る。
問い合わせ時に書いた「理想に近い物件」の空室状況をシュッと調べてくれるとか、初回の回答で候補物件を提示してくれる業者もいて、彼/彼女らには良い意味で期待を裏切られた。
10社と並列にやり取りしていると訳がわからなくなる。そのあたりの印象を忘れないために Google Spreadsheet を作ったりもした。自分で言うのもなんだが返信順でランク付けしたりしてるのはちょっと病的ぽい。
また、やり取りを途中からメールではなくノマドクラウド社の提供するサービスに切り替えてきた業者も幾つかいた。自分専用のマイページがパーマリンクで用意されていて、チャットUIでコミュニケーションできる。不動産屋も進化してないと言われつつ進歩しているんだなぁと思いつつ、こういうITツールを使いこなせるリテラシーの高さを持つ業者には信頼が増す。
だいたい2~4往復ぐらいやり取りすると信頼できそうな不動産業者が見えてきた。とにかく来店させようとする業者、だんだん雑 or 機械的になる業者(こんな面倒な客、そりゃそうだと)、いろいろ紹介してくれるけどいまいちな物件が多い業者…。
そういうのをサクッとお断りし、良さそうな物件を紹介してくれてなおかつ対応も非常に真摯だった2社から、一方を選んでようやく来店予約をした。何度も足を運びたくないので来店のタイミングでなるべく多く内覧させてほしいと伝えた。
もしこの時点で1社も候補に上がらなかったら問い合わせからやり直していたと思う。
出会って初めてようやく自分のやってきた「良い不動産屋探し」が正解だったのかわかる。メールでは丁寧だがヤバいやつが出てきた時の対応も覚悟して訪れた。出てきたのは、不動産屋らしき押しの強さもなく、説明も丁寧で必要十分、そして速水もこみち風のイケメン。
不動産業者の経験年数にこだわる必要はないと思う。説明能力や家賃交渉力などは年次が高い人の方が優れているのかもしれないが、とにかく押せる営業マンが勝ってきた不動産業界に染まったおじさんが多いのもたぶん事実。前々回の引越しではすごく押しの強いオッサンがこちらを明らかにナメた感じで話してきたのできつかった。
良い気持ちで取引したいならそこそこ能力のあり、かつ誠実さがありそうな若手社員の方が個人的には相性がよい。
内覧のコツについては物件探し確認事項 - ポクポクに全てが書かれている。メジャーを持っていってドラム式洗濯機が置けるかどうかを見たり、室内外の写真や動画を撮ったりした。
図面や事前に見た写真は良くても共用部が汚かったりゴミ捨て場が荒れていたり住民が不穏な感じだったりするので難しい。
一通り内覧が終わった後に「気に入った物件があれば申し込みしておいたほうが良いかと思いますが…」というセールストークが来るのはわかっていて、これをかわす術も考えていたのだが、紹介してくれた中に良い物件があったのでお願いした。
これまでの経験だと「では一度弊社に戻りまして…」となっていたのだが、「では必要書類をお持ちしているので手狭ではありますが車内で(ニコッ」となったのにはキュンとした。移動時間も短縮できてよいし、確かに営業所に戻る意味ないよな…。これが今のスタンダードなのだろうか。
その場で車を降りて去ろうとしたら「今日はお暑いですからご自宅までお送りいたします(ニコッ」となってまたキュンとした。
一度契約が決まってしまえば対応が雑になるということもなく、審査など諸々のフォローもしっかりしてくれた。
提携している引越し業者を紹介してくれる & 紹介なので少し安くなるというので見積もりをお願いした。結果、35,000円程度で前回の引越しより2万円近く安くなってびっくりしたので即決した。
引越し業者選びも不動産仲介業者選びと同じかそれ以上に面倒なのでこれもサクッと済んでよかった。相見積もりとったり、日程調整で値段変動させたり、疲れる。
放置し続ければそのうち連絡が来なくなるかもしれないが、真摯に探してくれた業者には申し訳ないのでお礼とお断りの連絡をしておく。
物件をお探し頂いているなか大変申し訳ありませんが、 今回は他仲介業者経由で契約する運びとなりました。 またお力が必要になった際にはご連絡いたします。 ご尽力ありがとうございました。
ちなみに対応が悪かった時の断りは「引越し時期を見直すので連絡は結構です」という主旨の別パターンを用意していた。
最初は余計な手間がかかるんじゃないかと思いつつも結果として良い不動産屋に出会えたし、自分たちでは見つけられなかった良い物件を紹介してもらえた。満足度が高い。
特に、会う前にコミュニケーションすることで良い不動産屋に出会えるだけでなく、裏を返せば態度がよくなさそうだったり紹介する物件が微妙な業者に出会うリスクがガクッと減ったと思う。
改めて感じたが引越しの一連の流れは本当に大変で、引越しの余計なストレスをなるべく減らしたいからこそ感じが良く信頼できる不動産屋を選ぶのは大事。
自分が不動産業者だったらこんな客は相手にしたくないかもしれない。
Clojure では分数を扱う Ratio 型がある。
user=> (/ 22 7) 22/7 user=> (class (/ 22 7)) clojure.lang.Ratio
Integer や Float にいつでも変換できる。
user=> (int (/ 22 7)) 3 user=> (float (/ 22 7)) 3.142857
rationalize
は面白い。引数を有理数に変換するのだが、返り値は様々。
user=> (rationalize 1.5) 3/2 user=> (class (rationalize 1.5)) clojure.lang.Ratio user=> (rationalize 1N) 1N user=> (class (rationalize 1N)) clojure.lang.BigInt user=> (rationalize 1.00) 1N user=> (class (rationalize 1.00)) clojure.lang.BigInt user=> (rationalize 1) 1 user=> (class (rationalize 1)) java.lang.Long user=> (rationalize 4/2) 2 user=> (class (rationalize 4/2)) java.lang.Long
test する関数は ratio?
と rational?
がある。
user=> (doc ratio?) ------------------------- clojure.core/ratio? ([n]) Returns true if n is a Ratio ;; 型が Ratio のときのみ true user=> (ratio? 4/3) ;; Ratio true user=> (ratio? 4/2) ;; これは Long false user=> (ratio? 2) ;; Long false user=> (ratio? 2.0) ;; Double false
user=> (doc rational?) ------------------------- clojure.core/rational? ([n]) Returns true if n is a rational number ;; 有理数であれば true なので整数(Long)にも true を返す user=> (rational? 4/3) true user=> (rational? 4/2) true user=> (rational? 2) true user=> (rational? 2.0) false
友達のアメリカ人とヒップホップの話をするたび
「そろそろ『8 Mile』観たか!?」
「観てない」
というやり取りを繰り返していたのだが、Netflix についに来たので観た。
映画史に残る(らしい)8 Mile
で検索すればすぐ出てくるこのシーン。今まで何言ってるかわからなかったのだが映画の流れでようやく理解できた。
この作品の何が良いって、ステージで何も言えなくて職を失ってボコられて寝取られて人種差別を受ける*1主人公のジミーが最後のラップバトルで勝つのはそうした底辺の生活を送るがゆえ、というところ。ジミーはバトルの持ち時間90秒が切れたあとにも手当たり次第 “Fuck ” をぶつけ続けるが、そうやって全てのものを攻撃できるのは彼が何も持たず、何も失わないからこそ。
こういう最弱が最強みたいなスタイル、ワナビーの心をくすぐる…。
ラップバトルで大勝利したあと、最後の最後で仲間から離れて「仕事に戻る」と言って去っていくジミーがそれまでと比べて格段に格好良い。
いつまでもボンクラ仲間と遊んでて大成しないことに気付き、レコーディングのためのお金を貯める堅実さ。成功するために通らなければならない孤独ってこういうものだと思うんですよね。個人的に『舟を編む』が好きになれないのは一生をかけた仕事を貫く主人公にあまりに簡単に女が寄ってくるという一点に尽きるのだが、『8 Mile』は徹底している。
『Fuck the police』に続いて『Lose Youself』練習してみようかな。
*1:「ヒップホップは黒人のものだから白人は帰れ」という罵倒がある