2016年 9月 27

環境:
MacBook Pro (Retina, 13-inch, Mid 2014)
macOS Sierra 10.12
Apple Keyboard (テンキー付き – US)

状況

今まではキーボードのどのキーでもスリープ解除が出来たけど、Sierraにしてからはディスプレイのスリープ解除が出来なくなってしまった。環境の問題?

  • ラップトップして使っているときも電源キーを押さないと解除できない気がする。
  • 正確に言うと英数キーを押したことで、パスワード入力欄に文字が入力されているっぽいので内部的には解除されているっぽい?

ラップトップで使う場合は電源キーで解除出来るので問題ないとして、クラムシェルモードの場合はかなり不便。

解決策

外付けキーボードのEjectキー長押しで解除出来るっぽい。今のところ。どうせMacBookにドライブついていないし、この方法で良いか。

USBキーボードはうまくいったけど、bluetoothはどうなんだろ?

Filed under: Mac

Trackback Uri






2016年 9月 22

誘惑に負けてmacOS Sierraにしたところ、USキーボードで必須のKarabinerが正式対応していないことが判明。

Karabiner – OS X用のソフトウェア

これは不便。しかし、よく見るとKarabiner-Elementsなるものがあるみたい。

Karabiner-Elementsのダウンロード

下記URLから最新バージョンをダウンロード出来る。

tekezo/Karabiner-Elements: The next generation Karabiner prototyping for macOS Sierra

Karabiner-Elements

Usageにインストール方法等が書いてある。基本的にはインストーラーをダブルクリックして従うだけ。

日本語環境の設定

キーの変更のドキュメントにある通り、

~/.karabiner.d/configuration/karabiner.jsonに設定を書く。

リポジトリのexamplesに日本語環境の設定例があるかと思ったら微妙に違うっぽいのでキーマップを参考に設定してみる。

あと、caps lockをcontrolにしたいので追加しておく(Karabiner-Elementsをインストールするとシステム環境設定の装飾キーの設定が無効になるっぽい)

が、単純にキーの動作が変わるだけなので本家のような動作にはならない。右⌘はあまり使わないからいいとして、左⌘も設定するとコマンドキーが全く使えない状態になってしまう。

仕方がないから右optionキーに英数を設定しておく。

$ vi ~/.karabiner.d/configuration/karabiner.json

{
    "profiles": [
        {
            "name": "Default profile",
            "selected": true,
            "simple_modifications": {
                "caps_lock": "left_control",
                "right_command": "japanese_kana",
                "right_option": "japanese_eisuu"
            }
        }
    ]
}

まぁ、⌘+spaceキーで入力ソースの切り替えが出来るし、とりあえずこれで運用しておく。

って、エントリ書いてて検索したらいろいろあった。

⌘英かなは便利そう。

追記:

⌘英かな使ってみたけど、これで十分かも。

Filed under: Mac

Trackback Uri






2016年 9月 4

atom
  1. language-mojoliciousを導入する。

  2. keymap.csonに以下を追記

'atom-text-editor[data-grammar="text html mojolicious"]:not([mini])':
    'tab': 'emmet:expand-abbreviation-with-tab'

タブで展開させるとlanguage-mojoliciousとカブるので emmetはcmd+shift+eにしてみる。

'atom-text-editor[data-grammar="text html mojolicious"]:not([mini])':
    'cmd-shift-e': 'emmet:expand-abbreviation-with-tab'

Filed under: Mojolicious,プログラミング

Trackback Uri






2016年 8月 25

Mojolicious::Plugin::LocaleTextDomainOO – I18N(GNU getext) for Mojolicious. – metacpan.org

きっかけ

Mojolicousで国際化するプラグインにはMojolicous::Plugin::I18Nというものがある。これは良く出来ていて、URLやドメイン名での振り分けが出来たりする。

国際化の部分はLocale::Maketextを使う。Locale::Maketext::Lexiconも使えばpoファイルなどもつかえる。

普通に使う分なら問題ないのだけど、GNU gettextのmsgctxttext domainのようなことは出来ない。

CPANをいろいろ漁ってみて、gettextコンバーチブルなモジュールでLocale::TextDomain::OOってのが自分の要件に合いそうなのでこちらをMojoliciousで使えるようにしてみた。

手順

Perl Moduleの作成にはMinillaを使った。MojoliciousプラグインをMinillaで開発する手順は別エントリーに書いた。

Minillaを使ってMojoliciousプラグインを開発する

PAUSEアカウントを取得

注意点は各エントリー等に書いてある通り。一番悩むのはA short description of why you would like a PAUSE ID:というPAUSEの申請理由でした。

長くかかる場合もあるみたいだけど、自分の場合はその日のうちに返信来ていました。

Minilla release

MinillaでCPANにアップロードする方法はCPAN に姉を公開した話とかを参考に。

モジュール開発で一番大変なのはドキュメントの作成。恐らく通じないであろう英語で書かなくてはならないのツラい。ま、コード載せておけば半分くらいつたわる、はず。

あと、cpanfile.snapshotの扱いをどうすればよいかが分からない。他のモジュール見て回ると一緒にパッケージングされていないので.gitignoreに書いておいたけど、この方法で良いか不明。

失敗談

Mojolicous::Plugin::I18N の機能はそのまま使いたかったのでパッケージに含めてアップロードしたらネームスペースの権限に引っかかってしまった。おれおれモジュールの場合には問題ない事(?)だったので注意したい。

おそらくはそれさえも平凡な日々: CPANで意図しない名前空間の取得を防ぐために

懸念点

Locale::TextDomain::OOは、Mooベースだし、結構依存が多い。Cartonでパッケージ管理しているなら特に問題ないのかな。

雑感

  • とにかくモジュール開発にはMinilla(やDist::Milla)が大変便利。
  • CPANに公開するとなるとそれなりにテストやドキュメントを整備しなくてはいけないので大変な反面、とても勉強になる。
  • いろいろ試行錯誤したけど、それも勉強になる。

と、どれをとっても勉強になるので是非挑戦して頂きたい。

Filed under: perl,プログラミング

Trackback Uri






2016年 8月 21

プラグインとしては Mojolicious::Plugin::Mount  がある。短いコードなの読むと参考になる。

Mojoliciouアプリを埋め込む


追記:Mojolicious::Commandsを使う方法があるらしい。こっちの方が正統?

$app->routes->any( '/sub' )->detour(
    app => Mojolicious::Commands->start_app('SubApp') 
);

Mojolicious::Liteのアプリをマウントする方法は日本語だと Mojolicious::Guides::Routing に書いてある。

この方法を使ってMojoliciousアプリ(Liteではない)を埋め込む場合は、下記コードのようにMojo::Serverを使えば出来る。

# SubApp が Mojolicous::Liteの場合
$app->routes->any('/sub')->detour(app => SubApp::app());

# SubApp が Mojoliciousの場合
my $sub_app = Mojo::Server->new->build_app('SubApp');
$app->routes->any('/sub')->detour(app => $sub_app);

MyAppにSubAppを埋め込むだけの簡単なコードだとこんな感じ。

package MyApp;
use Mojo::Base 'Mojolicious';

# Route
sub startup {
    my $self = shift;
    my $app = $self->app;

    # Main route
    $self->routes->get('/')->to('foo#hello');

    # SubApp route
    my $sub_app = Mojo::Server->new->build_app('SubApp');
    $app->routes->any('/sub')->detour(app => $sub_app);
}

# Controller
package MyApp::Controller::Foo;
use Mojo::Base 'Mojolicious::Controller';

# Action
sub hello {
    my $self = shift;
    $self->render(text => 'Hello MyApp!');
}

# Sub App
package SubApp;
use Mojo::Base 'Mojolicious';

# Route
sub startup {
    my $self = shift;
    $self->routes->get('/')->to('foo#hello');
}

# Controller
package SubApp::Controller::Foo;
use Mojo::Base 'Mojolicious::Controller';

# Action
sub hello {
    my $self = shift;
    $self->render(text => 'Hello SubApp!');
}


# /    -> Hello MyApp!
# /sub -> Hello SubApp!

アプリケーションプラグイン

上記コードを使えば、Mojoliciousアプリでも自身を含めた再利用可能なプラグイン アプリケーションプラグイン のような事も出来るはず。

package Mojolicious::Plugin::EmbeddedSubApp;
use Mojo::Base 'Mojolicious::Plugin';

sub register {
    my ($self, $app) = @_;

    # ルートを追加
    my $sub_app = Mojo::Server->new->build_app('SubApp');
    $app->routes->any('/sub')->detour(app => $sub_app);
}

# Sub App
package SubApp;
use Mojo::Base 'Mojolicious';

# Route
sub startup {
    my $self = shift;
    $self->routes->get('/')->to('foo#hello');
}

# Controller
package SubApp::Controller::Foo;
use Mojo::Base 'Mojolicious::Controller';

# Action
sub hello {
    my $self = shift;
    $self->render(text => 'Hello SubApp!');
}

1;

アプリケーションでプラグインをロードする

package MyApp;
use Mojo::Base 'Mojolicious';

sub startup {
    my $self = shift;

    # プラグイン
    $self->plugin('EmbeddedSubApp');
}

1;

リンク

Filed under: perl

Trackback Uri