ねえぶ

猫好きエンジニアのブログ

NeomakeでEslintが動かない場合の対処

以下のブログを参考にSyntasticからNeomakeに乗り換えてみたのですが,私の環境ではEslintがうまく実行されませんでした.

[Vim]SyntasticによるESLintチェックが遅いのでNeomakeに乗り換えた - dackdive's blog

TL;DR

次のようにしたら動きました.

NeoBundle 'neomake/neomake'
NeoBundle 'benjie/local-npm-bin.vim'

augroup ft_javascript
  autocmd!
  " get eslint path of current environment
  function! s:GetEslintExe()
    let l:eslintExe = GetNpmBin('eslint')
    if empty(l:eslintExe)
      return 'eslint'
    else
      return l:eslintExe
    endif
  endfunction

  " set exe of neomake eslint
  autocmd FileType javascript let g:neomake_javascript_myeslint_maker = {
        \ 'exe': s:GetEslintExe(),
        \ 'args': ['-f', 'compact'],
        \ 'errorformat': '%E%f: line %l\, col %c\, Error - %m,' .
        \ '%W%f: line %l\, col %c\, Warning - %m'
        \ }
augroup END

let g:neomake_javascript_enabled_makers = ['myeslint']
let g:neomake_error_sign = {'text': '>>', 'texthl': 'Error'}
let g:neomake_warning_sign = {'text': '>>',  'texthl': 'Todo'}
call neomake#configure#automake('nrw', 750)

環境

  • Mac 10.13.3
  • MacVim 8.0

現象

参考ブログに倣ってインストールしてみましたが,ローカルのeslintがなく,グローバルのeslintだけある場合にNeomake実行時に次のようなエラーが出ました.

19:31:12 [D +7.45] [-.-:1:1] automake: handling event FileType.
19:31:12 [D      ] [-.-:1:1] Using setting automake.ignore_filetypes=['startify'] from 'global'.
19:31:12 [E +0.02] [-.-:1:1] Exe () of maker eslint is not executable.
19:31:12 [D      ] [-.-:1:1] automake: configured buffer for ft=javascript (no enabled makers).
19:31:12 [D      ] [-.-:1:1] automake: setting tick for new buffer.
19:31:12 [D      ] [-.-:1:1] automake: no enabled makers.

エラーログは次のような設定を入れて出力させました.

let g:neomake_verbose = 3
let g:neomake_logfile = '/tmp/neomake.log'

また,この時:NeomakeInfoを実行すると,eslintのexe項目が空文字でした.

原因

ローカル環境のeslintを使うように調整してくれるbenjie/local-npm-bin.vimが,ローカル環境のeslint(node_modules/.bin/eslint)が見つからない場合にeslintのexeに空文字を設定するようになっていたのが原因でした(該当コードGetNpmBin()はローカル環境の実行ファイルが見つからない時に空文字を返す).

参考ブログのbenjie/neomake-local-eslint.vimから名前から変わっているから,動作が当初から変わってしまったのかな?

解決策

  • myeslintというmakerを新たに定義して,filetypeがjavascriptに変わる時に現在のローカル環境のeslintをmakerのexeにセットするようにしました
  • benjie/local-npm-bin.vimeslintmakerを上書きしてしまうタイミングが後になるからか,eslintmakerをvimrcで書き換える方法ではうまく動きませんでした
" filetype: javascript
augroup ft_javascript
  autocmd!
  " get eslint path of current environment
  function! s:GetEslintExe()
    let l:eslintExe = GetNpmBin('eslint')
    if empty(l:eslintExe)
      return 'eslint'
    else
      return l:eslintExe
    endif
  endfunction

  " set exe of neomake eslint
  autocmd FileType javascript let g:neomake_javascript_myeslint_maker = {
        \ 'exe': s:GetEslintExe(),
        \ 'args': ['-f', 'compact'],
        \ 'errorformat': '%E%f: line %l\, col %c\, Error - %m,' .
        \ '%W%f: line %l\, col %c\, Warning - %m'
        \ }
augroup END

その他

  • 参考ブログではautocmdでNeomakeの実行を設定していましたが,公式の方法に則って以下のようにしました
call neomake#configure#automake('nrw', 750)

syntasticからNeomakeへの乗り換えで変更したdiffは↓で確認可能です.

https://github.com/ottijp/dotfiles/compare/4f8f4690a53cfde376367ac990efc54d59c217fd...36e6207e5a4f290b96dc2eeeb2a0d911ac7666ea

先月読んだ本と今月の読書予定(2018年4月)

先月の読書予定と実績

実績 Fav
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
エリック・エヴァンスのドメイン駆動設計
エンジニアのための時間管理術
人を動かす「仕掛け」
  • DDDがかなり分量があって遅読家にはちょっとつらい(^^;
  • Swift本はあと残り1章

今月の読書予定

新規・継続
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
エリック・エヴァンスのドメイン駆動設計
🆕 なっとく! アルゴリズム

SlideShareのアカウントを凍結された話

TL;DR

  • SlideShareのアカウントを凍結された
  • サポートが全く使えなくて,結局凍結も解除されなかった
  • SpeakerDeckに乗り換えた

経緯

勉強会で発表した資料を共有するために,去年(2017年)の12月からSlideShareを使っていました.アカウント自体は数年前から作ってあり,他の人の資料をFavしたりしていました. アップロードしたのは計2回で,2017年12月と2018年2月です.

後者の2018年2月にアップロードした1日後くらいにアカウントが突如凍結されました. 凍結後はLinkedInアカウントでOAuthした直後に↓のようなエラーになりログインができませんでした.

f:id:ottijp:20180304141456j:plain

Oops! Something went wrong. Please try again later.

また,connpass等に貼った資料は↓のようにエンベッドされたスライドがエラー表示されていました.

f:id:ottijp:20180304141507j:plain

This presentation has been removed as it was reported as violating SlideShare Terms of Service. It is no longer available. Try finding related content from the SlideShare Homepage.

アップロードした資料

凍結直前にアップロードした資料はこちら(リンクはSpeakerDeckにもアップしたもの)です. SpeakerDeckではサポートされていませんが,10スライド目の次にこのYouTubeリンクも入れていました.

凍結した理由

サポートのやり取りでも結局教えてもらえず,何が利用規約違反だったのかわかりませんでした. こちらのブログでサポートにアンセーフなリンクがあると教えてもらって,それを直してアカウントの一時停止を解除してもらったとあったのでそれに期待していたんですが・・・.

サポートとのやりとり

Contact Usページから質問を投げました. すると次のように回答をもらいました.

I'm really sorry for taking long to get back and for the inconvenience this has caused.

In order to look into it further, I request you to please provide me with the screenshot of the steps you are following before encountering the error. Once I get this inforamtion, I'll look into it right away. Here's a link with instructions on how to create a screenshot if you need it: https://help.linkedin.com/app/answers/global/id/223 .

Also, please send me the file you're trying to upload so that I can look into it from this end.

Once I get this information, I'll look at it right away!

手順のスクリーンショットとアップロードしたファイルを送るようにと言われたので,その通りにしました.

すると,送ったファイルのことには全く触れず,次のような返事が来ました(ここでサポートの人が変わっていた.) スクリーンショットをすでに送っているのにまたスクリーンショットを送れと言われ,ここでサポートに疑心を持ち始めました.

I'm sorry you're experiencing issues using LinkedIn. Did you try switching to a different browser? For example, if you were having problems when using Chrome, did you try it again with Internet Explorer, Microsoft Edge, Firefox, Safari, or Opera browsers?

Here's a current list of supported internet browsers: https://www.linkedin.com/help/linkedin/answer/4135

If you've tried these solutions but continue experiencing issues, reply with the following details:

• An explanation of the issue

• The browsers and versions you've tried

• A screenshot ( https://www.linkedin.com/help/linkedin/answer/223 ) of your issue to better understand what you're dealing with

Once we have this information we'll be able to better assist you.

Thanks for your patience as we work through this.

一応言われたとおり3つの異なるブラウザで試し,それらのバージョンとともに現状が同じであることを伝えました. また,添付したファイルを確認してくれたのかを聞き,アカウントが凍結されているのを疑っていることを伝えました.

すると,次の回答です.

Please use the link below to reset the password and access your account.

Password Reset Link:

http://www.linkedin.com/uas/request-password-reset

I've also sent a password reset email to your primary email account. If you don't see it there, please check your spam, social network, or junk folders for our password reset email. To make sure LinkedIn messages aren't sent to the folders mentioned above, try adjusting your filters to always receive emails from trusted email domains like LinkedIn.com. Here's how: http://help.linkedin.com/app/answers/global/id/5367.

Additionally, we'd like to recommend that you review the current registered email addresses associated with your account and remove any outdated ones. We strongly recommend that you have at least two valid email addresses attached to your account. This way, if you lose access to your main email address, you'll still have other email addresses where we can send password reset messages. You can review and add email addresses from here: https://www.linkedin.com/settings/?modal=nsettings-manage-email

IMPORTANT:

o Remove any existing characters in the "Enter new password" field and then re-enter your new password.

o If you receive an error message using the link above, confirm that https://www.linkedin.com is a trusted site in your browser's security settings and try again.

If you're still unable to sign in after changing your password, clear your browser's cookies and saved passwords. It may prevent entering unintended login information and should resolve the issue.

Instructions for Clearing Your Cache and Cookies:

https://help.linkedin.com/app/answers/global/id/1285

Removing Old Saved Passwords from Your Browser:

https://help.linkedin.com/app/answers/global/id/5354

I sincerely hope you're able to get back into your account and will gladly help if you have any other questions.

またもや人の話は無視してテンプレのパスワードリセット案内でした. 全然話が通じてなくて辛かったです.

ちなみに,

I've also sent a password reset email to your primary email account.

と言っていますが,スパム振り分けも含め確認してもメールは来ていなかったので,自分でリセット処理をしました.

ぐっと堪えて,言われたとおり一応パスワードリセットをし,現状が変わらないことを伝えました. また,送った添付ファイルを見ているのかと,こちらの質問に答えてほしいことを再度伝えました.

そして来た回答がこちら.

Thanks for your reply.I'm sorry we've made you wait so long and for the inconvenience this has caused. I truly appreciate your patience.

We suspend and disable SlideShare accounts that violate our User Agreement. This includes:

Unsolicited contact with others for the purpose of harassment, advertising, selling, dating, or any other inappropriate conduct.

Providing false credentials for the purpose of creating an account.

Impersonation of any individual, entity, or other misrepresentation of identity.

Posting content that violates our terms (i.e. advertisements, spam, etc.).

If you have further questions, please feel free to reply to this message.

やっとアカウントが利用規約違反で凍結されていることは教えてくれました. どうしたら問題を修正し,アカウアントを正常化できるかを聞きました

Due to the sensitive nature of your request, I've forwarded this message to our Safety team.

Please understand that your issue may require some additional research, which may delay their response. But, someone from that team will get back to you as quickly as possible.

If you're able to access your account, you can check the status of your case at any time from the Your cases tab on LinkedIn Help. Learn more here: https://www.linkedin.com/help/linkedin/answer/43378.

Thanks for your patience as we look into this for you.

セーフティチームとやらに回されました. そして来た最終回答がこちら.

In regards to your Slideshare account, due to User Agreement violations, that account has been permanently restricted.

たった1文でした.

永久に凍結・・・.

しかも勝手にissueはcloseされてました.

こっちの質問には全然答えてくれず,最終的に冷たく見放されて,なんだかすごく悔しかったです.

で,どうしたか

SlideShareは嫌いになったので,SpeakerDeckに乗り換えました. まったく同じ資料をアップロードしていますが,こちらでは特に問題になっていません.

まとめ

利用規約は読んでますが,どの条項にも違反しないスライドだと自信を持っています. もし違反していたとしても,理由も告げず一発退場でアカウント凍結され,救済措置も無いのはかなり辛いです. 自分のスライドだけではなく,いままでFavしてきたスライド一覧も見られなくなってしまいました.

SlideShareとSpeakerDeckの違いとして,機能の比較はよく見ますが,規約の厳しさやサポートの良し悪しはあまり語られることが無いように思います. どちらもそんなに長く使っているわけではないのであまり強くは言えないですが,私の場合はSlideShareですごく嫌な思いをしたので,SpeakerDeckを推します.

これからスライド共有サービスを利用しようとしている方には,サービス利用にあたり,こういったリスクもあることを知っておいてもらいたいです.

先月読んだ本と今月の読書予定(2018年3月)

先月の読書予定と実績

実績 Fav
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
ソフトウェアアーキテクトが知るべき97のこと
GarageBandではじめる楽器演奏・曲作り超入門 iPhone/iPad対応
作曲少女~平凡な私が14日間で曲を作れるようになった話~
  • DTMをやってみたくなって,それ系の本を2つ読んでみた
  • 作曲少女は具体的な曲の作り方は書いていないけど,初心者が挫折しないように成功体験をうまく積みながら進める考え方とかプロセスを書いてあって,とてもよかった

今月の読書予定

新規・継続
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
🆕 エンジニアのための時間管理術
🆕 エリック・エヴァンスのドメイン駆動設計

国営昭和記念公園・浅間神社を散策

通勤路がコンクリートジャングルなので,たまに自然に触れるために公園や神社などを散策しています.

3日(土)は国営昭和記念公園浅間神社に行ってきました! また,その近くにあった浅間神社にも寄ってきました.

基本情報

国営昭和記念公園

  • 所在地:東京都立川市緑町3173
  • 開園年月日:昭和58年10月26日
  • 面積:1,653,000平方メートル
  • 公式ページ

浅間神社

アクセス

JR西立川駅が公園入り口に直結しているので,西立川駅から歩いて行きました. 西立川は乗降客が少ないためか,乗り降りの際に電車の扉を開閉するためにボタンを押す必要があります.押し忘れて乗り降りしそびれないように注意!

西立川北口とそこから出てすぐの公園入口(西立川口)

行く前にコンビニに寄りたい場合は,駅南口をすぐ出たところにファミリーマートがあります.南口から北口へは通り抜けできるので,飲み物などを調達したい場合はここで買うとよいでしょう.

国営昭和記念公園

行ってから初めてわかったのですが,入園は有料(大人410円)でした.また開園は9:30でした(元々8:30に行こうと思っていて,1時間遅れて行ったらちょうど開園時間だった.危なかった.) 無料入園日などもあるようですが,行く前にこちらの利用案内を確認しておいたほうがよさそうです.

また,とてもとても大きい公園なので,1日で全部回ろうと思わないほうが良いと思います.今回は2時間かけて歩きましたが,それでも半分ちょっとくらいでした.

昭和記念公園は公園という名が付いていますが,内部には売店やトイレやプールがあり,案内板があったり園内放送が流れていたりして,どちらかというとレジャー施設なイメージが強かったです.純粋な公園を望む人にはちょっと合わないかもしれないですが,中にある日本庭園(後述)はとても良かったのでオススメします!

当日は朝一番だったこともあり人が少なく(園内のスタッフの方のほうが多い),まだ雪がたくさん残っていて景色も雪の踏み心地も楽しめ,気持ちのよい散策でした.

ただ,近くに陸上自衛隊の駐屯地があり,当日はヘリコプターがひっきりなしに飛んでいて(なぜか公園内を周回し続ける・・・)ちょっとうるさかったです.

園内には写真を撮りに来ている人や絵を描きに来ている人が散見されました.

入口にあった案内図.とてつもなく広いので,パークトレインやレンタルサイクルがあるようです.

園内には様々な種類の木が植樹されていたり,大きな池があったりして景観が楽しめます.レンタルボートもありました.

なにやら見たことのないスノードロップという花も発見.

日本庭園

公園北部にある日本庭園.趣のある建物や澄んだ池,竹林,盆栽苑など,どこを切り取っても絵になるゾーンです. 今回一番印象深かった場所でした. 小屋の屋根から滴る雪解け水が特にきれいでした(うまく撮れなかったので写真は無し・・・.)

日本庭園の大きな池に架かる橋から写した池.とても澄んだ水で,底面も魅せる石の組み方がされています.

池の孤島.よく見ると・・・亀の形になってました!

みんなの原っぱ

公園中央部にあるとても大きな開けた原っぱ.当日はほとんど人がいなかったので真っ白な壮観な風景でした. 草の上に雪が薄く積もり,柔らかな踏み心地でした.

原っぱにはとても立派な2本の大きな木があります.

セグウェイに乗ってる人を発見!

こどもの森

公園北西部にあるこどもの森. 当日は朝で雪も残っていたのでこども達はいませんでしたが,遊具や色々なものをモチーフにした建造物があるゾーンです. 見てるだけでも楽しかった!

全体の案内図.この案内図のある森の家というところで,木工の教室などもやっているようです.

目を引く面白いものがたくさん.

行く前に地図で見て気になっていた地底の泉.当日は雪で立ち入り禁止になっていました.

一際大きな太陽のピラミッド.頂上からはあたりが一望できます.

ネコ発見!

浅間神社

帰りに駅南口を出て5分くらい歩いたところにある浅間神社に寄ってきました.

小さな公園の中にある神社で,こじんまりとしているのですが,階段を登ったところに厳かに拝殿があり雰囲気のある神社です. お賽銭箱も本坪鈴もちゃんとあります.写真の拝殿左奥にも入口がありましたが,そちらには鳥居は無いようでしたので,公園側から入るのが良さそうですね.

先月読んだ本と今月の読書予定(2018年2月)

先月の読書予定と実績

実績 Fav
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
ソフトウェアアーキテクトが知るべき97のこと
リファクタリング―プログラムの体質改善テクニック

うまく時間が作れなくてあんまり読めなかった・・・.

今月の読書予定

武蔵野公園・美術の森緑地・笠森稲荷神社を散策

通勤路がコンクリートジャングルなので,たまに自然に触れるために公園や神社などを散策しています.

昨日は東京都府中市にある武蔵野公園に行ってきました! また,行き帰りの途中にあった美術の森緑地と笠森稲荷神社にも行きました.

まだ雪が残っていて指先が寒かったですが,公園内の地面は落ち葉と霜柱と雪でふわふわしていて,歩くと心地よい音と感触が伝わり散歩には最適な日でした.

基本情報

武蔵野公園

ottijp.hatenablog.com

美術の森緑地

笠森稲荷神社

アクセス

JR武蔵小金井駅から徒歩で向かいました.バスでもいけるようですが,歩いても20分くらいであまり所要時間は変わらないようです. 公園内を北西から南東に向けて散策したので,帰りは野川公園の入り口(北西)あたりから北上し,JR東小金井駅まで歩きました.

行きは閑静な住宅街を歩いたのですが,古くて趣のある家があったり,珍しい丸い郵便ポストがあったりと,道中も楽しめる街です.

美術の森緑地

行きの道中にはけの森美術館という美術館があり,美術館自体はこの時期(12月18日〜3月下旬)は閉館していたのですが,その脇にある庭園の「美術の森緑地」は開放されており,良さそうな雰囲気だったので立ち寄りました.

南側の門.出入り口は南北にあり,内部は結構な傾斜があります.

緑地内には湧き水があったり,喫茶店として使われている古民家があったり,住宅地にありながら雰囲気満点です.

内部には竹林が広がっています.当日は少し風があったのですが,竹の葉が揺れる音と幹がぶつかる音が気持ちのよい音楽を奏でていました. 見上げると壮観な景色が広がっていました.

武蔵野公園

美術の森緑地から5分ほど歩いて野川(一級河川)を渡ると,武蔵野公園の北西部分に到着!

まだ雪がたくさん残っており,落ち葉と霜柱と雪が3層になっていてふわふわな踏み心地です.

園内には木がたくさん植えてあり,森林好きとしてはたまらないです. 風で木々の葉が揺れる音や,鳥の声(黄色い色の混じったキーキーと鳴く鳥.なんという鳥だろう?)が聞こえ,自然が堪能できます. 桜も見かけたので春は花見客でいっぱいになるのかな?

くじら山

行く前に地図で見て気になっていた「くじら山」. 10mくらいの小高い丘のようになっていて,周囲をぐるりと眺めることができます. 雪があったので転びそうになりつつも登頂.

苗圃

公園の中央部分に進むと,木々が規則正しく植えられている場所に遭遇. ここは苗圃(びょうほ)というらしく,ここで苗木を育てて街路樹などに移したり,工事などの場合に一時的に退避したりする場所のようです. 苗圃の近くにはバーベキュー広場もありました.

寒かったですが,木々にはすでに新芽が芽吹いており,かすかに春の気配が.

どじょう池

公園北側に「どじょう池」というものがあったのでどんな所なのかと行ってみたのですが,ここはなんというかがっかりスポットでした(^^;

笠森稲荷神社

帰り道に少し寄り道をして笠森稲荷神社へ. 結構駅に近いので,交通量の多い通り沿いに面していて,隣が高いマンションという環境ですが,一歩境内に入ると静かで雰囲気が良い神社です.

何重にも続く赤い鳥居をくぐって拝殿へ向かいます.わくわくする.

本坪鈴はなんと5つもあります! 真ん中のを使わせてもらいました.あまりうまく鳴らない神社もありますが,ここのはきれいに鳴ってくれます.

まとめ

前回浅間山へ行ったときは30分しか時間がなかったのであまり余裕がなかったですが,今回は1時間以上見ていたのでゆっくりと公園を堪能できました. 武蔵野公園の東側には野川公園,南側には武蔵の森公園があるので,こちらも行ってみたいです.