Windowsの設定をバックアップする

Filed in Windows Leave a comment

※自分用メモ。

また同じことで俺の怒りが有頂天になっているであろう、進歩のない未来のわたしへ。
Windows10を入れ、何かもう色々とうまくいかないので(Windowsが悪いのか何か設定が壊れていたのかはもはや判然としない)、ふたたびWindows8.1に戻して使っています。
が、クリーンインストールしているにもかかわらず不具合多発で、おまけにそれがWindows10で発生していた不具合と全く同じなものもあって、ちょっと背筋が寒いです。
似たようなことをあなたはまたやっていることと思います。

現在発生しているのは、Chromeが急にエラー表示になったり、SSL接続の何かでページを表示してくれなかったりする。頻度は多少違うもののFirefoxでもIEでも同様。
さいしょChromeを疑ってたんだけどもっと根っこの話だった。怖い。
Vagrantで起動したVMでcurl叩くと失敗する。これもhttpsのホスト相手だからたぶん震源地は同じ。
も一個が別で、JavaScriptの動作周りが怪しい。Atomエディタは起動後一分もせずにクラッシュ、ブラウザでも、閲覧中にふとクラッシュしたりする。震源地が同じかどうかはわからない。
で、もう、ここの問題を解決するのはもうどうでもいい。とにかく再インストールして、普通にやって普通に動くはずの環境を整えたい。設定修正マニアになりたいわけじゃない。
が、とにかくカスタマイズしてしまっている設定を復元するのが辛い。

  • マイドキュメントやらのパスは別のドライブを指定している
  • AppData下の幾つかも別ドライブにリンク張ってる
  • 環境変数もいじっている(%HOME%とか%TEMP%とか)

こういうやつ。そうだ、シンボリックリンクとかはコマンドで叩いて作れるんだから、バッチファイル作ればいいじゃないか。Windowsは95から始まり幾星霜、やっとここまでたどり着きました。
一旦バッチ書いて寝かして、忘れ物諸々ないのを確認したらまたセットアップだ。だるい。
というわけで、作業内容を以下にメモ。

まず変数作る

SET E_APPDATA=E:\AppData
set REG_SHELLFOLDERS="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
set REG_ENV=HKCU\Environment

リンクを張る

mklink /D %AppData%\"Sublime Text 3" %E_APPDATA%\"Sublime Text 3"

レジストリいじって、マイドキュメントとかの位置を変える

普段はマイドキュメント右クリックでやってるやつ。

reg add %REG_SHELLFOLDERS% /t REG_SZ /v "Personal" /d "G:\mydoc" /f

環境変数を設定する

reg add %REG_ENV% /t REG_SZ /v "HOME" /d "C:\home" /f

このへんをモゴモゴすると、だいたい私がよくいじる箇所については問題なく保存・復元できるはず。
バッチできたらbitbucketかなんかに入れとこう。

Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found

Filed in Laravel5 | php Leave a comment

結論:psr-0とpsr-4で読み込み方が違うのでそれ用の指定をcomposer.jsonに追加してあげると解決した。

なんとphpの話題

Laravel5というのを触り始めまして、もうこれがなんだかハッピーな感じの作りになっているんで自宅でも触って練度高めていこうというモチベーションがあるんです。大変に珍しいことです。
最近のphp開発とはこうなんですというエッセンスがあるので、時代から取り残されていた部分を一挙に取り返さないといかん、と思っております。名前空間とかトレイトとか、よく分かってないけどそういうやつね。

で、ちょうどFlaskで作りかけて放置していた物があったので、それをLaravel5で移植してみます。
Laravel5 + Twig + React + Stylus + webpack といった感じ。いまどきのアレコレてんこ盛り。
Reactはまだよく分かってないが、webpackでStylusをコンパイル?すると、jsの中にcssの表現も一緒に入っちゃって、なんかもんげー感じです。ファイルの分割の機能がwebpackにはあるので、cssファイルとして別途吐き出させることも可能なはず。そこまでは理解が進んでないのでまたこんど。

さて掲題の件。
さいしょこそ普通に

こういうかんじでLaravel5にTwigを組み込み、使ってました。
が、たぶんartisanコマンド使ったあたりで突如、

FatalErrorException in ProviderRepository.php line 150: Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found

こんなエラー発生。ほんとに突然です。前後でcomposer.jsonを書き換えたとかもなかった(はず)。
あまりにも急なことだったので、寝ぼけてファイルの移動でもやらかしたかとオロオロしたりとか。vendorディレクトリとcomposer.lockをまるっと消してcomposer installで再構築してみても症状が変わらない。まったく意味がわかんなかったんですが、Laravel5本か、どっかのブログか、qiitaでみた記述をふと思い出しました。
いわく、何か一つでもPSR-4形式でのモジュール読み込みをした瞬間から、特に指定がなければLarabel全体がPSR-4で動作するものとしてなんとかかんとか。
うろ覚えなんで話半分で。
さしあたりそのぼんやりしたヒントを手がかりにして、ぐぐります。
「psr-0 psr-4 php」とか「composer.json psr-4 autoload」とか、雑なキーワードですが、仕方ない。何も分かってない状態。

不思議とヒット

探してみるといろいろ出てきます。

あら、これなんじゃないの?

psr-0とpsr-4以外記述方法に違いはありませんが、設定値の意味が変わっています。
ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog

ほう。ほうほう。どうせ意味分かってないのだしということで、書き方を真似してみます。

さあどうだ。画面をリロードしてみます。

Whoops, looks like something went wrong.

ウープスじゃねえよぶっ飛ばすぞ。
あ、そうだアレやんないと。

composer dump-autoload

リロード。
はい、解決ですよかった。
かなりラッキーパンチで解決したからよかったようなものの、あたしには難しかったよ。
ともあれ、これで開発の続きができるというものです。よかった。

かんけいないけどGistって便利ね。なんだこれ。

記事中にあるLaravel5本とはこれのこと。

, , , ,

Javascript覚書

Filed in JavaScript Leave a comment

色々ありすぎてどの順番で手を付けたら進めるのかもわからぬ。地図がいる。
わかるのはcoffeeだけだ。

ファイル:ソースは一箇所にどかどかおいておき、
コード:内部でrequireしてガリガリ書き、
テンプレ側:gulpでファイル1個にまとめたものを読み込ませておく

とかであろうか。reactみたいなライブラリまでコンパイルしなくていいんだろうけれども。

Browserify

requireするためのもの?これつかえば外部JSを読み込んで使えるみたい?
つまりscript src=hogehoge書かないで済むよということかな。

Gulp

ビルドツールで、Node.js上にて動作する。
minifyしたり、lessのコンパイルを出来る。
え、あ、つまりcompassとかおぼえなくてもいい?

React

ビュー部分のみのツール。Fluxと組み合わせるんだよみたいなのをよく見る。

Arda

Ardaの目的はFluxの概念をベースに、画面遷移と状態とシーンをベースにしたヒストリ管理、その際のDispatcherのコンテキスト切り替えを行うことを主な目的としている。
引用元:Arda – MetaFluxなフレームワークを作った – Qiita

ぜんぜんわっっかんない。まずはReactの理解をして、Fluxさわって、そのあとでやろう。

, , , , ,

Vagrant + MySQL データは外に置きたい

Filed in Linux | MySQL | MySQL | Vagrant Leave a comment

Windowsで使っています。
VagrantのVM上にデータまで置いちまうと何かと不便なので、vagrant氏が勝手に作ってくれる/vagrantディレクトリを通して、ホストOS上にmysqlのdatadirを持ってきちゃおうと思いました。

まずmysql停止。

んでmy.cnfを編集

[mysqld]
#datadir=/var/lib/mysql
#↓こうしてみました
datadir=/vagrant/MYSQL_DATA_DIR
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

んで、
/var/lib/mysql/mysql
にあるファイルをまるっと
/vagrant/MYSQL_DATA_DIR
にコピー。
#実際のとこ/var/lib/mysql/mysqlの中身だけ移し替えてもだめで、他にも必要ぽかった。
#あたしのばあいは空っぽから始めても差し支えなかったので、まるっと作りなおしちゃった。移行するケースの場合はいろいろ考えてあげないとだめぽ。

こう書き換えて、mysqlをスタート。ハイ失敗。まあそうだろうと思っていた。
/vagrantにあるファイルは所有者がユーザvagrantになっちゃうので、ユーザmysqlでは見られない。
あくまでローカルの開発環境の話なので、さしあたり動けばいい。

usermod -G vagrant mysql

というわけでvagrantグループにmysql氏を追加して、再度mysqldのスタート。
OKでーす。ありがとうございましたー。
あれ、

user=mysql

こいつをvagrantユーザにしても良かったのではないか。どっちも違和感あるけどどっちがマシかな。

/var/lib/mysqlに、ibdata1とかいう巨大なファイルがある。

innodb_file_per_tableを有効にしていると、テーブルのデータはそれぞれのテーブルスペースに格納される。しかし共有テーブルスペースには次のようなInnoDBの内部データが格納されている。
データディクショナリ(InnoDBテーブルのメタデータ)
チェンジバッファ
ダブルライトバッファ
UNDOログ

引用元:MySQL ibdata1が肥大化する理由(記事の意訳) | Ore no homepage

へー。知りませんでした。ほっとくとおっかないなあ。こっちはVM上にあるから、知らないうちに圧迫して死ぬとかありそう。

MySQL – 肥大化したibdata1を縮小する – Qiita

, ,

ReactとかFluxとかArdaとか

Filed in JavaScript Leave a comment

をやろうとしとりますが、ビルド環境とかいい感じのディレクトリ構成とか、そもそもnpmよくわかんねえとか細かいモジュールすごい数で引くとかしてて、
そもそもの学習に入れません。
インプット多すぎて脳が死ぬ

JS諸々をさわろうとして折れかける

Filed in JavaScript Leave a comment

#未来のあたしへ:混乱しているのを整理するために書いているので嘘が書かれているかもしれません。ごめん。

AngurarJSに入門しなおすぞと意気込んだ2日後にきなくさい話を聞き、あっそうですか撤退ですねとなった。
Fluxフレームワーク Arda が気になる10の理由 – Qiita

じゃー同時に気になっていたReact.JSでもやってみようかなーと手を出したら火傷したという話。
そもそもJavaScriptへの理解は浅くて、せいぜいjQueryあればだいたい書けますが、くらい。
CoffeeScriptを知ったおかげで面倒な記法を回避できてホクホク、くらい。
Node.jsはインストールのみmでしかしたことない。サーバでJavaScriptが動くと言われても気持ち悪い。今でも気持ち悪い。以前、この気持ち悪さを耐えて、触っておけばよかった。
なんかエコシステムがもんげー巨大になっていて、どこから触ると入り口に到達できるのかももはや見えない。

あたしがやりたいのはフロントの操作を上手にやるためにJavaScriptを使いたいので、サーバ側で動くよ!とかいわれても全然そちらの需要はない。phpかpythonで書くから困らない。

いろんなフレームワークやらツールやらを、scriptタグで読み込むものがJavaScriptなんだと思ってたんだけど、なーんかフロント側で使うはずのツール群でも
module.exports hogehoge

が出てくる。
あれはなんなのであろうか、exportsされてるものをどっかでrequireするわけで、あたしの知ってるJavaScriptはそういう機能持ってないはずだったんだが。改めて一個のjsに変換するとかやる(やるの?)ときに、必要な物をまとめて取り込む仕掛けなのであろうか。

ただでさえあたしがふだん触っているJSも、Coffee→JavaScriptと変換作業をやっている。ReactjsではJSXというのも出てきた。XMLだというのでまあいいんだけど、変換変換変換っていつまで続くのこれ。ゴール地点のJavaScriptが酷すぎるとかの理由でこうなってんの?
こんな便利なツールが有るよ!で見に行くと、また独自記法の解説が載ってる。君らなんでそんなに新しい記法覚えたがるの?

一歩一歩、理解を進めたいのだが、サーバ側のNodejsの話まで理解しに行かないとダメなのか。
やりたいことをやろうとするスタート地点にすら立てないというのがそうとうきておるわけです。

ああ、気持ち悪い。

CSSにはSASS/SCSSとCompass?だかがあった気がする。途中でルビー入れろと言われて機嫌悪くなったので追いかけるのをやめた。こちらも機嫌のいい時に再開しよう。

, , ,

仮想環境構築:Vagrant + Docker

Filed in Nginx | Python | 仮想環境 | 要件とか Leave a comment

Kindle版の本を買って、日々vagrantとdockerについての理解を深めようと努力する日々です。
実のところインフラなんて興味なかった。結線だルーティングだミドルウェアがどうしたこうした。
「ぼかぁもっとクリエイティブな(略」
と思ってたんだけど、クリエイティブな何かをつくろうとするときの用意がめんどくさすぎる。手前の準備が煩雑すぎて、プログラム書くとこまで到達できない。
Vagrantはそもそも職場での開発環境の用意がめんどくさいことに加え、手順が口伝というのを打破するにあたり提案されていたツールで、名前しか知らなかった。
VMでマシン作るときの自動化がこいつで出きると。たしかにVirtualBoxで一個マシン作るのも面倒だった。
で、Dockerをその上に云々
vms
こういうのをやりたい。ずいぶん余計なのも色々あるんですが、Webサーバ幾つかのログをfluentdがかき集め、それをkibanaとかでビビっと束ねた表示とかをしちゃいたい。
この記事、下書きのままずいぶん放置してたんですが、そろそろやんないと。

参考書籍:Vagrant

参考書籍:Docker

Segmentation Fault or Critical Error encountered. Dumping core and aborting.

Filed in Linux | 仮想環境 Leave a comment

流行りのDockerとかをアレする際の選択肢として、Vagrantの上にLinuxを構築し、その上にDockerを構築するというパターンがポピュラーです。
※あたしはWindowsを使っています

VagrantまではだいたいOK、さあDocker動かすかという時に掲題のエラーメッセージ。
sudo docker info
Segmentation Fault or Critical Error encountered. Dumping core and aborting.

abortってこのやろう。

違うの入れてた

sudo yum info dockerやってみる

Installed Packages
Name : docker
Arch : x86_64
Version : 1.5
Release : 5.el6
Size : 37 k
Repo : installed
From repo : epel
Summary : KDE and GNOME2 system tray replacement docking application
URL : http://icculus.org/openbox/2/docker/
License : GPL+
Description : Docker is a docking application (WindowMaker dock app) which acts as a system
: tray for KDE and GNOME2. It can be used to replace the panel in either
: environment, allowing you to have a system tray without running the KDE/GNOME
: panel or environment.

なんだこれ、と思ってググったら世界中の人がコレぼやいてる。あたしの入れたいDockerとは別のアプリケーションみたいだ。
そうだ、docker-ioじゃないとだめだったんだ思い出した。本にも書いてあった。

sudo yum info docker-ioやってみる

Available Packages
Name : docker-io
Arch : x86_64
Version : 1.1.2
Release : 1.el6
Size : 4.5 M
Repo : epel
Summary : Automates deployment of containerized applications
URL : http://www.docker.com
License : ASL 2.0
Description : Docker is an open-source engine that automates the deployment of any
: application as a lightweight, portable, self-sufficient container that will
: run virtually anywhere.
:
: Docker containers can encapsulate any payload, and will run consistently on
: and between virtually any server. The same container that a developer builds
: and tests on a laptop will run at scale, in production*, on VMs, bare-metal
: servers, OpenStack clusters, public instances, or combinations of the above.

ヘイヘイヘイヘーイ
またvagrantのboxファイル作りなおしねー!もう2万回くらい作りなおしてんじゃないのか。
回数は盛りました。

sudo yum install docker-io -y
sudo chkconfig docker on
sudo service docker start
sudo docker search centos

かいけつかいけつ。

参考書は、

これを使っています。

, ,

SQLAlchemyとSQLiteで日付を取り扱う

Filed in Python | SQLAlchemy Leave a comment

あたくしの脳にぼんやりと刻まれている情報によれば、SQLiteは文字列と数値しか扱えないはず。
日付どうする。いやセンセ、日付ぐらいは扱ってくれてもいいのでは。
さておき、SQLAlchemyを通した場合に、なにか賢い仕組みがあるはず。

SQLAlchemyのマニュアルの当該ページには、

Date and Time Types

SQLite does not have built-in DATE, TIME, or DATETIME types, and pysqlite does not provide out of the box functionality for translating values between Python datetime objects and a SQLite-supported format. SQLAlchemy’s own DateTime and related types provide date formatting and parsing functionality when SQlite is used. The implementation classes are DATETIME, DATE and TIME. These types represent dates and times as ISO formatted strings, which also nicely support ordering. There’s no reliance on typical “libc” internals for these functions so historical dates are fully supported.

超訳:
SQLiteは日付型持ってない。SQLAlchemyが独自にこさえてる日付とかの型は、日付フォーマット+SQLiteで使った場合に動作するようになってる。その対象になってるのはDATETIME、DATEおよびTIMEだ。
これらを使う場合に限っては順番とかもちゃんと正しく動くし、ISOフォーマットされた文字列として日付と時刻を表現する。
で、こいつらはlibc内の関数に依存していないので、歴史的な日付が完全にサポートされている。

うわー自信ない。特に最後の一行。逆に読んでたらどうしよう。だって「libc非依存なのでヒストリカルデートが完全にサポートされてる」って、前後つながってる感がない。
だいたい、libcってなんだ。cのライブラリか。

ちょろっと見るとORACLE様の変なページが見つかり、「表 2–10 libc の日付と時間の処理関数」というところで以下の3つの関数の記述がある。

  • getdate() ユーザー形式の日付と時間を変換する
  • strftime() 日付と時間を文字列表現に変換する。
  • strptime() 日付と時間の変換

ははあ。こいつら完全にあたし見たことあるわ、phpで。phpのあの関数ってこいつらをラップしてたんだろか。
見てみる。
こんなページがあった。
PLEAC-PHP(http://pleac.sourceforge.net/pleac_php/datesandtimes.html)

これによると、phpはいろんな方法で日付のサポートをしていて、

  • UNIX/Cライブラリベース
    (localtime, gmtime, strftime, strptime, mktime, time, getdate, gettimeofday)
  • PHPのネイティブ関数(date,strtotime)
  • DateTimeクラスベース

日付の扱い方にこういう種類があるんだよ、とある。
phpのstrftimeとかははラッパーだったんだー、いやそういう感じのことなんだろうなとは思っていたがちゃんと理解した。
Library [libc]-based routinesってことは、Cのライブラリってのがlibcってことでいいんだな。なので、SQLAlchemy+SQLiteにおきましては、こいつらには関係ない作りになってます。ってことですね。
いやー勉強になりました。

, ,

AngularJSの本を買いました

Filed in JavaScript Leave a comment

JS界隈はごちゃごちゃしていて、けっきょくあいつらなんなの感がすごいんです。
Node.jsからこっち、どうもサーバでも動かせる云々のあのへんは、ちゃんと勉強しとかないと詰みますねというのがやっと理解できてきました。
どうもこう、サーバでJSが動くという感覚がよくわからない。ピンときてない。
さしあたり概念すっ飛ばしてステキな理解をする方法はないものかと案じておりましたら、心に響くフレームワークがあったと。
AngularJS。
HTMLテンプレートへの操作の仕方が、たいへんにGENSHIっぽい。正確には違うけど、かなりテンプレートを自然とした状態に保てそうだなーという感触を得ました。
で、本買ってきた。

AngularJSアプリケーション開発ガイド

これこれ。ハンドブック的な薄さで、電車の中で読むにも筋トレ感覚にはなりにくい。
がっつり触るのはこれからながら、かなり期待しています。
GenshiやjQueryをみたときのトキメキみたいなのがございました。

ちなみに本の表紙の魚はハコフグであるとのこと。なんでアンコウじゃないんだよ……。

TOP