へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

Resolving AttributeError: 'FlakesChecker' object has no attribute 'JOINEDSTR' on flake8

Error

Traceback (most recent call last):
  File "/root/.pyenv/versions/3.6.1/bin/flake8", line 11, in <module>
    sys.exit(main())
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flake8/main.py", line 33, in main
    report = flake8_style.check_files()
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flake8/engine.py", line 181, in check_files
    return self._retry_serial(self._styleguide.check_files, paths=paths)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flake8/engine.py", line 172, in _retry_serial
    return func(*args, **kwargs)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pep8.py", line 1840, in check_files
    self.input_dir(path)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pep8.py", line 1876, in input_dir
    runner(os.path.join(root, filename))
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flake8/engine.py", line 126, in input_file
    return fchecker.check_all(expected=expected, line_offset=line_offset)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pep8.py", line 1574, in check_all
    self.check_ast()
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pep8.py", line 1520, in check_ast
    checker = cls(tree, self.filename)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flake8/_pyflakes.py", line 62, in __init__
    withDoctest=withDoctest)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 295, in __init__
    self.runDeferred(self._deferredFunctions)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 332, in runDeferred
    handler()
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 823, in runFunction
    self.handleNode(stmt, node)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 609, in handleNode
    handler(node)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 567, in handleChildren
    self.handleNode(node, tree)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 609, in handleNode
    handler(node)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 567, in handleChildren
    self.handleNode(node, tree)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 608, in handleNode
    handler = self.getNodeHandler(node.__class__)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/pyflakes/checker.py", line 462, in getNodeHandler
    self._nodeHandlers[node_class] = handler = getattr(self, nodeType)
AttributeError: 'FlakesChecker' object has no attribute 'JOINEDSTR'

How to resolve

You probably use f"{foo}" syntax and older flake8. So update to latest flake8.

WiFi経由でネットに接続しようとしたときに、SSIDが見つからなかったのでやったこと(Windows)

現象

Mac OS Xからはアクセスポイントに接続できるのに、Windows10からだとそもそもアクセスポイント(SSID)が見つからない。
iPhoneKindleからは接続できるので、
おそらく Windows10・Windows10を入れているPCやネットワークインタフェース・ルータ 周りが問題だろうとあたりをつけていろいろと試した。

結果としてはうまく動き出した。

Windows10を入れているマシンはLazer Blade Stealth。

試したけどダメだったこと

  • Windows10 再起動
  • ルータ 再起動
  • Windows10でデバイスマネージャを開き、ネットワークアダプタを削除(削除しても再起動すれば再度インストールされる)

人によってはうまくいくと思う。

成功したこと

  • ルータで、WiFiのチャンネル設定を自動から1に変えてみた(電波の周波数をかえる)

所見

たぶん人によっては1では動かなくて3とかで動いたとかあると思う。このへんは電波干渉とかいろいろあるらしいのでよくわからない。とりあえずチャンネルは1か6か11にするといいみたい。
(チャンネルっていうのは、テレビやラジオのチャンネルとおなじで、周波数変えてるだけ)

Macとかではネットできるので、
電波は来てるけどノイズが酷くてLazer Bladeに入ってた受信機では検出できなかったとかそんな感じだろうか。
無線LANの子機買ってきてLazer Bladeにつけたらたぶん問題なくなりそう。

「どうやってわかりにくい文章に立ち向かうか」の備忘録(わかりにくい文章の読み方)

はじめに

世の中には大量のわかりにくい文章があって、そしてそれをどうしても読まなければいけないときがある。

にも関わらず、「わかりにくい文章」でググると、「わかりにくい文章はわかりにくいよね〜」「わかりにくい文章書くやつはダメなやつ!」「このようにわかりやすく書きましょう」という結論で閉じられていることが多い。

確かにそれはそうなんだが、それは自分が気をつけるもので、人に強要できるものではない。

そこで、その読み方を書いた。

わかりにくい文章

わかりにくい文章の特徴はおおむね以下のようだとぼくは勝手に思ってる。

  • 文の意味をいろんなふうに取れる
  • 論理展開・起承転結がおかしい
  • 「てにをは」等、助詞の使い方が間違っている
  • 知らない用語が前置きなく急に出現する
  • 文構造がマジキチ
  • 読み手のことをあまり考えていないオナニー文
  • 誤字脱字が激しい
  • 冗長
  • 余談・無関係な話が多い

この記事では、こういった特徴を持つ文章に対してぼくが実践している策略みたいなものをつらつらと書いていく。 自分用に備忘録として書いているので、そのうち気が向いたら更新するかもしれない。

「わからない」 と思っていることに気付く

文章を読んでいる際に、「よくわからない」といういや〜な感覚が襲ってきたら、「あ、自分、よくわかってないぞ!」ということを認知する。

実は、「わからない〜わからない〜」って言っているときは「自分、わかっていない!」ということに気づけていない。

こういうときは「つらい〜つらい〜」が先行していて、「わからない」とか言いつつもわかろうとしたいわけじゃなくて、つらい気持ちから脱出したいだけなのだ。

だから、もっと深呼吸して冷静な気持ちになって「お???わかってないのか!!!!!!!つらい!!」と前向きな気持ちでわからないことを認識するのがだいじ。

まず「わからない」ことが認知できないと、「自分がわかってないということすら知り得ない」状態に陥っていることになる。

認知することによって、「どうやら自分はこれがわからないらしい!」と客観的に評価することができる。

とりあえずわからなくても読み進めてみる

わからないなりに、とりあえず読み進めてみることは重要だ。

『「わからん」と思って投げ出そうとしたら、次の行に解説があった!』なんてこともある。

100%の理解をせず、とりあえず読み進めてみることで、体系的に知識を得ることができて、もう1度読んだときに理解できることもある。

なにがわからないのか分析してみる

わからないと思っている文章を分析してみる。

なぜ文の意味がわからないのか、どこの単語が意味不明なのか、文脈から判断してみるとか、そもそも文の構造がおかしいのかとか。

どこからわからなくなったのか戻ってみる

いまわからない原因は、いま表面化しただけであって、実際には、わからない箇所は「わかったと思いこんでいる箇所」だったという可能性すらある。

特に、「何がわからないかわからない」ようなときは、「わかったと思っているが実際はわかっていないこと」がある場合や「わからなくてもいいと判断して読み進めた」場合などに多い(個人的に)

一度立ち返って見てみると、「『わかってなかったんだ!』ということを知る」こともある。

筆者も実はそれほどわかってないことがある

いままで平易な文章だったのに、あるときから急激に難しくなった場合、筆者がごまかしを入れている場合もある。

この場合「筆者はそう考えているようだ」と考えて「筆者の考え方」を取り入れるようにシフトすると「わからないけどそうなんだね」となり、わからなくても読めるようになる。

わからないことがカバーされていなかったり省略されている

「なんでそうなるの?」と思ったことが、かなり核心をついていたり、難しいことだったために簡略化されていたり、本の中で情報が網羅されていなかったり、未解決問題だったりすることがある。

ものごとを簡単に説明するためにいろいろと詳細な情報を削った結果、若干不自然な部分が生まれることがある。

そういう部分に鋭い関心を抱くことはいいのだが、前に進めなくなるので「不思議だな」と考えたりするといい。

前提知識が足りていない

読むのに必要な知識が足りていないせいで、読むことが困難になっている。

読者のレベルを高く設定しているために、知識がないと読み進めることができない。

「何を前提知識として求められているのか」を調べる必要がある。

たいていの文章には、「何が前提知識なのか」は書かれていない。

たとえばこの記事は、最低でも中学3年生程度の読解力(特に漢字)を必要としているが、こう書かれるまでこういった暗黙的な前提知識は認知できない。

(ここまで読める人には『当然』の知識でも、ここまで読めない人にはこの記事自体が『難しい』知識である)

筆者を信用する

筆者を疑うと、その後すべての文章に対して疑心暗鬼になる。

いかに疑った場合でも、ひとまず筆者をリスペクトして、「筆者はそう考えていて、その考えを取り入れよう」とすることが肝要。

中にはそれでも酷い文章もあるが、とりあえず第一として、人を信用することが大事。

筆者がうんこすぎる

💩

わかりにくい文章への立ち向かい方の具体的な例1

たとえば以下の文章は、

どうにかして欲しい。お役所の文章は何故わかりにくいのか - エキレビ!(1/2)

にて、「わかりにくい」として引用されているのだが、実際には「わかりにくい」というよりも、「より具体的に説明するため、あるいはカッコよく見せるために専門用語を使用している」のだと思う。

インターネット黎明期の1996年に創業。日本で初めてISP向けにカード決済を利用した「RTSシステム」を開発して以来、電子商取引(EC)にフォーカスし、アプリケーションパッケージの開発、コンサルティングを行ってきた。特にECサイトのバックオフィスを支えるパッケージソフトの開発やライセンス事業、ソリューションに特化し高機能を実現。いわゆるデファクトスタンダード…

もちろんカタカナによって、じゃっかん曖昧にされている部分もあるとは思うし、「カタカナばかりでうさんくさい」と思う気持ちもわかるけど、

多くの人は「ISPRTSシステム?EC?アプリケーションパッケージ?バックオフィス?パッケージソフト?ライセンス事業?ソリューション?デファクトスタンダード?」と、文に意味不明な用語が含まれまくっているので、「わかりにくい」のだと思う。いわゆる前提知識が足りていない状態で、想定されている読者の範囲外だったというわけ。

ひょっとしたら「黎明期・カード決済・フォーカス・コンサルティング」等もわからない人がいるかもしれない。

ひとまずこういう文を見かけたら、知らない単語に印をつけてみる。

そうすると「あ、こんだけ知らないのか。それは読めないわ」となる。

わかりにくい文章への立ち向かい方の具体的な例2

これは「おはなしの記憶」という小学校受験に使われている問題らしい。(「話の記憶が苦手」を克服するには [小学校受験] All Aboutから引用)

森の動物たちがかけっこをするのであつまってきました。はじめにウサギさんがやってきました。2番目にゾウさんがきました。そのつぎにネズミさんがきました。最後にライオンさんがやってきて、「キツネさんとパンダさんはお腹をこわしてお家で寝ている」と言いました。

ブタさんが「ようい、どん!」と合図をすると残りの動物たちが走り出し、ウサギさん、ライオンさん、ゾウさんの順にゴールしました。ウサギさんが「ぼくライオンさんに勝てるとは思わなかったよ」と言ったので、みんなが笑いました

これを耳で聞いて、その後次のような問題を出されるようだ。

■絵を見てかけっこで走らなかった動物に○をつけましょう
■絵を見てかけっこで2番目にゴールした動物に△をつけましょう。

これは専門用語も何もない文章だけど、記憶したりイメージしたりできないと大人も普通に間違える文章だと思う。 しかもこれにアレンジを加えて、論理関係をイメージさせにくくしたり、初見の単語を多くすると、より難しくなる。

海の動物たちが競争をするために集合しました。はじめにイタチザメさんがやってきました。2番目にヒラシュモクザメさんがきました。そのつぎにマオナガさんがきました。最後にオンデンザメさんがやってきて、「ジンベイザメさんは腫瘍で、クロカジキさんは結核で死んでいる」と言いました。

シロナガスクジラさんが「ようい、どん!」と合図をすると残りの動物たちが走り出し、イタチザメさん、マオナガさん、ヒラシュモクザメさんの順にゴールしました。イタチザメさんが「ぼくマオナガさんに勝てるとは思わなかったよ」と言ったので、みんなが虚仮にしました

初見の単語が多いだけで、だいぶ難しくなったと思う。自分で書いておきながら読む気になれない。

ふつうの人はサメの種類なんてどうでもいいし、腫瘍や結核にも親近感はあまりないと思う。しかもそれは具体的にはなんなのか、どう違うのか、なかなか説明がしにくい。

なので、記憶がしにくく、結果的にわかりにくくなっているのだと思う。

これも「馴染み深い言葉」がないせいでわからなくなっているのだと考えて読めば、ただ読むのが億劫なだけで、わかりにくくはないはずだ。

わかりにくい文章への立ち向かい方の具体的な例3

次の文は、長すぎて分かりにくい文章は分ける :読みやすい文章 書き方のコツ | 書き方ができる人コムで例に挙げられている文だ。

人類がいかに進化した生き物であるかという問いには、これまであらゆる説明がされてきたが、まったく次元の違う説明をまとめようとしても、うまくまとまらないし、人類の遺伝子構造がどのような変化をたどってきたかが大切である。

これは実際わかりにくい。論理構造が曖昧だからだ。

綺麗に書くとこうなる。綺麗っていうか、ぼくが把握しやすいように文同士の接続を変えただけだけど。

人類がいかに進化した生き物であるかという問いにはこれまであらゆる説明がされてきたけど、そういうまったく次元の違う説明をまとめようとしてもうまくまとまらないし、やっぱり人類の遺伝子構造がどのような変化をたどってきたかの方が大切である。

こういうふうに自分が理解できるように言語を変換すれば、読みにくい文章でも読めるようになる。

わかりにくい文章への立ち向かい方の具体的な例4

次の文は文の種類とねじれ文が起こる仕組みからとったもので、これはねじれ文と呼ばれるらしい。

日本人にとって肉食の歴史は浅く、肉を食べると脂肪過多になり、また、砂糖や脂も摂りすぎており、肥満や生活習慣病を引き起こす原因になっています。
たんぱく質が多い食物は、牛肉、豚肉、鶏肉などの肉類、牛乳やチーズなどの乳製品、魚介類ではマグロやアジの開き、他の食品では大豆に多く含まれています。

これらの添削については、引用したサイトを見てほしいのだが、こういった文を見かけた際は、まず「論理展開が異常であること」を見抜いて、意味が通るように脳内で変更することが必要だ。(別に紙を使ってもいいけど)

「わからない!!」と唸っている間は、まず「文が異常であること」を見抜けていないことが多い。異常を検出して、そのあと正常に戻す作業が必要だ。

ちなみに、とりとめのない会話の中でこういう正常に戻す作業をしまくると人に嫌われるので注意。コミュニケーションと読解は違う。

わかりにくい文章への立ち向かい方の具体的な例5

これは量子暗号 - Wikipediaからの引用だ。さっきはじめて検索してみた。

量子暗号とは、通常は量子鍵配送のことを指す。完全な秘密通信は、伝送する情報の量と同じ長さの秘密鍵を送信者と受信者が共有することで初めて可能になる(ワンタイムパッドと呼ばれる方式を用いる)。この秘密鍵の共有を量子状態の特性によって実現し、通信路上の盗聴が検出できる。計算量的安全性でなく情報理論的安全性であることと、その実装の基礎が量子力学という物理学の基本法則に基づいていることが特徴である。なお、商用に広く用いられる公開鍵暗号は解読に計算時間が膨大にかかるだけ(計算量的安全性)であり、情報理論的に安全な秘密通信ではない。量子暗号は量子情報理論の、現在のところほぼ唯一の現実的な応用である。

これらを分解すると次のようになる。

  • 量子暗号は量子鍵配送のことを示す
  • 完全な秘密通信は秘密鍵を共有することで可能となる
  • 秘密鍵を「量子状態の特性」によって実現し、盗聴を検出できる
  • 計算量的安全性ではなく、情報理論的安全性であることが特徴
  • 情報理論的安全性の実装の基礎が、量子力学基本法則に基づいていることも特徴
  • 商用に広く用いられる公開鍵暗号は計算量的安全性(計算時間が多いだけ)である
  • 公開鍵暗号は、情報理論的には安全な秘密通信ではない。
  • 量子暗号は、量子情報理論の、唯一の現実的な応用

このようにすれば、「どこまでわかって、どこからわからないのか」が一目瞭然となり、「いまはわからなくてもいい箇所」まで浮き彫りにできる。

たとえば「量子鍵配送とはなにか?」と聞かれれば「量子暗号である」と答えても間違いではない。もしかすると厳密には違うのだろうが。

「どういうところが優れているのか?」と聞かれれば「公開鍵暗号よりも安全であるところ」と答えられる。

翻って、「量子状態の特性とはなにか?」「情報理論的安全性とはなにか?」「量子力学基本法則とはなにか?」と聞かれてもこの文からはわからない。

こういう「どこまでわかって、どこからわからないのか」という分解するプロセスが重要。

わかりにくい文章への立ち向かい方の具体的な例6

これはぼくが書いたオリジナルのクソ文章だ。

空で青いのにと言うが雨は降りませんが限りませんね。
特に山は天気からとても変わりやすかったのかも、朝快晴だけれども夕方からが土砂降りだろうことであります。
山登りするときがしっかりに対策はしながら、十分気がついてくれましょう。

ちなみにこれは「山登りするときは天気に気をつけましょう」という趣旨のものだ。

こういう文章は読む価値がないけれど、こんなのでも読まなければいけないときがある。

こういった文章では、細部に目をやると全然読めなくなる。助詞がめちゃくちゃ、文の繋がりとは何かを完全に無視したものである。

しかし助詞を無視することによって大意をつかむことができる。

  • 空 青い
  • 雨 降らない 限らない
  • 山 天気 変わりやすかった
  • 朝 快晴 夕方 土砂降り
  • 山登り とき しっかり 対策 十分

このように単語を羅列して、自分で助詞を補えば、完全に筆者の意図を汲み取れなくても、まあまあの理解を得ることができる。

これを踏まえてさきほどの文章を読むと、かなり読めるようになっているはずだ。

わかりにくい文章への立ち向かい方の具体的な例7

これもぼくのオリジナルの文だ。今度は助詞はしっかりあって機能しており、省くと逆にわけがわからなくなる文だ。

昨日僕は先生なんかが生徒にも教室だけで朝から本や雑誌などを読ませながら教えた授業の内容のみを妻へ息子と娘に家で最後くらいまで理解させるようにとしか言ってなかったのにやろうとすらしてくれなかったのでついに怒ってしまった。

こういった悪文も、やはり分解するに限る。

  • 昨日僕はついに怒ってしまった
  • (なぜか)妻へ息子と娘に家で最後くらいまで理解させるようにとしか言ってなかったのに、やろうとすらしてくれなかったから
  • (なにを理解させようとしたのか)先生なんかが生徒に教室だけで教えた授業の内容のみ【朝から本や雑誌などを読ませながら教えた】

まあこんな文を読まなければいけない状態が続くなら逃げた方が無難かもしれないけど、とにかく、酷い文でも気合さえあれば読めるのだ。

まとめ

基本的に「わからない」ことがあっても、「うーん! わからないなあ(´・ω・)?」と思うくらいのメンタルでいるといい。

「自分がわからないのはバカだからだ」のように考えてしまうのは、かなり早計と言わざるを得ない。

「わかろうとする」「いずれわかるものだ」「そのうちわかるだろ」「今は知識が足りていないからわからんのだ」「わかるわかる絶対わかる気持ちの問題だって」のように考えるのが良い。

「自分がわからないのはコイツがめちゃくちゃな説明をしているからだ」「自分がわからないのはコイツがマジキチだからだ」と考えたほうが精神衛生上とても良い。

それから「こんなものもわからないのかよwww」とか言ってくる輩は、だいたい性格がひん曲がっているので、そういうやつらにメンタルを吸い取られないようにする。だいたいそういうやつらも、しっかりとわかっているわけではない。

重要なのは「わかろうとする」ということで、「あきらめたらそこで試合終了だよ」とか「あきらめんなおまえ」とかそういう気持ちがだいじ。

上記の例も、結局のところ「頑張ってわかろうとした」「あきらめずに読もうとした」結果、わかるようになるのだ。

逆に「うわ、確かにこの例の文は読みにくいな……」とだけ思ってスルーした人にとっては、いまだよくわからないままだろう。

結果精神論なのだが、これは「あきらめなかった結果いいことあった」という訓練をひたすら積んでないとなかなか難しい。要は普段からさまざまな物事に対してあきらめないことがだいじ。

精神論だけじゃわかるわけもないので、ちゃんとわからないことを分析する。数学がわからないのに、分析を間違えて必死で歴史の勉強してもわかるようにはならない。

なぜわからないのか、なにが足りないのか、なにが邪魔しているのか、誰かに聞けばわかるのか、ひとまず保留するのか、ひたすら毎日考えるのか、いろんな手立てを試してみるとわかったりする。

まあまとめると「あきらめずにいろいろ考える」のが大事なわけで……大きく言うと身も蓋もない話だな(´・ω・`)

↓関連しそうな記事 heppoko.hatenadiary.jp

↓関連しそうな別サイトの記事 http://ja.uncyclopedia.info/wiki/%E8%AA%AD%E3%81%BF%E3%81%AB%E3%81%8F%E3%81%84%E6%96%87%E7%AB%A0

誤ってVagrantfile以下の.vagrantなどのディレクトリなどを削除してしまった場合にすること

状況

  • 誤ってVagrantfileがあるディクレトリにある .vagrant ディレクトリを削除してしまった
  • Vagrantで立てたVirtualBoxVMは残っている
  • しかしアクセスできない
  • あたらしく $ vagrant up しようとすると
A customization command failed:

["modifyvm", :id, "--memory", "3072", "--cpus", "2", "--name", "KaeruOldVM", "--natdnshostresolver1", "on", "--natdnsproxy1", "on", "--vram", "16"]

The following error was experienced:

#<Vagrant::Errors::VBoxManageError: There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["modifyvm", "c766d472-87d1-4b37-b826-80fe035ad257", "--memory", "3072", "--cpus", "2", "--name", "KaeruOldVM", "--natdnshostresolver1", "on", "--natdnsproxy1", "on", "--vram", "16"]

Stderr: VBoxManage: error: Could not rename the directory '/Users/usrNeko/VirtualBox VMs/ansible_default_1500964641566_30491' to '/Users/usrNeko/VirtualBox VMs/KaeruOldVM' to save the settings file (VERR_ALREADY_EXISTS)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component SessionMachine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "SaveSettings()" at line 3052 of file VBoxManageModifyVM.cpp
>

Please fix this customization and try again.

のようなエラーが出る

何がおこっているのか?

  • Vagrantは、通常 Vagrantfile.vagrant にある情報を見て動作するのだが、その .vagrant が消えてしまった。
  • .vagrant がないので、新たにVMを作ろうとした。
  • あたらしく作ろうとしたが、以前つくったVMと名前がダブっている。(VERR_ALREADY_EXISTS)
  • ダブっているのでRenameできなくてエラー

解決方法

注意

ホストマシンでのコマンドは % foo、ゲストマシンでのコマンドは $ fooで書きます

とりあえずsshでログインできるようにする

VirtualBoxVMは残っているので、まずVirtualBoxからログインする(パスワードは通常vagrantと入力すればログインできる)

$ cat ~/.ssh/authorized_keys で、以前の.vagrant下にあった秘密鍵と対応する公開鍵があるかどうか確認する。ないとおかしい。

もし対応する秘密鍵を既にもっているのなら、以下は不要なので、★★★の箇所まで移動してください。

公開鍵がわかったからといって、秘密鍵がわかるわけではないので、新しく鍵ペアを生成する。

ホストマシンで % ssh-keygen -t rsa をして、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を生成。

(※あたりまえだが、ゲストマシンでssh-keygenをしないこと。ゲストマシンでやると、秘密鍵を移動する必要が出てくる。公開鍵は別に誰かにバレても問題ではない。もちろんバレるよりかはバレない方がいいけど)

生成されたid_rsa.pub というファイル名をauthorized_keys に変更し、ゲストマシンの ~/.ssh/ 下に置く。 この段階ではホストマシンから接続できないと思うので、たとえばGithub等に公開鍵をあげておいて、ゲストマシンから $ git clone https://あなたのレポジトリ などのようにするのがオススメ。

うまくゲストマシンに ~/.ssh/authorized_keys として配置できたら、

$ chmod 600 ~/.ssh/authorized_keys

その後、 % vagrant ssh-config で出てくる

★★★

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile ~/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

の情報に、秘密鍵を紐付ける。

% mv ~/id_rsa ~/.vagrant/machines/default/virtualbox/private_key

のようにして、秘密鍵の情報を置き換えてやる。 % vagrant ssh-config 自体は動かないかもしれない。

これで接続できるようになった。

あとは~/.ssh/config に↑の情報を登録すれば、% ssh default でログインでき、[vagrant]$のようになるはず( ‘ω’)

バーチャルマシンへの向き先を以前のものに変更する

ログインできるようになったからといってもまだ解決はしていない。 今あるVagrantfileで生成されている.vagrantディレクトリには、バーチャルマシンの情報があるが、その情報が、新しいバーチャルマシンになっている。 これを既存のものに変更する。

% VBoxManage list vms すると、VirtualBoxでのバーチャルマシンの一覧が出る。 VBoxManageVirtualBoxをコントロールするコマンド。 このIdとかVboxManage コマンドをもとにVagrantはバーチャルマシンを管理・変更している。

↓さっきのエラー画面にもそう書いてある。

["modifyvm", :id, "--memory", "3072", "--cpus", "2", "--name", "KaeruOldVM", "--natdnshostresolver1", "on", "--natdnsproxy1", "on", "--vram", "16"]

The following error was experienced:

#<Vagrant::Errors::VBoxManageError: There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

ここで出てきた以前のバーチャルマシンのIDを、 % ~/.vagrant/machines/default/virtualbox/id に書き込む。 ちなみに書き込む前のidは、あたらしく作ったバーチャルマシンのIDになっているはず。

書き込み後、% vagrant reload でリロードする。 たぶんこれで動く。

わざわざ再プロビジョニングしなくてよくなって便利( ‘ω’)

今回特にググらなかったけど、解決した後でググったら結構いっぱい解決策あってびっくりした。

MacのQuickTimePlayerで1.2倍とか2.7倍とか60.1倍とかで再生できるスクリプト書いた

出勤前に雑に書いた

倍速再生したい欲

最近ムービーや音楽について、倍速再生したい欲がでてきたので書いた。 QuickTimePlayerに倍速する機能があったのでそれを使った。

単に倍速したいだけの人は ここ→ Mac QuickTime Player Xの再生スピードを微調整する方法 / Inforati を参照

ちなみに動画は音質がクソになるのでご了承ください。音声ファイルも速すぎるとクソ化します。

ユーザーに求める前提条件

  • ターミナルがある程度使えること

使い方

play_multiは再生するだけのやつ

$ git clone https://github.com/harukaeru/SpeedUpQuickTimePlayer.git
$ cd SpeedUpQuickTimePlayer
$ ./play_multi 【音声・動画ファイルまでの絶対パス】

playspeedは、再生速度をかえる。↑のスクリプト使わなくても、QuickTimePlayer開いたあと実行すれば速くなる。(ただし問題がごにょごにょ)

$ ./playspeed 【再生スピード(0.1刻みで入力可能)

リストで再生したいとき(というか、QuickTimePlayerにこれが無かったからスクリプト書いたのだが)は

$ ls ~/Music/*.mp3 | gxargs -d '\n' -n 1 ./play_multi

などでどうぞ

gxargsは、GNUのxargs。Macにもともと入ってるxargsだと-dオプションが使えない。 $ brew install findutils すると入る。

注意事項

  • てきとうにつくったやつなのでいろいろ問題点がある(毎回openが走るので、作業が中断させられるとか)そのうち改善するかも。PR待ってます。issueくれてもいいです。( Issues · harukaeru/SpeedUpQuickTimePlayer · GitHub

  • パス設定考慮してないので、インストールするとたぶんいろいろ問題あります。自分でソース修正するかPRください

  • AppleScript ほぼ書いたことなくて文法とか知らないので雑に作ってある。シェルスクリプトがところどころ混ざってる
  • 消費者向けじゃないので、使い方を誤るとエラーとかがんがん出る。エラー出たときは自分で解決してね
  • ソース汚いのはゆるしてください。PRで指摘してください。変更します。

その他

リファレンス(順不同)

https://discussions.apple.com/thread/4697248?tstart=0

linux - Newline-separated xargs - Server Fault

Homebrew で GNU xargs をインストールする - CUBE SUGAR CONTAINER

https://computers.tutsplus.com/tutorials/if-and-if-else-applescript-conditional-statements–mac-45590

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_02.html

[AppleScript] スクリプト実行時に引数を指定する方法 | Developers.IO

https://discussions.apple.com/thread/6732004?start=0&tstart=0

macos - Run AppleScript from bash script - Ask Different

https://discussions.apple.com/thread/4697248?tstart=0

ふつうのプログラマだけど、いまさらITパスポート試験を受けてきたのでいろいろ感想とか書きます

初期能力

  • プログラミング歴3年
  • プログラマ歴3年
  • 稀にいろいろ勉強した結果身についた知識(ブログの記事とかGitHubとか見てくれるとどんなことやってるか少しわかります▂▅▇█▓▒░('ω')░▒▓█▇▅▂)

なぜ受けようと思ったのか

  • たまに高校生にプログラミングを教える機会があって、「ITパスポートあるといいよ〜」とか言ってるくせにITパスポート受けたこともないし問題すら見たこともなかったし、酷すぎかって思ったので
  • あと10/15に応用情報技術者試験を受けようと思ったので、その前座として
  • ひまつぶし

勉強前のぼくのメンタリティ

  • まあITパスポートくらい楽勝でしょw
  • 合格率どのくらいかな?→48.1% ( ˘⊖˘) 。o(あれ?意外と低いな)
  • 万が一落ちたら恥ずかしいし参考書買って勉強するぞ!!!

勉強中のぼくのメンタリティ

  • ( :3) ×)〆 ~~~

勉強時間と勉強内容

  • 06/25(日) TOEICの試験も終わったし意気揚々と勉強し始めた。↓の本を読むだけのかんたんなお仕事。1時間くらい読んで飽きた。
  • 06/26(月) 30分くらい読んだ
  • 06/27(火) 会社のリリースで忙しくてそれどころじゃなかったけど5分くらい読んで寝た(なおニコニコ動画を2時間見てた模様)
  • 06/28(水) 連日の作業で疲れてたので勉強できなくてもしょうがないなと思いとりあえず5分読んで、勉強したという結果をでっちあげた
  • 06/29(木) あんまり疲れてなかったけど、「昨日も一昨日も勉強時間5分だったし流れで今日も」って感じで5分だけ読んだ
  • 06/30(金) 読んでて気がついたら1時間くらい経ってて、達成感に満ち溢れ寝た。
  • 07/01(土) さすがにまずいと思い4時間くらい読んだ(読み終わる)
  • 07/02(日) 早起きして過去問を1期分だけ解く。↓の本に載ってた問題が多くて萎える。30分ぐらいで全部一通り解き、900点/1000点だった。これは問題ないなと思い、見直し後お昼寝し、試験会場へ移動する。860点で合格

(合格証書とかは割とあとで送られてくるらしい。)

↓読んでた本
www.amazon.co.jp

本の感想はAmazonのレビューに書きました( 'ω')かなりの良書だと思います。ぼく基本amazonのレビュー星1とか2ばっかつけるけどこれは5にしました。

↓過去問はコッチ
https://www.amazon.co.jp/gp/product/4865102396/

なんかこの過去問の本に対策がどーのこーの書いてあるけどそっちは全く読んでないです。てか読んでもおもしろくなさそうだった。
付録のDVDにWindows専用の過去問プログラムが入っているので、それをインストールすると過去問が解けます。
これ結構いいアプリケーションだと思います。コスパ高し。

家にWindowsがあって本当によかった。


試験の所見

試験時間は120分なんだけど、40分で解いて退場したった(じまん)

どうせ見直ししてもどれが合ってるか確認できないし、さすがに合格はしてるでしょ!みたいな感じで終えた。
他の人がまだせっせと解いてる中を華麗に帰る、っていうのがやりたくて資格受けてるみたいなとこある。最悪か。

結果は総合860点。ストラテジ系もマネジメント系もテクノロジ系も全部800点台だった(820/880/825でした。なぜテクノロジ系が低いのだ……)。
結構間違えてて、「うわああああいっぱい間違えてるうううう▂▅▇█▓▒░('ω')░▒▓█▇▅▂」ってなった。

ちなみに合格って言ってるけど、経済産業大臣が認定するまでは合格じゃないので、名目上はまだ合格してない。

「試験で6割取るだけ」って考えれば、あんまり理解して無くてもできるだろうし、マグレで多少当たるだろうから簡単だけど、満点取ろうとして全部やろうとするとふつうにむずかしい。個人的に勉強時間が足りなかったと思う。憶測で工数を定義して、1週間前に勉強やり始めたのがバカだった。
ちゃんと勉強のタイムマネジメントして、スケジュール組んでから試験の申込みをするべきだと思った。
まさにプロジェクトマネジメントの失敗と言えそうだ。

ITパスポートの統計情報を調べたら、850点以上は全体で見ると1.4%(偏差値で言うと72〜76)、900点以上は0.4%(偏差値76〜84)らしい。
IT系の社会人は、平成28年度に11,428人も受けておきながら77人(0.6%)しか9割取れてないっぽい。
まあだからなんだって話だけど……ITパスポートだって全然バカにできないんだなあって思った。

試験内容に関して思ったこと

ITとか関係なく、何にも知識がなくても、国語+算数の問題みたいな感じの問題がちょこちょこあって、無勉でもこういうのは取れちゃうからダメでしょって思った。
あと問題に書いてある単語から、よくわかってなくても「なんとなくこれっぽい」とかで当たるやつとかも結構あった。選択式問題の限界が垣間見えた(#^ω^)
(ま、まあぼくはわかってたけどね!ほんとだよ)

テクノロジ系の問題に関しては、まあ当然というか、パッパッと解いていけた。「問題見る→答えこれやん→次」みたいな感じで解けた。
ただしセキュリティのへんは「ほわっ?」ってなってたりしてた。
セキュリティ関連の問題が多すぎる。

勉強についての感想

テクノロジ系でも
「うわこれそういうことやったんか……なんで知らなかったんだ……死にたい」みたいな知識が割とあって、いろいろ為になった。
あとは実践で身につけた「たぶんこういうことだろうな〜〜」っていう知識を確定させることができて「やっぱそうだったんか!」とか「微妙にちがったのか」とかわかったのがよかった。
広く浅く手をつけれたので、今後の基礎としてだいじに知識を保全しておきたい。

ぼくが勤めている会社はベンチャーなので、
ストラテジ系も、経営陣が考えていること・経営陣が考えたいこと・会社が目指していること・会社がやらなきゃいけないこと等推測しやすくなって、そのへんのコミュニケーションが円滑に進みそうな感じがした。
問題作った人はちゃんとそういうの考えて作ってたんだなあすごいなあって思った。

プログラマって言っても、こういう経営的な部分や法律・事務・経理部分を知っておくと「この部分の実装は、やるとプログラムが最悪な形になるけど、"政治的"な意味からやる必要がある」っていう認識ができるようになって
知らない場合は「やりたくないけど、やれって言われたから仕方なくやる」ってなってモチベーションだだ下がりなとこから
「やりたくないけど、やらないと会社が困ったりお金が入ってこなかったりするから仕方なくやる」というように、「なぜやらなきゃいけないか」が明確になって、モチベーションが下がりにくくなって問題解決の幅が広がりそうだった。

マネジメント系では
「こんな図書いたことないし、使わなそうだな」っていうのもあれば、「これは情報整理するのに使えそうだな」「Redmineもうちょっと使いこなしてみるか」っていう気分になった。
そもそもプログラミングで解決しなくていい問題・やらなくていい仕事の発見とかできそうで、良さそうだった。
暇なときにPMBOKわりとマジメに勉強しておいて、ひそかに会社に導入してみたい。

あとは、正直ストラテジ系の知識は業務やっててもなかなか身につかないし、マネジメント系の知識も能動的に調べないと手に入らないから、今後このへんも留意して、ふつうの勉強していきたい。

まとめ

受けてよかった⊂( ・∀・) 彡

Mac + Chromeで、Alt+ClickするとHTMLファイルとかをダウンロードしてしまってうざい問題の解決(disable alt+click on Chrome)

AltあるいはOptionキーを押しながらクリックするとダウンロードが始まってうざいのでなんとかした

概要

  • Karabinerを使う
  • AltキーをCtrlキーにRemap(割当て)する

詳細

Karabinerは、キーの割当てをしてくれるツール。
いまのところタダの模様。
全然詳しく知らないので、知りたい方はググってください。

Karabinerの設定(Preference)から、「Open private.xml」をクリック。とにかくこのprivate.xmlを編集できればいい。
f:id:haruharu1:20170614135954p:plain

private.htmlを以下のように編集。
Chromeのときだけ、AltをCtrlに割り当てるだけのかんたんなXMLファイル

<?xml version="1.0"?>
<root>
    <appdef>
        <appname>Chrome</appname>
        <equal>com.google.Chrome</equal>
    </appdef>
    <item>
        <name>Chrome</name>
        <identifier>private.appdef</identifier>
        <only>Chrome</only>
        <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::CONTROL_L</autogen>
    </item>
</root>

Chrome以外にも使えて汎用性高くて便利。

編集後は「Reload xml」と、「□Chrome」をチェックして「☑Chrome」にすることもお忘れなく
f:id:haruharu1:20170614140136p:plain

ぼくの環境はこれでいけたけど、いけない人はcom.google.Chromeのとこが違ってたりする可能性もあるかも。

追記

Altかえたせいでコンソール開けなかったので、コンソールのキーをCtrl + Command + Jに割当した
f:id:haruharu1:20170616122502p:plain
f:id:haruharu1:20170616122518p:plain