Li::Feel

りとるす的雑記帳。

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

これは何?

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

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"

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

Python3.4 + matplotlib + numpy + PyQt5のセットでPyInstallerを使ってexeファイルを作る

Pythonで作ったmatplotlib + numpy + PyQt5なGUIアプリをPyInstallerでexe化しようと思ったら3時間溶かしたのでメモ。

実行環境

  • Python3.4.5 32bit
    • Python3.5.x系だとうまくいかない。
  • Windows10 Pro 64bit
    • 64bitだけどPythonは32bitで。

numpyとscipyはこのサイトからダウンロード&インストール

http://www.lfd.uci.edu/~gohlke/pythonlibs/www.lfd.uci.edu

ファイルダイアログの読み込みの解決

PyQt5でファイルダイアログ等を使用する場合、tkinterのインポートも必要です。 PyInstallerはimportのあたりを解析してパッケージに含めるものを決めているようです。 インポートは結局こんな感じに。

from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget,
                             QGridLayout, QVBoxLayout, QHBoxLayout,QFileDialog,
                             QLabel, QLineEdit, QPushButton)

from window import Ui_Form
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar

from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
import random
import seaborn as sns
import copy

import tkinter
import tkinter.filedialog as FileDialog

hook-numpyを作成する

問題はこのままでは動きません。実行時に次のようなエラーが吐かれます。

Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

そこで、StackOverflowの神々が書いたhook-numpy.pyというスクリプトをPyInstallerに追加します。 追加先は、C:\[Python34の位置]\Lib\site-packages\PyInstaller\hooksで、次のようなスクリプトを追加します。

from PyInstaller import log as logging 
from PyInstaller import compat
from os import listdir

mkldir = compat.base_prefix + "/Lib/site-packages/numpy/core" 
logger = logging.getLogger(__name__)
logger.info("MKL installed as part of numpy, importing that!")
binaries = [(mkldir + "/" + mkl, '') for mkl in listdir(mkldir) if mkl.startswith('mkl_')] 

stackoverflow.com

exe化のコマンド

ここまでやって、以下のようなコマンドで実行。

pyinstaller --hidden-import="tkinter" main.py

やっと動いた!寝る!

Android開発:RxJavaのお勉強記事まとめ

なんで急にRxJavaなんて始めたのか

夏休みに某所にインターンシップに行ったとき、初めてRxJavaの存在を教えてもらったのがきっかけで、ちょっと気になって調べてだいぶよさそうだったので、今作っている某アプリに組み込むことにしました。

理解するのにだいぶ苦労したので、お勉強するときに見た記事を書いておきます。

さわりだけまとめる

RxJavaは、ReactiveXJava用の実装で、Observerパターンの拡張にあたります。 Observableから値やらが同期・非同期で流れてくるので、それを関数型プログラミングのノリで加工したり、処理の状況をSubscriberに通知したりといったことができます。

Android開発において特に有用なのが、RxJavaを用いた場合、悪名高きAsyncTaskやAsyncTaskLoaderのコールバック地獄を解消できる上にエラーハンドリングがだいぶ楽になるといった点で、AsyncTask系さっさと滅びてくれと思っていた自分的には絶対に得だと思った次第です。

あとは、Android界隈の神、JakeWharton氏の所属するSquare印のRetrofitが対応しており、Androidの非同期処理は大抵ネットワーク接続な気がしていることから、これをやっておけば当分大丈夫なのではという打算があります。

基本はこの記事

この記事が非常によくまとまっており、勉強する上で楽でした。

qiita.com

Observableの生成について

ReactiveXの提供するドキュメントはわりとしっかりしている(気がする)ので、そこを見れば大抵わかります。

ReactiveX - Operators

ただ、RxJavaで同期処理を非同期で書こうとすると、Observable.create()を使うことが多いと思いますが、ドキュメント上は

advanced use only! create an Observable from scratch by means of a function, consider fromEmitter instead

Creating Observables · ReactiveX/RxJava Wiki · GitHub

となっており、実装にはちょっと注意が必要です。

RxJavaの項目を見ればわかりますが、

It is good practice to check the observer’s isUnsubscribed state from within the function you pass to create so that your Observable can stop emitting items or doing expensive calculations when there is no longer an interested observer.

ReactiveX - Create operator

とか書いてあります。ただ、日本語のブログでこれをしっかり守ってisUnsbscribed()でのステータスチェックをしている例は見かけなかったので十分に注意が必要かと思います。

unsbscribeについて

メモリリークしないようにOnDestroyとかでunsubscribeしておきましょう。 NullPointerExceptionにならないように、Subscription.empty()とかで初期化しておきましょう。

qiita.com

さいごに

ほかにも、これは勉強しておいたほうがいいよ!とか、この解釈ちょっと違うよ!とかあれば教えていただければ幸いです。