VSCodeのLaTeX Workshopが定期的にバグるので自動コンパイル機能を自作してみた
VSCodeって便利ですよね. 便利すぎてもう離れられないと思います.
そんなVSCodeにはTexの拡張機能としてLaTeX Workshopがあります. 文章を打つと,自動でコンパイルしてPDF出力してくれるのでとっても便利です.
しかし.
最近バグ多すぎません???
バグ出る-->治す-->またバグが出る という循環で正直疲れました. 後,だいたいこういうのって重要な書類を作る直前に重大なバグが出現するもんなんですよね.
ただ、VSCode上でファイル編集はしたかったので,仕方なく自動コンパイル機能を自作してみました.
使ったもの
- OS: Window10
- WSLがある
- 自分のメインマシン
- MACでも動くけど,sumatraPDFが無いので代用する必要あり
- エディタ: VSCode
- エディタが使いやすい
- レポートの結果が足りない場合もすぐに生成できる
- スニペットに色々登録してある
- Texのタイプセット環境: WSL(Ubuntu)
- コマンドを実行するだけだからかんたん
- バグる心配もほとんどない
- PDF閲覧: sumatraPDF
- 軽量
- 表示しているファイルを自動的に更新してくれる
- タブで別のファイルも開くことができる
- 更新管理: python
環境
実行する環境はこんな感じ
ちなみに,複数Texファイルについても設定を変更することで対応できます.
VSCode
Texの入力補完としてLaTeX Workshopをインストール.
ただし,自動コンパイルが動作すると,いろいろ面倒なのでオフにしておく.
latex-workshop.latex.autoBuild.run: never
Ubuntu
Latexのタイプセットに必要なパッケージをインストール.
sudo apt-get install texlive-lang-japanese sudo apt-get install texlive-lang-cjk sudo apt-get install texlive-fonts-recommended sudo apt-get install texlive-fonts-extra
こんな感じでインストールしたけど,いらないやつもありそうだなぁ
sumatraPDF
こちらよりインストール www.sumatrapdfreader.org
面倒であればブラウザで表示してリロードしながら見るのも有りかも...
python
Python3をインストール(自分の環境は3.6.2を使用) また,足りないパッケージをインストールする.
監視用プログラム
ここからソースコードをダウンロード github.com
適当なフォルダに展開すれば使えます
使い方
監視用プログラムの起動
- tex_watchの中のwatch.confを設定する
- watch.pyを実行
python /tex/path/tex_watch/watch.py -cf /config/path/watch.conf
これでTexファイルの監視が始まります.
configファイルの書き換えを自動化
configファイルを書き換えるのが面倒なので,自動化するものを作成した. search_updated_texディレクトリ内のsearch_updated_tex.pyを実行することで,
コマンドとしてはこんな感じ
python search_updated_tex.py -s /mnt/c/GitHub
-sの後に調査したいディレクトリを入力するとその配下を調査してくれる.
まとめ
- 実際に使ってみると,普通に快適に使えた.
- LaTeX Workshopのエラーに付き合わされるくらいなら,コマンドに頼ってタイプセットしてたほうが安心
自宅LAN内のみで利用できる動画サイトを作ってみた話
みなさんもPCに大量の動画を保存していることかと思います. そんな動画をPCではなくスマホで簡単に見たいなぁと思ったわけですよ
例えば,布団でゴロゴロしながら見たいなぁとか,ちょっとソファでみたいなぁとか... まあ,ホントの目的はそんなことじゃないんですけどね.男子なら分かってくれれうと思う..
ただ,実際やってみると,
- わざわざPCからスマホにコピーするのダルいなぁ
- DropboxとかGoogle Driveとかに置くのもなぁ(個人情報だし)(趣味バレ怖い)
- youtubeの限定公開なんて論外だしなぁ
と感じていたわけですよ. そしたら,「あっサーバ立てればええやん」という考えになったので作りました.
どのくらいの規模の物作ったの?
サーバ立てればええやんと言っても,動画配信サービスなんて作ったことないわけですよね. そんで,「動画配信サービス 自作」とかって調べてみると,
とか書かれてるわけですよね.ただ,個人的には
いやいや,そこまでしなくいいんですよ~ ただ見れればいいんですよ~~
って気持ちなんですよ.
そんなこんなでいろいろ考えてみたら,
ん? これってhtml5のvideoで十分じゃね?
と思ったわけですね. なんせ1人しか使わないし,回線についても自宅内のLANだからまあまあ早いし.
というわけで適当に作ってみました.
作ったもの
ソースはこちら
機能的には,とりあえず左側になけなしの検索と並び順の設定欄,右側にサムネイルをずらっと並べてあります. そんで,画像 or タイトルをクリックすると,
こんな感じで動画が見れるといった仕組みになってます.
(デザインセンスが皆無なのはご了承ください)
環境
WSLのubuntuを使用.
そんで動画本体,ソースコードはCドライブとかに保存しておいて,apache,pythonとかはubuntuで動かす. これめっちゃ楽 (シンボリックリンク張りまくりだけどね.)
仕組み
動画の管理
動画が入っているディレクトリを指定して,pythonで永遠とmp4を探しまくってます. (僕のPCに保存されている動画の殆どがmp4なのでこれで問題ない) そんで,サムネイルに関しては,OpenCVを使ってそれっぽいものを作ってます. そして,動画ファイルの名前を変えても何も問題が無いように,取得した動画についてはハッシュ値で同一ファイルかどうかを確認.
これをjson形式でwebサーバに渡してる.
動画の再生
動画の再生についてはhtml5のvideoタグを使用. こいつ意外と優秀で,スマホとかで,画面の両側を2回タップするだけで,10秒スキップできたりする. そのままでも結構使える.
さっきのpythonから吐き出されるjsonファイルをPHPで読み取って,一覧に並べたり,検索したりしてる.
まとめ
適当に作るだけで,結構使えるものができてしまった. これで面倒なことがかなり減りそう.
大人数では使えなさそうだなぁ
raspberry piでAP作成
やりたいこと
ラズパイに立てたサーバ(Webサーバ)にスマホからアクセスしたい。しかも、今あるネットワークとは隔離したいので新たにAPを設置し、別のネットワークを作成する。まあ、なんでかこんな環境にする必要があったんですよね。。。
イメージ的にはこんな感じ
既存のネットワーク(192.168.0.0/24)----->[(eth0: 0.110/24)raspbrry pi(wlan0: 110.110)]<----Wifi(192.168.110.0/24)---->[スマホ]
作成するWebサイト
phpとmysqlを組み合わせたどこにでもあるようなサイト。
使う機材とか
- Raspberry Pi 2 Model B
- Ubuntu 16.04.5 LTS(http://cdimage.ubuntu.com/ubuntu/releases/16.04.5/release/ubuntu-16.04.4-preinstalled-server-armhf+raspi2.img.xz)
- BUFFALO WLI-UC-GNM2S
BUFFALO エアステーション 11n対応 11g/b USB2.0用 無線LAN子機 親機・子機同時モード対応 WLI-UC-GNM2S
- 出版社/メーカー: バッファロー
- 発売日: 2017/05/16
- メディア: Personal Computers
- この商品を含むブログを見る
今回はWebサーバが動けばいいのでCUIのOSを選択。ドングルは「Raspberry Piの無線LANアクセスポイント化」というブログで紹介されていたものを何も考えずに購入。結果的には何も問題なく動作しました。ただ、結構発熱がすごいので、連続使用するときは注意が必要。 また、Wifiに関する設定もこちらのブログを参考にさせていただいています。
Raspberry Piの無線LANアクセスポイント化
Raspberry Piの無線LANアクセスポイント化 - DesignAssembler
構築
初期設定
まずはラズパイの諸々の設定をする。
最初に、sudo apt-get update
とsudo apt-get upgrade
のコンビでとりあえずパッケージの更新。
そして、諸々の設定を行った。
- localeの設定。
sudo dpkg-reconfigure locales
よりja_JP.UTF-8 UTF-8を選択。 - タイムゾーンの設定。
sudo dpkg-reconfigure tzdata
よりAsia/Tokyoを選択。 - エディタとしてemacsをインストール。
sudo apt-get install emacs-nox
よりインストール - IPアドレスの設定。Wifi用のインタフェースを新たに作成しておく。
/etc/network/interfaces
に以下の内容を書き込んだ後、ネットワークを再起動。
# loopback auto lo iface lo inet loopback # eth0 auto eth0 iface eth0 inet static address 192.168.0.110 netmask 255.255.255.0 dns-nameservers 192.168.0.1 # Wifi auto wlan0 iface wlan0 inet static address 192.168.110.110 netmask 255.255.255.0 dns-nameservers 192.168.110.1
# ネットワーク再起動 sudo systemctl restart networking.service
Webサーバの構築
今回はPHPとMysqlを使ったサイトを作りたいので、必要なパッケージをインストール。そして、httpsにもしたいのでいろいろとモジュールを追加した。そして、アップデートしやすいようにシンボリックリンクも作成した。
# package install sudo apt-get install mysql-server mysql-client apache2 php php-mysqli libapache2-mod-php sudo a2enmod rewrite sudo systemctl restart apache2 # SSL enable sudo a2enmod ssl sudo a2ensite default-ssl sudo service apache2 reload # web contents mkdir ~/web # Symbolic link sudo ln -s /home/ubuntu/web/ /var/www/html/web
このあと、mysqlの初期設定を
sudo mysql_secure_installation
より行う。そして、DBの構築を行う。
APの設定
いよいよ本題のAPの設定を行う。
パッケージのインストール
APとしての処理を行うためにhostapd
というパッケージをインストールする。
sudo apt-get install hostapd
hostapdの設定ファイルの作成
/etc/hostapd/hostapd.conf
というファイルを新規作成し、以下のように記述する。
interface=wlan0 ssid=<任意のSSID> hw_mode=g channel=3 wpa=2 wpa_passphrase=<任意のPW> wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP
そして、hostapdに設定ファイルを読み込ませるために/etc/default/hostapd
の#DAEMON_CONF=""
を以下のように変更する
DAEMON_CONF="/etc/hostapd/hostapd.conf"
自動的に起動するようにcrontabを設定する
crontabに以下の項目を追記する。
@reboot sudo hostapd /etc/hostapd/hostapd.conf
確認
一度sudo reboot
により再起動してから、Wifiが正常につながることを確認。
後は、アクセス権限とかを設定すれば完成かな。