Li::Feel

りとるす的雑記帳。

Python2.7: sys.pathで上位ディレクトリのモジュールを読み込む (Pythonスクリプト側の設定 + pylinterの設定)

モチベーション

次のようなディレクトリ構造で、group1/g1_main.pyの中、すなわちサブディレクトリから、上位ディレクトリにあるconfig.pyやutils.pyの中の関数や変数を読みたいことがあります。*1

./proj_root
├── __init__.py
├── config.py
├── group1
│   ├── __init__.py
│   ├── g1_main.py
│   └── g1_sub.py
└── utils.py

通常は、エントリポイント(pythonコマンドで実行引数になるpythonスクリプト)が最上位ディレクトリにある場合は、 普通に from ..config import Config というような相対インポートを書けばよいのですが、 エントリポイントがサブディレクトリにある場合はこの方法が使えません。

解決方法

そこで、PEP8違反ではありますが、次のような形式でsys.pathに親ディレクトリ(./proj_root)を追加することでサブディレクトリをエントリポイントとするPythonスクリプトを作成することが出来ます。

import os  # noqa
import sys  # noqa
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  # noqa

ただし、この方法でsys.pathをいじってもpylinterには反映されず、VSCode上でプログラムを書いていると警告が消えません。 そこで、pylinterの設定ファイルでカバーしてあげます。 pylinterの設定ファイルは、ざっくり次のような順番で読み込まれることがドキュメントで示されています。

  1. pythonコマンドを実行したパス
  2. init.pyがある上位ディレクトリ(もし、さらに上位のディレクトリにinit.pyがあるなら、そこも探索する)
  3. 環境変数PYLINTRC

Running Pylint — Pylint 2.2.1 documentation

この仕組みを用いて、プロジェクトのルートディレクトリに.pylintrcを追加し、次のようなinit-hook(初期化時に実行されるpythonスクリプト)を記述します。

この記事で示している.pylintrcはpylint.config.PYLINTRCを取得して、pylintrcが設置されているディレクトリのパスを取得し、取得したパスをsys.pathに追加します。 これによって、プロジェクトのルートディレクトリがpylint内でもsys.pathに登録された状態になるので、pylintによる間違った警告を抑制することができます。

./proj_root
├── __init__.py
├── config.py
├── .pylintrc
├── group1
│   ├── __init__.py
│   ├── g1_main.py
│   └── g1_sub.py
└── utils.py
[MASTER]
init-hook="import os, sys, pylint; sys.path.append(pylint.config.PYLINTRC)"

Reference

Running Pylint — Pylint 2.2.1 documentation

python - PyLint "Unable to import" error - how to set PYTHONPATH? - Stack Overflow

*1:複数の実験スクリプトで共有したいスクリプトがあるけど、実験の区分ごとにしっかりディレクトリ分けをしたいというニッチなニーズとかを対象としています

【レビュー】オカムラのオフィスチェア「シルフィー」のエクストラハイバックモデルが我が家に来て1週間が経過した

5月半ばに勢いでポチったオカムラのオフィスチェアであるシルフィーが到着し、一週間が経過したので思ったことをレビューとしてまとめてみました。

購入のいきさつ

PC作業の際の肩こりに20代の学生の癖して悩まされており、椅子変えたい…と思ったのがきっかけです。 というのも、今まで使っていたのはバウヒュッテの1万円くらいの椅子や、ニトリの1万円くらいの椅子で、とにかくクッションがしょぼかったり、姿勢の維持がしんどいなど難点が多すぎたんですよね…

流石に1万円くらいの椅子はもうやめようと思い、まともなオフィスチェアを探し始めたのですが、オカムラコンテッサなどは10万円を超えてくる… 学生故そんなに大金持ちじゃないので、機能的に必要なものを抑えられてそうな 予算5~6万円くらいで長く使えそうなオフィスチェア を探していました。

特に重視したのは予算もそうですが、 ヘッドレストがつくかどうか という点も結構気にしました。 今までの椅子は首を支えられるような背の高い椅子ではなかったので、頭をあずけることができなくて結構ストレスだったので、せっかくなら頭を預けられる椅子がほしいと思ったためです。

ちなみに、大学ではイトーキのエフチェア(ヘッドレストはオプションにもない)を使わせてもらってるんですが、個人的に腰回りのサポートがあと一歩って感じなんですよね…倒した背を好きな位置で固定できたりと良い椅子なんですけどね。

いろいろ調べてみた結果、オカムラのシルフィーと、コクヨのデュオラの一騎打ちになりました。 オカムラのシルフィーは赤坂のショールームまで行って試しに座ってみて、これだ!ってなりましたね。たぶんこの時点で9割くらいシルフィーに傾いていたと思います。 コクヨのデュオラは腰まわりの形状的にエフチェアと同じような予感がしたので最終的にシルフィーにしました。

購入

kagg.jpさんで会員価格の62,964円で購入しました。 kagg.jpさんだと土日配送が選べるので土日を選択し配送してもらいました。

実は土日は土日でもその週には予定が入っていることを思い出して慌ててメール返信したのですが返ってこなくて、お問い合わせフォームからもう一度注文番号をつけて送るということをやったりしていました。 うーん、マイページからさくっと返信できればいいのに。

納品日確定はメールでお知らせが来て、問題あればお問い合わせくださいスタイルでした。

到着

納品日確定連絡とは別に1日前にリマインダメールが来て、さらに納品してくれたオカムラさんが来る前30分くらいに電話で連絡してくれたのでスムーズに納品が完了しました。

階上げは別料金だったので自分でやることにして、玄関に納品してもらいました。

f:id:litols0816:20180608224007j:plain
我が家に来たオカムラ シルフィー エクストラハイバックモデル

座ってすぐ思ったのはやはりクッションの良さと、腰のサポート感ですね。 今までの椅子は腰のあたりがすかすかしていて姿勢維持だけでも結構大変だったんですが、ランバーサポートなしでも十分にサポートしてくれている感じがしました。

シルフィーの目玉機能であるバックカーブアジャスト機能は基本的にゆるやかなカーブにして使っています。椅子のホールド感がほしい時は狭いカーブにするという気分で使い分けでも全然いい気がしました。

我が家はデュアルモニターにして早いうちにエルゴトロンのモニターアームを導入したので、椅子と組み合わせることでかなり快適に作業ができるようになりました。 良い椅子を使うならちゃんとした高さでモニターを使えるとより疲労に効果があるのかなーと思います。 f:id:litols0816:20180608232847j:plain

1週間使ってみて、いいとこもいろいろあったのですが、ちょっと気になるとこもいくつかありました。

やはり少々長く使ってみないとわからないこともいろいろありますね。

いいとこ

調整が細かく可能

流石に6万円の椅子だけあってかなり細かく調整が可能です。

座面の位置も動かせますし、なにより肘掛けの高さ調整ができるって非常に重要だと思います。 特にキーボードを打ったりするときは調整必須だなと感じています。

残念ながら前傾以外だと背を3つの固定ポジションでしか固定できないので、自分はロッキング強度を上げて、ちょっと跳ね返りを強くすることで楽に姿勢の維持ができるようになりました。

しっかりしたクッション

椅子のクッションの座り心地が非常に良いです。

どうやらオカムラこだわりのクッションらしく、場所によって固さが違う 異硬度クッション になっているようです。 これだけでもこれ買ってよかった!と思えるいいクッションだと思います。

背と座面の連動

あまりショールームでは気にしてなかったんですが、背を倒すと座面と肘掛けがわずかに後ろに倒れるようになっています。 これによって後ろに倒したときもなんら違和感を感じることなく姿勢を維持できるので非常に良いです。

ヘッドレスト

ヘッドレストも固定タイプながら幅が大きいので非常に快適に使えます。 ヘッドレストが肩に当たって痛いというレビューも見たのですが、自分は168cm/65kgで肩に当たることなく快適に使えています。 背を倒したときに頭を預けるとかなり快適なので、体型さえ合っていれば自宅利用にはもってこいのオプションかなと思います。

微妙なとこ

クッションが蒸れる

エフチェアとかはかなり通気性がよくできているのですが、このシルフィーのクッションは通気性が微妙なのか少々蒸れます。

操作ダイヤルの位置

操作ダイヤルの位置が左右の座面の下にあるので、腕を伸ばすと肘掛けに当たったりとかします。 でも1週間でなれることのできる範囲です。 ただし、ロックの解除のために背に微妙に体重を掛ける必要があったりするので、一瞬だけ変な体制になったりします。(これはショールームとかでガチャガチャして確認した方が良いと思います)

シルフィー、いいですよ!

というわけで、1週間経過して思ったことを書いていきました。 実際、自宅で作業をしているときの肩や首回りへの負担とかは姿勢の改善でかなりよくなったかと思います。長く使っていければ良いなあ。

オリジナルのスライドテーマのウケが良いので公開する

これは何?

いつも使っているスライドテーマが見やすいと好評だったので、調子に乗って公開することにしました。 こんな感じのシンプルなブルーベースのスライドテーマです。

f:id:litols0816:20180516224011p:plain
Cyanoptilaスライドテーマ

このテーマのポイント

カラーパレット

カラーパレットをかなりこだわりをもって作っています。 そもそもこのテーマを作った理由がPowerPointの標準で入っているカラーパレットがすごく嫌いだからだったりします。

f:id:litols0816:20180516224822j:plain
Cyanoptilaのカラーパレット
色はできるだけ差のわかりやすい色を選択し、アクセントも目に入って痛くない彩度を少し落とした色をセレクトしています。

あと、軽い色弱程度には対応できるように色を選んでいるつもりです。 なお、色盲に完全対応しようと思うと、上の画像でいうText, Base, Primary, Primary accentの5色のみでスライドを作成することで、ある程度対応可能かと思われます。

画像から色盲/色弱の人の色覚を再現するサイト(便利!)

Coblis — Color Blindness Simulator | Colblindor

このテーマを作るまで色盲とかあんまり意識したことなかったんですが、結構違って驚きます。

引用フォーマット

f:id:litols0816:20180516233950j:plain
引用コンテンツ用フォーマット
引用コンテンツ用にフォーマットを用意しています。

ダウンロード

はてなブログはファイルを投稿できないので、Google Driveに置きました。 責任等は負えませんが、自由に利用していただいてOKです。

このファイルは.potxファイル(PowerPoint テンプレートファイル)なので、ダウンロードしていただき、ファイルを開くことで新規スライドショーが作成できます。

Cyanoptila_v1.0.potx - Google ドライブ

LaTeXのalgorithmicxの擬似コードをカスタマイズしてみる

擬似コードを書くのは、情報系の論文だと結構あるあるだと思います。フローチャートだと長くなりすぎる場合など、シンプルでないアルゴリズムはこっちのほうがきれいに書ける印象です。(※個人の感想です)

僕自身はalgorithmicxパッケージを使って擬似コードを書いていたりとかします。 他にもalgorithmicとかalgorithm2eとかがあるようです*1。 algorithmicxの使い方は以下のリンクがわかりやすいと思います。

github.com

ただし、algorithmicxは日本語の論文(卒論など)を書くときにはキャプションが「Algorithm n」になったりとめんどくさい点がいくつかあります。 それ以外にも、標準の入出力の表現がRequireとEnsureであんまり直感的ではない(※個人の感想です)などといろいろと気に食わない点もあります。 ここでは各種サイトを参考に、いくつか擬似コードまわりのカスタマイズをしたメモを書いていきます。

  • Require,Ensure -> Input Outputに変える
  • Algorithm -> アルゴリズムにする
  • Initialize:ブロックを追加する
  • 結果的に得られる出力
  • おわりに
  • References
続きを読む

LaTeXにAtomを組み合わせて執筆をラクにする

LaTeXを使っているとTeXShopなどのシンプルなツールだとなかなかしんどいことが多数あります。そこで、自分のLaTeX原稿執筆環境をテキストエディタAtomで整えた話をメモ代わりに書いていきます。

LaTeXを入れる

まずはLaTeXを入れます。これがないと話が始まらない。 Windowsの場合はこちらの記事が詳しそうです。latexパッケージさえ入ってしまえばあとはパッケージの設定等次第です。

qiita.com

Macの場合は普通にMacTeXを入れます。難しいことは何もありません。 普通にググって出てきたパッケージをインストールするだけですが、わからん人はこれを見るといいかもしれないです。

qiita.com

目指す環境

f:id:litols0816:20171218223148p:plain こんな見た目の環境を目指します。 機能として備えるのは以下のとおり。普通のエディタで書くよりもだいぶラクに書けるようになります。

  • ファイル一覧(Atomのプロジェクト機能)
  • セクション一覧(開いているTeXスクリプトの節一覧を表示する。クリックするとジャンプ)
  • セーブで自動コンパイル
  • SyncTeX(出力pdfをクリックするとクリックした部分のTeXスクリプトにジャンプする)
  • シンタックスハイライト
  • オートコンプリート

やりかた

ひたすら以下のパッケージをインストールするだけです。

節一覧

latex-treeパッケージをインストールします。 このパッケージをインストールして、Package -> LaTex Tree -> Toggle Tree ViewをクリックするとDocument Tree(節一覧)が出るようになります。

セーブで自動コンパイルとSyncTeX

latexpdf-viewをインストールします。 この記事が詳しいです。

qiita.com

latexパッケージは、latexmkというLaTeX用のビルドツールを使ってPDF出力を作成するものです。 Control+Option+Bでビルド、Control+Option+Cでクリーンアップができます。 おすすめは設定で「Build on Save」にチェックを入れておくことです。 これによって、上記ショートカットを入力しなくても保存するだけでビルドが走るようになります。

pdf-viewはよくこの話で出てくるSkimと同様にSyncTexに対応しており、Atom内のタブとしてPDFを開けるので大変重宝しています。 しかも、latexパッケージのビルドが成功したら自動で開くようになっています。

シンタックスハイライト

language-latexをインストールするだけです。

オートコンプリート

latexerをインストールします。 このパッケージでは、LaTeXの文法の補完はもちろんですが、\refなどをするときに指定するラベルの補完、bibtexに入れた参考文献の補完ができたりします。

LaTeX使うにあたっての小技

これでLaTeXを書く環境は揃いましたが、いくつか快適に書くにあたり小技があったりします。TeX芸感がすごい。

refの図〜〜とか表〜〜をいちいち入力しないようにする

リファレンスでいちいち図\ref{fig:hoge}とか書いていくのが変換の手間もあってわりとしんどいので、自分で新しいLaTeXコマンドを作ってさくっと書けるようにしています。 \begin{document}の前に以下のように書きます。

% リファレンス系便利コマンド
\newcommand{\figref}[1]{図~\ref{#1}}
\newcommand{\tabref}[1]{表~\ref{#1}}
\newcommand{\secref}[1]{\ref{#1}~節}
\newcommand{\chapref}[1]{\ref{#1}~章}

urlを途中で自動改行できるようにする

urlパッケージを用いてURLを論文に張り込むのは主にOSSのツールの引用などで使うことが多いですが、こいつが意外と上手く動作してくれないせいで、ダブルカラムだと収まってくれないことがあります。

そこで、\usepackageしたあとにこんな文を書きます。

%URLのタイプセット
\usepackage{url}
% -- URLの途中で改行するようにする
\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\makeatother

まとめ

以上、LaTeXの環境をAtomで整えたり、LaTeXの地味な小技を紹介しました。 明日あたりに擬似コードの書き方でもまとめて投げるかもしれません。

MacBook Pro (Late 2016/with TouchBar)を買って使い始めた話

りとるすです。ご無沙汰してます。 実はMacBook Pro(Late 2016/with TouchBar)を購入しました。

f:id:litols0816:20161206124102j:plain

気がついたらTouchBarありのMacBook Proを発表日に予約してから早一ヶ月、遂に自宅に到着しました。 ただ、タイミングが悪く、自分が終日拘束されている日に来やがった来たので、ようやく日曜日に開封し、日曜日を設定で溶かしました。

スペースグレイを選んだのですが、やっぱりかっこいいです。

スペック的には、

  • 13インチ with TouchBar
  • 2.9GHzデュアルコアIntel Core i5プロセッサ (Turbo Boost使用時最大3.3GHz)
  • 16GB 2,133MHzメモリ
  • 512GB PCIeベースSSD
  • JISキーボード

という最上級ベースモデルのメモリ構成のみいじったような感じになっています。 これは、Macがメモリ食いなのを考慮してのことだったりします。

お値段は学割ストアで税込¥223,452でした。 お財布が寂しい…

永久不滅.comとかが使えるので、Apple Storeで買い物する人はポイントがちょっと多くたまります。 MacBook Proくらいの高額商品を買うときは通しておくことをお勧めします。

よかったこと

TouchIDが便利

TouchIDは反応が早くてとても便利です。App Storeとかで一からパスワードを入力しなくていいのは非常に楽で便利です。 開いてすぐにセンサーに指をのせるだけというお手軽さは非常に便利です。

今までのWindowsより安定している

(完全に僕の感覚ではありますが…)

僕は前代にはVAIO Fit 13Aを使っていたのですが、スペック的には申し分ありませんでした。 ただ、使っているうちに3時間しかバッテリーが持たなかったり、Windows10にしてからというものブルスクが頻発するなど、結構ひどい目にありました。 作業もそこそこやりましたが、それよりもイベントビュアーを眺めている時間のほうが長かったのではないかレベルで酷かったりしました。(4回入院させています)

MacBook Proにしてから比較的システムが安定しているので、その点はVAIOから変えたのはすごいよかったのではないかと勝手に思っている次第です。

小さい

結構フットプリントが小さいです。

なので、13インチのケースだとぶっかぶかになります。

というわけで、僕はZEROSHOCKの11.6インチのものを使用しています。

このサイズが一番ちょうどよいです。

エレコム インナーバック 衝撃吸収 ZEROSHOCK スリム 11.6インチ ブラック ZSB-IBUB03BK

エレコム インナーバック 衝撃吸収 ZEROSHOCK スリム 11.6インチ ブラック ZSB-IBUB03BK

TouchBarが地味に便利

TouchBar、ほとんど使わないのではとか思っていたのですが、使ってみると地味に便利です。 特に、TouchBarだけでスクリーンショットの制御ができるのはデフォルトにはなっていないものの結構便利です。

問題は、Office for macがまだTouch Bar対応していないことですが、気長に待ちたいと思います。

きになること

バッテリー

一部のブログでもちょっと話題になっていますが…

iphone-mania.jp

バッテリーは、わりともたないです。 具体的には、作業内容にもよりますが、5時間〜6時間程度という雰囲気です。

なんかmacOS 10.12.2で改善されるらしいみたいな話を聞いたことがあるので、改善されればいいなーとは思っています。 本体のCPUやらファンがありそうな部分がかなり熱くなってビビるので、それが改善されれればいいなと思っています。

キーボード

まず、キーボードの打ち心地はかなりいい感じです。 心配している人は心配するぐらいならとっとと買ってしまった方がいいくらいかも。

(僕は浅いキーボードの方が好きなので大丈夫なほうですが、メカニカルとか好きな人にはやっぱり厳しいかとは思います)

ただし、ちょっと勢いよく打とうとすると非常にうるさいです。 取り急ぎキーボードカバーを買ったので、とりあえずつけて見て、どうなるかわかりませんがそれで様子を見て見たいと思います。

TouchBarの日本語入力

ちょっと対応が中途半端です。 TouchBarにF7キーに相当するようなカナ変換機能などが、動くアプリと動かないアプリがあります。 なので、今後の対応に期待したいと思います。

あと、ATOKがないのはかなりしんどいので、はやくTouchBarに対応して出して欲しいです。

おわりに

前々からMacに変えたいと思っていて、某インターンを経てMacを買うことを決心してからずいぶん時間がかかってしまいましたが、初めてのMacは概ね満足して使っています。 少なくとも3年以上は丁寧に扱っていきたい次第です。

GradleでSpark Frameworkを使ったAppを実行するとWarnが出てキモいので直した話

フツーにdependenciesにcompile "com.sparkjava:spark-core:2.5.2"を書くと、こんなエラーが出る。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

なんかないって言われてる。ググるとあるあるらしいことが判明。 ログ関係のライブラリだそうで。

とりあえずGradleの依存関係をぱっぱと調べて適当に対応することにする。 やることはdependenciesにもう一つ行を足すだけ。

compile "org.slf4j:slf4j-simple:1.7.13"

いじょ。これでちゃんとログも出るようになります。