Text
マークダウン用エディタも探し続けている件
探している
前回はマークダウンからePubを作成する環境を探し続けていることを書いてみたけど、エディタのほうも探し続けている。
マークダウンで電子書籍を作成する環境を探し続けている
過去に出版してきたものは半分はAtomで残りはVS Codeで書いている。 それで満足ではあるのだけど、それでもまだ探し続けている。 一時期はwri.peにお世話になっていたけど、iPhoneで書くこと自体が激減したのでPCから執筆できるものを優先的に探すようになってしまった。
いままで試したもの
VimとAtom、Sublime Text、VS Codeは除外している。 というのも、電子書籍を書くときに集中してやろうとするとVS Code一択になってしまうし、さくっと書きたいときはVimになってしまっているのが現状だから。 それ以外で、ということで。
Haroopad
これ、かなりよかった。一か月くらいは電子書籍を書くために利用していた。だけど使うのをやめてしまった。原因はたぶんアイコンじゃないかな…
Haroopad
MarkDown#Editor
1年以上前に使ってみた程度だったけど、あまりにクラッシュするので使うのをやめてしまっていた。いまはもっといけてるのかな。
MarkDown#Editor
Wri.pe
もう当分メインで使っていたもの。ウェブサービスだったので外出先でも自動保存されてPCに戻ってきたら最後に書いたところから続きができてサイコーだった。 でも、ファイルを複数に分割したいという要求から頻度が減っていってしまった…
さらに、自動保存と言ってもサービスがダウンしていることがあるのか保存がローカルだけになってしまうことがあって、それはつらかった。
wri.pe
StackEdit
wri.peの後に試していたサービス。似たような感じのようで似ていない。 DropBoxへの保存やSNSへの公開機能などいろいろついてる多機能なやつ。 だけど、なぜだかあまり使っていない。 長い時間は書いていられない。ちょっと書いていくにはめちゃくちゃ良い。
StackEdit
MarkdownEdit
いまこの記事を書いているのがこれです。 これはC#で書かれた、いまどき珍しい感じのWindows専用エディタ。
MarkdownEdit
なんなのでしょう、不思議と集中できるのでブログなんかを書くときはよく使っている気がする。
ああ、日本語も使えるんだ、と思っていただけると幸いだけど、メニューなんかは日本語じゃなかった。見てみたら日本語にすることは比較的かんたんだったので、適当に訳して作ってみた。
MarkdownEdit-Language-Japanese
もっと良い日本語があれば教えてください。
これをダウンロードしたら展開して、出てくるjaフォルダをMarkdownEditがあるフォルダ内のLanguagesフォルダ内へ放り込みます。そしたらファンクションキーF9をおもむろに押すとユーザー設定がメモ帳で開きます。 この中のファイルの最後あたりにある「CultureLanguage」の値を「ja_JP」にしてやると日本語になると思います。
"CultureLanguage": "ja_JP"
テーマも複数選ぶことができて、自分でオリジナルも作成できるみたい。 ひとつだけ気になってしまうのが、終了するたびに「寄付を!」というダイアログが表示されてしまうところ。でも「寄付しました」を設定でONにすると表示はされなくなる。
Typora
最近試しているエディタ。これはnode.jsがバックにあるようでクロスプラットフォームになっている。node_moduleもインストールされている。
Typora
なんといっても見た目が美しい。もちろん日本語化されていないけど。
それに、コードスニペットを書くのに対応している言語がサジェストされるのも気持ちいい。
適当だけど、こんな感じにコードだけの記述ができる枠が登場するので、それはそれで集中できる。
我らのPowerShellも対応しているのですばらしい!コードは適当でごめんなさい
現時点での結論
現時点ではクロスプラットフォームで利用できて利便性や用途を考えると、わたしの中ではVisualStudio Code一択になってしまう。 Vimも素晴らしいけど、コードじゃないので感がある。
これらを除くとWindowsで作業することが多いのでMarkdownEditが3番目の選択肢で、しかも日本語に(勝手に)したので困らない。 typoraは素敵なんだけど、まだ使いこなせていないというのがある。 頻繁にアップデートされているようなので、使っていこうかなと思わせるところがある。
ちなみに
MarkdownEditはPandocのWindowsバイナリをそのまま内包しているので、そのままPDFに出力できたりするのが恐ろしいところ。 ただ、このときはデフォルトのスタイルシートが利用されるので、思ったように出力しようと思うとCSSのカスタマイズが必要になるー。
1 note
·
View note
Text
マークダウンで電子書籍を作成する環境を探し続けている
マークダウンで電子書籍を作成する環境を探し続けている
困ったことに、なかなか電子書籍をすんなり作成できる環境を決めかねている。
いままで出版してきたものはすべてPandocというツールを利用したものだった。
コードのハイライトはhighlight.jsで、マークダウンに対して行うにはmetalsmithというnpmモジュールとmetalsmith-metalicというmetalsmithプラグインを併用して行っていた。
しかしWindowsとmacOSで同じような環境を作成しようとすると、意外と面倒だった。
metalsmithをコマンドラインツールとして使用したいのだが、WindowsとmacOSで起動のさせ方やどのファイルを実行するかなど、マークダウンファイルの与え方など細かい差があって、結局OSで切り分けするようなgulpファイルを書いていた。
でもどうにも面倒なことが1つあって、著者情報などを含めるYAMLフォーマットだけのマークダウンファイルをmetalsmith-metalicにかけてしまうと「マークダウンじゃねーじゃん」ということで空ファイルが出力されてしまうという困ったことがあった。現在はここだけ除いてmetalicしてる。
代わりを探そう
最近はマークダウンエディタでも便利なものが多くて、直接PDFにすることができたりする。スタイルシートを指定する必要があってもmarkdown-pdfというnpmモジュールを使うと不穏なエラーは出るもののPDFは生成することが簡単にできる。もちろんWindows10でもubuntuサブシステムを利用すれば余裕だ。
一方、epubを吐き出すことだけを考えると、そういうことにはならない。
やたら売れたりするわけではないからか、環境を整えるのが面倒だからかそこまで発展してないなという印象だ。
最近試してみたものを1つ紹介してみる。
epub-gen
これまたnpmモジュールだが、非常に小さなコードでepubをサクッと出力することができる。
var epub = require('epub-gen'); var fs = require('fs'); var json = JSON.parse(fs.readFileSync(process.argv[2]), 'utf8'); new epub(json);
これでコンソールから次のようにするとファイルが出力される。
node index.js sample.json
sample.jsonはルールに従って次のようにしておく。
{ "title": "晴れた空を誉めるなら夕暮れをウェイト", "author": "柏原 基規", "publisher": "なるーらぼ", "content": [ { "title": "ダ��ヤモンドだって", "data": "年をとっちゃう。<br/>まして、星なんて…<b>燃えて消えるんだ!!</b>" }, { "title": "形あるものが", "data": "限りあるなんて!無常!<br/>さみしさを添えて…<b>信じあっている。</b><img src='http://localhost/03-001.JPG' />" } ], "output": "./sample.epub" }
そうすると、こんな感じになる。
便利!
epub-genで電子書籍をつくるときに困ること
非常に簡単にjsonからepubにすることができた。content[].dataをマークダウンからHTML変換した文字列にしてやれば、マークダウンから自動でepubを作成することができる仕組みも簡単にできそう!
とぬか喜びした。
お気づきかもしれないが、先ほどのepubは画像ファイルを含んでいない。
どうやって表示しているかというと、ブラウザでページを見るときと同じくウェブサーバーからダウンロードして表示させているのだ。
だから画像のimgタグにあるsrc値は「http:」から始まっている。これはepub-genのreadmeにも記載があった。上記のサンプルでは手元でウェブサーバーを起動した状態にしていたわけだ。
どうやらepub-genでは画像をepubへ含めることができない。そのためこのような方式になっていると思われる。むむ、
でんでんコンバータ - http://conv.denshochan.com/
の有能さが際立つ。。。
ウェブサーバーをお持ちの電子書籍の著者さんはもしかしてたくさんいるのかな。
より良い環境を目指して
いまのところ、自分のやりたいようにやるにはPandocを利用した一連の仕組みが一番便利のようだ。
無念…しかし、もっと良い方法があるはずなのだ。
何も気にせず、マークダウンだけ記述していって画像は近くにimagesフォルダなど作成してその中へ放り込んでおいて、スタイルシートも同じフォルダ内に含めておけばまとめてepubにしてくれる未来があるはず。
きっと近い将来、MicrosoftとかがVisual Studioにマークダウンからepubにビルドしてくれるようなものを用意してくれるんだと思い込みつつ。
1 note
·
View note
Text
PowerShell on Bash on Windows
かなり遅まきながら自分のWindows10にもBashを連れてまいりました。 導入はものすごく簡単なので、すでにInsider Previewからご利用の方も多いのかもしれません。
わたしはそれほど興味がなかったので(PowerShellでだいた���間に合ってる)、今頃の参加となりました。 それも、導入の動機がPowerShellだからです。
PowerShellがオープンソース化された
いろんなところで話題になったようでなっていない、PowerShellのオープンソース化です。いよいよmacOSやLinuxでも利用できるようになりました。 いままでの電子書籍もきちんと「Windows」とつけててよかったと思っています。
こんなものより、さきにcmd.exeをオープンソース化しろという声が聞こえてきますが、せっかくなのでクロスプラットフォームのPowerShellを味わいたいなと思いましてBoW(Bash on Windows)にチャレンジです。
セットアップは割愛します
いろんなところで記事になっていたので割愛します。 「プログラムと機能」から「Windowsの機能の有効化または無効化」を開いて、「Windows Subsystem for Linux(Beta)」にチェックを入れてOKすれば有効になります。再起動後に「設定」から「更新とセキュリティ」の「開発者向け」を開いて、「開発者モード」を選択するとBashが利用できるようになります。
あとはコマンドプロンプトなどから「bash」とすれば自動的にUbuntuがアプリとしてインストールされます。
どんな感じなの
ざっとしか使ってみていませんが、あちこちで記事になっているとおり、日本語入力に対応していません。 やってやろう!という方はこちらの記事を参考にしてはいかがでしょうか。
Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。
そんなことよりも、よく使いそうなものを見てみましょう。 少し感激したのはCygwinやMinGW、msys2なしでSDKMANが利用できることでしょうか。
curl -s "https://get.sdkman.io" | bash
posh-gvmを使わなくてもSDKMANが利用できるようになります。と思ったのですが、このBoWはWindowsとはまったく別の環境になっています。ですから、こちらでもJavaを利用しようと思うとこの環境用にJavaが必要になります。
すでにJava8のjdkがあったのでそこをJAVA_HOMEにしてみたりいろいろしましたが、後から冷静になれば当たり前の話で…なぜならUbuntuなんですから、ここは。
だからWindowsのバイナリはことごとく動作しません。
今回はとりあえずとしてopenjdk-1.7だったかを導入しました。 でもこれだとgroovyshやgroovyConsoleは起動にものすごく時間がかかってしまい途中でkillしてしまいました。
なお、SDKMANのインストールにはunzipが必要です。これもインストールされていませんのでインストールしましょう。
sudo apt-get install unzip
Windowsでapt-getって…
pythonは「python」だと2.7.6が、「python3」だと3.4.3が導入されていましたので、特になにもしてません。
ruby���入っていなかったのでapt-getからインストールしたら1.9.1でした。 古い。
そういえば、Ubuntuのどれ?
そういえばと思ったのでバージョンを見てみることにしました。
cat /etc/lsb-release
すると14.04でした。
なるほど、16.04とかじゃないんですね。
rubyを入れようとrbenvを準備することにしました。 しかしGitも別です。これもインストール。
sudo apt-get install git
そしてgit cloneで導入しました。 2.3.1くらいのバージョンのものを入れようとしましたが、コンパイラもありませんのでビルドができません。gccも必要なようです。
sudo apt-get install gcc
これでrubyも用意できました。
本題:PowerShell
やっと本題のPowerShellです。GitHubのセットアップ方法を見ながらやりました。 まずは必要なライブラリを導入します。
sudo apt-get install libunwind8 libicu52
ここまでできたらGitHubのリリースページからダウンロードしてきたpowershellのパッケージを使ってインストールします。
sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb
これであっさり導入完了です。
しかし…powershell自体はあっさり導入できて起動もするのですが、表示がガタガタです。本物のUbuntuでも同じなのか、それともcmd.exeだからなのかよくわかりません。Issue上がってそうですが、まだ調べてないです。
気を取り直してWindows環境、BoW環境それぞれで書いたps1ファイルを実行してみましたが、どちらもさらっと実行できました。
ここで「そりゃそうだろ」と思った方はわたしと同じです。 大事なことを忘れていませんか?実行ポリシーです。 Windows以外には無い概念だからか、普通に実行できてしまったのです。
powershell -f sample.ps1
Windows版でよくご利用の方はさらに「!?」と思うかもしれませんが、「.\」がファイル名についていません。このあたりは仕方ないのかな?
さらに。対話環境に入って実行ポリシーを確認してみたところ、「Unrestricted」でした。つまり、なんでも実行できます。
Windowsのときと同じように実行ポリシーを指定しようとすると、「サポートしてない」エラーになります。
そこでBash上で実行権限を落としてみようとやってみたのですが…
chmod 666 sample.ps1
残念ながら777(フルアクセス)から変更されませんでした。
まだまだアルファ版とベータ版
PowerShellはアルファ版、BoWはベータ版ということで今後に期待であります。
「ls」すると「Get-ChildItem」ではなく「/bin/ls」が実行されるので、ちょっと面食らうところもあります。
Figure out aliases #929 https://github.com/PowerShell/PowerShell/issues/929
もっとC++もC#も勉強しなければ さきにPowerShellか。
4 notes
·
View notes
Text
懲りずにPowerShellの電子書籍「ふだん使いするWindows PowerShell」を出版しました
もう随分このブログを更新していませんでした。
今回はタイトルの通り、新たに電子書籍を出版したのでご報告です。また懲りずにPowerShellについてのものです。
今回は入門書という形式のものではありません。 ふだんからPowerShellを使うようにしたらもっとユーザーが増えないかな、ということもあってどう使ったらいいかとか「クソが!!」って思うまえに「まぁまぁいいじゃない」というような気持ちになってもらえないかなと考えて書いてみました。
入門書としては非常にダメでして、「うごかして学ぶ〜」の方がよほどかいいと思います。
時間のない方は最速入門の記事を読んだほうがさらにいいでしょう。
PowerShell基礎文法最速マスター http://winscript.jp/powershell/202
サンプルコードも可能なかぎりつけました。 しかしKindle E-Inkでお読みの方にはコードの部分が異様に大きく表示されます(プレビューツールで見るかぎり)
逆に解像度の高いKindle HD系のものではコード部分が小さく表示されてしまいます。 どの端末でもきれいに表示させるのは難しいですね(スタイルシートをきちんと理解して書かないからではないだろうか)。
なお、Kindle Unlimitedの対象のようです。 登録している方はタダでお読みいただけますので、どうぞどうぞ。
さらに、今回から奥付に記載していた内容を変更しています。 いままでのものは次のように書いていました。
本書の全部、または一部の複写、複製、転載を禁じます。必要な場合は発行元へご連絡ください。
今回からは本文の文章一部やコードのコピペを推奨しています。 さらに、誤りや認識違いなどございましたらブログ、SNS等でご指摘いただけると嬉しいです。
ふだんからPowerShellを使っているのであれば「もっといい方法がある」とか「このやり方はダメ。全然ダメ。こうすべき」などご指摘いただけると勉強になりますし、この書籍もアップデートしていくことができます。
なんとあつかましい…
ということで、よろしくお願い致します。
7 notes
·
View notes
Text
MacでASP.NET MVCやってみた
こんにちは。以前からやってみたかったMacでのASP.NETをやってみ��した。 というか先週くらいにやって、つまづいたりハマったりしてたので時間かかりました。
結論から言うと、やはりWindowsのVisual Studio様は素晴らしいということに尽きます。 あんなに至れり尽くせりなのにMacでやろうというのはどうかと思います。 でも、できたらMacでもやってみたいじゃないですか。
スペック
レガシーのASP(Active Server Pageと呼ばれてたやつですね)は10数年前に経験してて、.Netになってからはその時の辛さを思い出して手を出していませんでした。 もちろんASP.NETのFormなんかは情報として仕入れてましたが…
また、MVCというのもrailsかじったくらいでしかなくて、本当に理解してるかと言われると怪しいです。 いまいちどういう仕組みで実現してるのかなんてことはrailsのソースなんかも読んでないですし、rubyの黒魔術を駆使して作られてるとかいうことだったので敬遠してた気がします。 バージョン3くらいからRackアプリになったので、なんとなくレベルの理解です。
ということで、いきなりMVCじゃなくても良さそうなのですがやってみました。
まずは導入
どうやるかはまったくわからないので、Windowsのときとは違ってGetting Startみたいなものを探しました。 すると公式にあるのでそれを順にやっていきました。
Installing ASP.NET 5 On Mac OS X — ASP.NET documentation https://docs.asp.net/en/latest/getting-started/installing-on-mac.html
こちらを参考にしますと、コマンドラインからのインストールということであります。 順番としては
mono をインストールする
Visual Studio Codeをインストールする
ASP.NET5 for Macをインストールする
という段取りですすめていきます。 わたしは1と2はすでに導入済みだったので3からでした。
monoはHomebrewから導入するのが便利だと思います。 Visual Studio Codeは以下からダウンロードしてインストールですね。
Download Visual Studio Code - Mac OS X, Linux, Windows https://code.visualstudio.com/download
さて、では本題のASP.NETですがHomebrewなんかと同じような導入の仕方のようです。
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
こちらをターミナルから実行します。
これで意味がわからないかもしれませんが.Netのランタイムを切り替えするためのDNVMというツールが導入できます。 Dot Net Version Manager だそうです。なんじゃそりゃ。rbenvとかSDKMAN!みたいなものですかね。 これはあくまでもバージョン管理ツールで、ASP.NETはまだこれからです。
次にランタイムとしてDNX(Dot Net Execution environment)を導入していきます。 これはさきほど導入したDNVMを利用していきます。
まずは.Net CoreのDNXです。
dnvm upgrade -r coreclr
installではなくupgradeなのがちょっと気持ち悪いですが、これでサクッと���ります。
そうしたら次はMonoのDNXです。 なぜ両方必要なのかは後ほど嫌という程効いてきます。
dnvm upgrade -r mono
これで導入できます。この実行にはmonoが導入されている必要があります。
導入したDNXの一覧は以下のコマンドで見る事ができます。
dnvm list
じゃあ、と思うところですが、まだまだ先があります。 次はプロジェクトの雛形作成のためにYeomanを導入します。
Yeomanということは…そうです。node.jsが必要です。 わたしは電子書籍制作のために導入済みなので必要なパッケージ導入からでした。
まずはYeoman、Bower、Grunt、Gulpなどを入れていきます。
npm install -g yo bower grunt-cli gulp
そしてASP.NETの雛形を作成するパッケージを入れます。
npm install -g generator-aspnet
やっと環境が整いました!!
やってみる
長かったですが、やっと始まります。
まずはプロジェクトの雛形をYeomanに作ってもらいます。 プロジェクトフォルダをつくりたいところへ移動して、次のように実行します。
yo aspnet
そうするといつものおじさんが登場します。
今回は認証機能なしのWeb Applicationにしてみます。 ご覧いただくとわかるとおり、コンソールアプリも作成できるようです。 プロジェクト名を聞かれるので、適当に入力して実行するとサクッとプロジェクト雛形が作成されます。
いやー便利。 そして作成完了したところへそっと書いてくれているのが、次の内容を実行しましょうというものです。
cd MyWebApp dnu restore dnu build dnx web
実際このとおり実行します。 最初は「dnu restore」が時間かかりますが、2度目以降は早いです。 なお、デフォルトでは「yo aspnet」はGulpを利用します。 Grunt派の方は「--grunt」とオプションをつけるとよいそうです。
ということで「dnx web」を実行すると「http://localhost:5000」へブラウザアクセスすればすでに雛形アプリの状態で表示されます。 Windowsに比べたらどっちが早いかなーと思いますが、yo aspnetからだけを見れば誤差かもしれません。 Visual Studioでやっても裏で同じことが起きてますからね。
ところで、.Net CoreのDNXでビルドしてしまった方はビルドに失敗すると思います。
いまのところビルドにはまだmonoが必要ということです。 ですからdnvm listしてcoreclrに「*」がついてる場合は以下を実行し��monoのDNXへ切り替えてから実行しましょう。
dnvm use -r mono [dnvm listででてくるバージョン]
うまくいってたら次のようになります。
ブラウザからみると…
はい、もう動いてますね。ここまでは便利。ここまでは。
普通の段取り
コントローラやビューについてはyo aspnetにサブジェネレータが搭載されているのでそこから作成することができます。
コントローラだと
yo aspnet:MvcController PostsController
これでプロジェクトフォルダ内のControllersフォルダへ「PostsController.cs」が作成されます。
ビューだと
yo aspnet:MvcView PostsView
これで実行したカレントフォルダ内に「PostsView.cshtml」ファイルが作成されます。 Viewsフォルダには入りません。またさらにフォルダを用意してまとめたい場合には手動で作成、移動が必要です。
モデルに関してはMVC専用のサブジェネレータがないようで、クラス作成のサブジェネレータを使います。
yo aspnet:Class Post
これで実行したカレントフォルダに「Post.cs」が作成されます。 Modelsフォルダは雛形にありませんので自分で作成して移動するようにします。
さらにDbContextクラスを継承したクラスファイルはサブジェネレータがありません。 自分で記述していきます。
ハマる
そういうことで、つくっていって「あー、そうなるね」というのをやってみていたんですが、いくつかハマってしまいました。
bowerでビルドできなくなる
まずbowerをつかって静的コンテンツ用のライブラリを導入したのですが、いきなりビルドできなくなってしまいました。
調べてみると次のIssueに当たりました。どうやらこれのようです。
Can't return a View on OSX when npm or bower packages have been installed #2348 https://github.com/aspnet/Mvc/issues/2348
利用していたmonoのバージョンが古かったようで(この時点では4.2.1でした)、バージョンを上げると解消しました。
brew upgrade mono
EntityFrameworkのmigrationが失敗する
次にハマったのはEntityFrameworkの利用です。 どうあがいても利用できませんでした。 しかしよくよく調べてみると、これは.Net CoreのDNXで実行する必要があるようです。 そこでDNXを切り替えてみると動作するようになりました。
なおEntityFrameworkを利用するにはWindowsではPowerShellから導入できますが、Macではproject.jsonの「dependencies」へ以下を追記するようになります。 バージョンはNuGetで検索して確認してみてください。
"EntityFramework.Sqlite": "7.0.0-rc1-final", "EntityFramework.Commands": "7.0.0-rc1-final"
また、コマンドとして利用できるように同じくproject.jsonの「commands」へ以下のようにefを追記します。
"commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" },
これでEntityFrameworkを利用することができます(.Net CoreのDNXならね)。
dnx ef migrations add Initial dnx ef database update
SQLiteのファイルがプロジェクト内に作成されるはず。
DbContextが見つからないエラーが発生
ここでホッとして気をぬくと、ブラウザからお目当のコントローラへアクセスするとエラーがでまくります。 自分で作成したDbContextが見つからない、といった内容です。 それはそうです。次の作業が抜けているからです。
DbContextを紐付けするのは「Startup.cs」の「ConfigureServices」メソッド内に記述することでできます。 こちらにもがっつり記述されています。
ASP.NET 5 Application to New Database — Entity Framework 7.0.0 documentation https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html
手元ではSQLiteを利用するので次のような感じになります。
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddEntityFramework() .AddSqlite() .AddDbContext<MyBlogContext>(); services.AddMvc(); }
ここでいう「MyBlogContext」がDbContextを継承したクラスです。
もちろんusingで以下を加えておく必要があります。
using MyWebApp.Models
これでコントローラから見つけることができます。
最後に
実はまだCRUDつくってみて「ふーん」という段階ですので慣れるまでもう少しかかりそうな気がしますがEntityFrameworkがDNX切り替えなしでビルドと両立するようになるといいですね。 テキストエディタとしてはVisual Studio Codeで十分な気がしなくはありません。 もっと込み入ったことをやりはじめる��「ぐぬぅ」となるのかもしれませんが、現時点ではわかりません。
それでもまだまだ改良が進められているので楽しみではあります。
4 notes
·
View notes
Text
Visual Studio Codeの拡張(Extension)をやってみた
今回は勉強がてらVisual Studio Codeの拡張をつくってみました。 といっても、サンプルというかチュートリアルにあるコードをほぼ写経したに近いです。
動機
いま現在、性懲りもなく電子書籍を執筆しております。 書いているときに、Atomで書いていたときから思っていた「あーっ文字数も表示されたらいいのに」というのがありました。 そんなに気にしていなかったことだったのですが、日本語なので半角スペース単位でのワード数なんて気にもなりません。 何文字くらい書いたのかを知りたい!と唐突に思いました。
そこで、VS Codeに移行したことなのでせっかくだから拡張を書いてみることにしました。
書き方
VS Codeの拡張(Extension)はJavaScriptでもTypeScriptでも記述することができます。 よくわからないのでググるとチュートリアルに出会いました。
Your First Visual Studio Code Extension - Hello World https://code.visualstudio.com/docs/extensions/example-hello-world
公式のチュートリアルなので、高まりますね(ん?)
これを読むに、どうやらYeomanが必要なようです。 あー、MacでもASP.NETで大変お世話になってるなーと思いつつもう導入済みだったので、拡張をつくるときに必要なものから チュートリアルに沿って導入していきました。
npm install -g generator-code
これでYeomanが入ってたらもう作り始めることができます。
yo code
このあたりはASP.NETと同じ感じがします。
PowerShellコンソールだと、ちょっと顔のずれたおじさんが登場してほっこりしますね(しないか)。
ここでNew Extension (TypeScript)を選択します。 拡張の名前や説明、パブリッシャー(Marketplaceに公開するならきちんと)などを適当にいれていけばひな形が完成します。
つくりはじめると、Gitリポジトリも初期化してくれますし、ソースコードなどの生成が終わったらnpm installも自動的にしてくれます。 便利…
ずらっとこのような感じで指定した拡張名のフォルダ内にもろもろが作成されます。
このうち、開発に必要なのはsrcフォルダとtestです。 srcフォルダ内に「extension.ts」というTypeScriptファイルができてます。 このままでも既に実行することができるので、できればVS Codeでこのフォルダを開きましょう。
開くと、F5キーでいきなり実行することができます。 足場を組んだこの時点ではコマンドパレットから「Hello World」というものを選ぶとメッセージで「Hello World」と表示されるようになっています。
拡張機能のデバッグ用��もう1つVS Codeが起動してきて、裏にはもとのVS Codeが残っています。 ここへ動作状況などが出力されます。
あとはカチャカチャとコードを書いていけば完成です。
完成した拡張
ほとんど写経で完成してしまったのですが、TypeScriptは違和感ないかもしれない…という感触です。 なにせVS Codeがほとんど補完してくれるので、躓くところはありませんでした。
Macにも同じものがほしいなーと思ったので、とりあえずローカルで作成したものをインストールすることにしました。 ユーザーフォルダ配下の「.vscode\extensions」フォルダ内に「out」フォルダと「package.json」を持っていけば動作しました。 こんな感じで動作しています。
wri.peにはあるのに…プログラミングのときは文字数なんて関係ないのでしょうね、きっと。
Marketplaceにこの拡張を公開する方法も調べて、その手前までできていますがMacで動くところだけ見届けてからにしようと思います。 いまのところWindows10でしか動かしていませんし。
とか言っていたら、Mac OSXでも動いてますね。 すごい、VS Code。
Githubに置いておきました。 うーん、置いてから見てみると雛形のままのところがあるしクイックスタートのマークダウンファイルが残ったままだったり…ダメダメですね。
しかもまだ公開してないから
ext install charcount
でインストールできないし。 勢いだけ、という感じでした。
最後に
TypeScriptはJavaScriptではありませんが、別物っぽくもなくて、どちらかというとAdobe FlexやAdobe AirをつくるActionScriptのほうが近いような感覚を受けました。 使っていたのが7年くらい前なので、違うかもしれないですけどね…
また思いついたら勉強がてらつくっていきたいと思います。
3 notes
·
View notes
Text
AtomからVisual Studio Codeへメインが移りつつある
こんにちは。 ここ数か月更新してませんでした。
久しぶりに更新ですが、今回はAtomから離れてVisual Studio Codeに本格的に移行しようかと考えていることを書いていきます。
Atom
一気に普及したElectron製のエディタですね。 電子書籍なんかを記述するときに大変お世話になりました。 マークダウンを書くのが中心なのですが、ハイライトも便利でした。 ちょっと不便なのが**aaa**みたいな風に記述するときにスペースを空けておかないと ハイライトのされ方がちょっと変になるのがずっと気になってました。
これは拡張をアップデートしてないから、もっといいものがあるから、などいろいろありそうだったのですが、 徐々にAtomカッコいいけどなーということになっていました。
VS Code
昨年登場して、こちらもElectron製ですね。 まだ日本語を書くことが中心のわたしには少しつらい(見た目的に)けれど、WindowsでもMacでもということでAtomと並んで 両方使��ようになっていました。
さらに「もう使うのやめよかな…」と思っていたのが拡張の「Vim」のやつです。
Vim | Visual Studio Marketplace https://marketplace.visualstudio.com/items?itemName=vscodevim.vim
こちらは古くからあることもあって、リリースされてからずっと使ってたような気がします。 しかし、あまりVS Codeを使うことはなかったので長らく気づかなかったのが「*」が入力できない、というものです。
しかも妙な記号も入力されるキーがあって、「うわー」と思い一時期使っていませんでした。 ところが、ここ最近になってふとこの拡張のリポジトリを見に行ったんです。
すると、キーボードの配列を設定することができるようなのでした。 ただ残念なのが日本語キーボードの配列はなかった… 設定のところにもばっちり記述がありました。 読んでないわたしがわるい。。。
Supported Values: en-US (QWERTY) (default), es-ES (QWERTY), de-DE (QWERTZ), da-DK (QWERTY)
ですから、設定しようが何しようがこれらに当てはまらなければen-USになるというコードになっていたところで、はじめて代替を探すことにしたのでした。
代替あったよ!
ありました。ext installで表示されるvim候補の2番手です。
amVim | Visual Studio Marketplace https://marketplace.visualstudio.com/items?itemName=auiworks.amvim
これはキーボード配列なんていじっていませんでした。 現時点ではおそらくこれが一番よさそうな気がします。
AtomのほうのVim拡張のコードを見たときにはキーボードの配列うんぬんのコードなんてなかったので、つくる方の考え方ひとつですね。
これが見つかったことで、ぐっと良くなりました。 Macのほうもこれに入れ替えよーっと。 というのも、MacではVS CodeだけがASP.NETを記述するときの頼りなんです。 いやいや、ほかのIDE使えよって思うかもしれませんが、あまりすごいの必要ないので… そこまでのものならWindowsでVisual Studio使ったほうが早いですし。
きっとこの調子で徐々によくなっていくと思うので、Atomがサブ、VS Codeがメインというのが続きそうです。
0 notes
Text
PSObjectとPSCustomObject
先日、ものすごく時間が経過してから拙著「はじめようWindows PowerShell」を読んでいただいたブログを発見しまして。
はじめようWindows PowerShell [Kindle版] を読んでみた - tech.guitarrapc.cóm
本当に失礼いたしました。
しかも、理解が怪しい箇所についても指摘いただきまして感謝しかございません!! 40近くなっても教えをいただけるというのはありがたいことです。
そのブログ記事の中で、指摘いただいたことを見ていこうと思い立ちましたので書いていきます。 今回はPSObjectとPSCustomObjectについてです。
PSObject
これはPowerShellバージョン1.0から導入されている���ので、拙著の中でも取り上げているものです。 書いたときには「企業で利用されているパソコンでWindows7がまだまだ主流であることもあってバージョン2.0までの話にして、PSCustomObjectについては少し触れるくらいにしよう」というつもりでした。
PSObjectは独自の型をつくるために利用することができるもので、オブジェクト指向的なことをすることができます。 しかし、面倒なのがAdd-Memberでひとつずつメンバーを登録していく必要があるという点です。 そういうこともあって、わたしは積極的に利用してはいませんでした。 完全に無知から来るものですね。
バージョン2.0では「New-Object」コマンドレットで作成するときのオプションとして「-Property」が登場していたのでハッシュテーブルを利用すれば一度に登録することができます。
$obj = New-Object -TypeName PSObject -Property @{ "id" = 1; "name" = "m0t0k1"}
出力すると以下のようになります。
id name ---- -------- 1 m0t0k1
このとき、上記の変数objをGetTypeメソッドで確認すると、「PSCustomObject」になっています。
PSCustomObject
こちらの方法が少しだけ触れているやり方なのですが、バージョン3.0以降でしか動作しません。
$obj = [PSCustomObject]@{"id" = 1; "name" = "m0t0k1";}
PSObjectで作成したときと同じ出力になります。
id name ---- -------- 1 m0t0k1
とはいえ…Windows7であってもバージョン3.0を導入できないかと言えばそうでもありませんので絶対にインストール禁止とかいうような企業団体でなければ気にしなくてもよいかもしれません。 わたしが勤めていたところはそういった状況に近しいものがありましたね…
「PSCustomObject」とGoogleで検索すると、トップが@guitarrapc_techさんの以下の記事で、2番手がわたしの…というのを見るとみなさん英語でお読みなんでしょうね、きっと。あるいはごく自然に利用していらっしゃるのか。
PowerShellでPSCustomObjectに複数のObjectを追加する - tech.guitarrapc.cóm
なお、PowerShellの補完機能を使って次のようにするとエラーになりますのでお気を付けください。同じ意味のような気がしなくはありませんし、完全修飾名でも大丈夫なはずなんですけど…
$obj = [System.Management.Automation.PSCustomObject]@{"id" = 1; "name" = "m0t0k1"}
こうすると、
"System.Collections.Hashtable" の値を "System.Collections.Hashtable" 型から "System.Management.Automation.PSCustomObject" 型に変換できません。 発生場所 行:1 文字:1 + $obj = [System.Management.Automation.PSCustomObject]@{"id" = 1; "name ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) []、RuntimeException + FullyQualifiedErrorId : ConvertToFinalInvalidCastException
文法上で許容してるということなんでしょうかね。もう少し追求が必要な気がしています。 そこで気になるのが、さきほどもお話ししたとおり?「どうやらハッシュテーブルであればPSCustomObject以外にも変換できる」ようなんですよね…
非カスタムオブジェクト以外への変換
こちらに書いてあるのですが、これだけ見るとさきほどのものはエラーにならなくてもいいような気がしてしまうんですよね。
about_Object_Creation https://technet.microsoft.com/ja-jp/library/jj159398.aspx
「ハッシュ テーブルからの非カスタム オブジェクトの作成」という項目に記述がありますが、ここでは名前空間付きでクラスを指定しています。 実際にやってみました。
[System.Management.Automation.Remoting.PSSessionOption]@{IdleTimeout=43200000; SkipCnCheck=$True}
うまくいくんですよね…
MaximumConnectionRedirectionCount : 5 NoCompression : False NoMachineProfile : False ProxyAccessType : None ProxyAuthentication : Negotiate 以下略
これを利用できるのは条件があるようで、以下の要件があるそうです。
このメソッドは、null コンストラクター (パラメーターを持たないコンストラクター) があるクラスに対してのみ機能します。オブジェクト プロパティは、パブリックかつ設定可能である必要があります。
確かにPSSessionOptionクラスはそのようですね。コンストラクタがあります。 一方、PSCustomObjectクラスはコンストラクタがありませんね。そういう違いなのかもしれません。PSCustomObjectはPSObjectのラッパークラスなのでPSObjectのコンストラクタが呼ばれているのでしょうか… もう一度調べ直そうと思っています。
最後に
まだほかにもご指摘いただいた点があるので、まだまだ勉強が必要ですね。 バージョン3.0以降であればハッシュテーブルをPSCustomObjectに変換して使ったほうがいいですよ。 いまだバージョン2.0以前の方は仕方ないのでNew-Objectをお使いください。
1 note
·
View note
Text
.NET CoreでMacでもC#できて楽しい(と思う)
.NET Coreが登場して、Monoを使わなくてもMacやLinuxでもC#でプログラミングできるようになりました。 とても楽しいですね。
現状
とはいえ、世界中でガンガン使ってもらってIssueがどんどん出ているのでしょう。 「あれ?」と思うと大抵はIssueにあがっているという状況です。
きっとこれはPashもそのうち.NET Coreで動くようになるのかな?
Getting started with .NET Core
いまいちまだよくわかっていませんが、とりあえずMacだと公式のpkgファイルがあるので素直にインストールすると大丈夫です。
「システム環境設定」>「セキュリティとプライバシー」からインストーラを実行できるように��たらインストーラが起動できるようになります。
Windowsでも大体同じなんですが、先日ダウンロードしてみたらWindows Deffenderがマルウェアとして検疫してしまうということが起きました。 ググるとやはり世界で発生してるようで、Issueにあがってました。
Windows defender finds mailware in the donet-win-x64.latest.exe installer #1675 https://github.com/dotnet/cli/issues/1675
インストール
インストーラに従えばまったく問題ない…こともないか。
インストーラが起動したら「続ける」をクリックします。
使用許諾契約が表示されるので「続ける」をクリックします。
同意が求められるので「同意する」をクリックします。
インストール先を尋ねられるので気にせず「インストール」をクリックします。
コピーが完了して完了画面が出たら終わりです。 ですが、ここでちょっとよく読んだほうがいいねってことが書いてあります。
この画面には「Install Dependencies」と書いてあります。太文字ですから、きっと大事なことなんですね。
何が大事なのかというと、Open SSLの1.0.1か1.0.2をインストールしておくようにと書かれているんです。 わたしもしれっと読み飛ばしていたのですが、いきなりエラーを食らいましたのでおとなしくインストールしておきましょう。
エラーの内容は「The type initializer for 'Crypto' threw an exception.」というものです。 よく見ると、DLLの読み込みができないという内容のエラーになっています。
ですが、こちらのIssueを見ていただいたらわかるとおり、先ほどの完了画面に書いてあることさえしておけば発生しません。
dotnet restore (OSX) #1161 https://github.com/dotnet/cli/issues/1161
つまりはOpenSSL入れようということです。なお、わたしの環境ではすでに1.0.1が入っていましたがエラーになりました。ですので、HomeBrewをアップデートしてからOpenSSLのバージョンを1.0.2へ上げることにしました。
ということでHomeBrewを導入済みであれば次のようにしましょう。
brew install openssl
なお、まだインストールは終わっていません。インストーラをダウンロードしたページをよく見てみると、他にもまだ書いてあります。
This installer will install the tools and put them on your PATH.
環境変数PATHへ追加してね、ということです。 しかし、どこにインストールされたんだ?と思って以前のDNVMなんかと同じかと調べてみましたが、全然違いました。こちらです。
/usr/local/share/dotnet/bin/dotnet
結局pkgファイルを展開してどこへインストールされるのか調べてしまいましたが、GitHubのリポジトリを探したらソースに書いてありました。
なんらかの方法でPATHを通してください。わたしは「.bashrc」に入れてしまいました。 さきほどの読み込めないDLLが、というCryptoなんとかも「/usr/local/share/dotnet」配下にありました。
使ってみる
Getting Started with .NET Coreのページに書いてあるとおりなのですが、ディレクトリをつくってそこで「dotnet」コマンドでプロジェクトを作ります。
mkdir sample cd sample dotnet new
といっても、3つのテキストファイルが作成されるだけです。 作成されるのは以下のものです。
Nuget.Config
Program.cs
project.json
それぞれ、名前のとおりです。プロジェクト設定がJSONなのはいいのか悪いのか��くわかりませんがXML書かなくていいそうです。
あとは適当にProgram.csを編集するか、しなくても「Hello World!」は表示できるものになっています。 一番最初はNugetで.Net Frameworkをダウンロードしてくるので時間かかります。
dotnet restore
これはASP.NETと同じですね。 終わったらビルドします。
dotnet build
もし実行も同時にしたい場合は「run」コマンドにしてください。
dotnet run
賢い?のでソースコードなどに変化がなければビルド済みのバイナリを実行してくれます。
Compiling trtest for NXCore,Version=v5.0 ompilation succeeded. 0 Warning(s) 0 Error(s) Time elapsed 00:00:02.3592674 Hello World!
正直言って、出力はまだガタガタしております。「Compilation」の先頭の「C」が消えてしまっていますし。
using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { var x = "Dot Net !!"; Console.WriteLine("Hello World!"); Console.WriteLine($"Hello {x}"); } } }
うん、C#はバージョン6ですね。
「obj」ディレクトリが同じディレクトリ内に作成されるのですが、中間ファイルなんかというよりはコンパイルに必要な設定が吐き出されているようです。
total 40 -rwx------ 1 motoki staff 4.3K 3 13 23:08 dotnet-compile-csc.rsp -rwx------ 1 motoki staff 369B 3 13 23:08 dotnet-compile.assemblyinfo.cs -rwx------ 1 motoki staff 4.7K 3 13 23:08 dotnet-compile.rsp
ディレクトリは「Debug」>「dnxcore50」配下になっています。なお、バイナリが出力される「bin」ディレクトリも大体同じ構成です。 ここの構成はWindowsでも同じですね。 ただ、binの直下に中間ファイル的なものが出力されて、実際の実行ファイルはさらに下の階層にできています。
手元の環境では「osx.10.10-x64」ディレクトリ配下へプロジェクト名のディレクトリと同じ名前のファイルが作成されます。みたところ、DLLなんかも出力されているようです。
total 736 -rwxr-xr-x 1 motoki staff 295K 3 13 23:08 libhostpolicy.dylib -rwxr-xr-x 1 motoki staff 42K 3 13 23:08 sample -rwx------ 1 motoki staff 13K 3 13 23:08 sample.deps -rwx------ 1 motoki staff 4.5K 3 13 23:08 sample.dll -rwx------ 1 motoki staff 452B 3 13 23:08 sample.pdb
最後に
まだガンガンとは使ってみていませんし、VisualStudio CodeもWindowsではまだどうかな、というところですけど楽しいですね。 Monoの力を借りなくてもC#を書いていくことができるのは素晴らしいことだと思います。
今後も少しずつやっていこうと思います。
0 notes
Text
JadeでXAMLとMSBuild用のプロジェクトファイルをつくってビルドする
誰が得するのかわからないようなことですみません。
昨夜、ふと「そういえばJadeってあったよな…」と思い出してしまいまして、きっとXMLをつくることもできるだろうと思い立ってやってみました。 結論から言うと、できなくはありません。
Jade
node.jsのパッケージで、単独のコマンドラインツールでもあります。
Jade - Template Engine
テンプレートエンジンでして、ruby製のhamlなんかと同じ類でしょうか。 node.jsを勉強するときに合わせて少しかじっていました。 なんとなくdoctypeでXMLもいけたような気がしていたのでHTMLをつくるときのようにするといい感じになるんじゃないかと。 つまりはXAMLを簡単につくることができるかな?と思った次第です。 なにせ、タグをタイプするのがダルいですし、Visual Studioを起動しなくても書くことができるのでいいですよね(注意:インテリセンスが効いたほうが絶対いいです!)
JadeでXMLをつくるには
Jadeではdoctypeの指定に「xml」とすればいいです。 それだけで、あの長いドキュメントタイプの指定にしてくれます。
doctype xml
あとは何事もなかったかのようにタグを改行しながらタイプしていきます。 XAMLを考えていますので、画面になるもののルート要素はWindowです。 また、XAMLでは名前空間に指定のものがありますのでそれをタグの属性として指定していきます。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation")
タイトルや画面のサイズ指定もするなら、同じようにカンマで区切って入れていきます。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation",Title="My First Jade XAML",Width="800",Height="600")
最後にHello World的なことをしたいのでテキストブロックを入れます。 最終的には以下のようになりました。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation",Title="My First Jade XAML",Width="800",Height="600") TextBlock(name="txt") Hello
シンプル…
これを文字コードUTF-8で「main.jade」という名前のファイルに保存します。
JadeでXMLに変換したいのでまずはインストールしておきます。 node.jsはインストール済みとして、次のようにしましょう。
npm install -g jade
もうこれで「jade」コマンドが使えるはずです。 PowerShellならGet-Commandコマンドレットで確認できると思います。
Get-Command jade
ではjadeコマンドを使いましょう。 ここで、ひとつ注意が必要です。 次のようにそのまま実行してしまうと…
jade main.jade
「rendered main.html」と表示されると思います。 そうです、デフォルトではHTMLを作成するようになっているからです。
では名前を付ければいいのでは?と思うのですが「-n」あるいは「--name」は関係がありません。さらに、クライアントサイドだからとして「-c」や「--client」もつけてはだめです。なんとJavaScriptに変換されてしまいます!
XMLを出力するJavaScriptになるのでXAMLではなくなりますのでだめですね。
どうするかというと拡張子を「-E」オプションを付けるだけでした。
jade main.jade -E xaml
これで「main.xaml」ができあがります。
MSBuildでビルドできるようにする
次はビルドできるようにします。 同じ要領でjadeを書いていきます。
今回はアプリケーション定義のXAMLを用意してXAMLだけでGUIをつくります。 まずアプリケーション定義の「app.jade」です。 同じように「-E」オプションで「xaml」と指定して「app.xaml」をつくります。
doctype xml Application(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation", StartupUri="main.xaml")
Application要素しかいらないので簡単ですね。
次にプロジェクトファイルをつくります。 こちらは適当に「jadexaml.jade」と名前を付けますが「-E」オプションには「proj」を指定します。
doctype xml Project(xmlns="http://schemas.microsoft.com/developer/msbuild/2003", DefaultTargets="Build") PropertyGroup AssemblyName jadexaml OutputType winexe OutputPath .\ ItemGroup ApplicationDefinition(Include="app.xaml") Page(Include="main.xaml") Reference(Include="System") Reference(Include="WindowsBase") Reference(Include="PresentationCore") Reference(Include="PresentationFramework") Import(Project="$(MSBuildBinPath)\\Microsoft.CSharp.targets")
これでプロジェクトファイルにします。
jade jadexaml.jade -E proj
うまくいっていれば「jadexaml.proj」も完成しているはずです。 それでは「MSBuild」といきましょう。
もしもパスが通っていない(コマンドが見つからない)場合は環境変数PATHにいれましょう。 PowerShellであれば以下のように。
[System.Environment]::SetEnvironmentVariables("PATH","$env:PATH;MSBuildがあるパス")
パスが通ったか確認するならGet-Commandで見てみましょう。
ビルドもうまくいったら同じフォルダに「jadexaml.exe」が爆誕しているはずです。
めでたし、めでたし。 本当に誰が得するんだろう。
1 note
·
View note
Text
Javaに含まれてるnashornを使ってみた
まだイマイチ、メリットが思いつかないのですがJava8から入ってるnashhornを使ってみることにしました。
Groovyやratpack入門が進まないなか、こんなものもあったなーと思い出したのでした。
nashorn
Java8まではrhinoというものが入っていたみたいな��ですが、これらはいずれもJavaScriptエンジンです。
JavaにJavaScriptエンジン?という知らない方にはさらなる混乱をもたらすような話です。 どうもコマンドなどはJava6くらいからあったようですね。 知らなかった…
Java SE 8の新JavaScriptエンジン「Nashorn」が実現する次世代の “JavaScript in Java”環境【Java EEエキスパート・シリーズ】 https://blogs.oracle.com/wlc/entry/javaee_c117
この記事を読む限りはJavaのなかからつかうのが前提なのかな?と思ったのですが、実際には「jjs」というコマンドから直接利用することもできます。
jjs
タイポみたいなコマンド名ですが、これを実行すると対話型のインタプリタが起動してきます。
バージョンは「-v」とか「-fv」をつけると表示されます。
$ jjs -v nashorn 1.8.0_25
そしてバージョンを表示しても対話型に突入するので「あれ?どうやって終わらせるの??」となります。 「exit();」か「quit();」で終了します。
node.jsのつもりで「console.log」とかやってもダメです。
jjs> console.log("hello"); <shell>:1 ReferenceError: "console" is not defined
標準出力するのは「print」です。
jjs> print(“hello”); hello
この辺りはだれか統一しようとか思わないんでしょうかね… 「echo」「print」「println」「console.log」「Console.WriteLine」…
メリット
考えてみたのですが、よくわかりません。 でも便利といえば便利です。
jsひとつで動作する
適当なjsファイルを書いて実行すると、スクリプトとして動作します。 しかも、そのjsは本当にjsです。 requireなんかも利用できるようです。
クラスを作らなくてよい
jsなので、もちろんのことクラスも必要ありませんしエントリポイントも不要です。 上から下へ。
そのくせJavaのAPIは利用できる
Javaを利用したことがあれば、そうしたAPIを利用することは苦労しないでしょう。
以下のコードはテキストファイルの読み書きをします。
var sample = { readText: function(url) { with (new JavaImporter(java.io)) { var is = new FileReader(url); try { var r = new BufferedReader(is); var buf = '', line = null; while ((line = r.readLine()) != null) { buf += line; } }finally{ r.close(); } return buf; } }, writeText: function(url) { with (new JavaImporter(java.io)) { var out = new FileWriter(url); try { out.write("こんにちは、なっしゅほーん\n"); } finally { out.close(); } }; } }; print(sample.readText("sample.txt")); sample.writeText("test.txt");
「JavaImporter」というのをつかうとJavaのAPIをインポートできるようですし、withを使ってそのブロック中だけ利用なんてこともできるみたいですね。
いろんなところで動作するJavaScript
もういまやブラウザ内だけではなく、node.jsのようにサーバーサイドでも動作しますし、それを応用したElectronではデスクトップアプリにもなります。 そしてJavaでも動作するのであれば、JavaScriptを勉強しない理由はないでしょう。
でも… どれも少しずつ使い方が異なります。 目的が違うから、ですよね。 node.jsは全てが非同期ですが、nashornはJavaですし同期的です。 非同期に動作する必要のないちょっとしたバッチなどであれば、JavaScriptが書けたらnashornの方が便利だったりするかもしれません。
そういった用途であれば、Windowsに限定するとJScriptというものもあります。 ただ、こちらも「それを使って誰が得なのか」わからないというのはあります。
Javaは入ってるけどnode.jsは導入できない、というような状況であれば選択肢として考えてみてもよいかもしれません。 あとは…JavaFXに利用してみるとか?
7 notes
·
View notes
Text
マークダウンだけでreveal.jsのプレゼンをつくることができるreveal-ck
実は本来の目的はreveal.jsをElectronに埋め込んだものをつくってみようかなと思って調べていたのですが、もっと面白そうなものを見つけたのでそちらを使ってみました。
ちなみにreveal.jsはマークダウンをhtml内に記述すると、かっこよさげなスライドをつくることができるというものです。
しかし、htmlの中にマークダウンを書かないといけなくなるので「ちょっとなー」と思って無意識に避けていました。 ところが、別個のマークダウンファイルを作ればreveal.jsの一式にしてくれるものがあるのです。
reveal.js + markdownでスライドを作る時は reveal-ck が便利だった http://sue445.hatenablog.com/entry/2015/10/03/201241
これはgemですので、rubyがあればなんとかなります。
環境をつくる
今回はMacに導入しました。rubyはrbenvで入れた2.2.3です。
こいつもnokogiriを利用するので、普通にgem installするとビルドで失敗します。 毎回同じところで引っかかってしまうのって…
Homebrewなんかでlibxml2を入れておいて、あとは「--use-system-libraries」をつけてインストールすればいいのです。
ところがエラー
インストールできたら、スライドをマークダウンで書きます。 横方向のナビゲーションにするなら「---」を、縦方向のナビゲーションにするなら「***」を入れます。
どうもデフォルトでは実行したフォルダ内にある「slides.md」から「slides」フォルダ内へ一式を吐き出すようです。
しかし…
$ reveal-ck generate Generating slides for 'slides.md'.. error: undefined method `auto_link' for Rinku:Module
あれ!?なんかエラーが… 調べてもイマイチよくわからなかったのですが、イシューとしてあがってました。
error: undefined method `auto_link' for Rinku:Module when running reveal-ck generate #61 https://github.com/jedcn/reveal-ck/issues/61
クローズしてないみたいですが、bundle exec使ったらよいということで半信半疑、budleを利用することにしました。
とはいっても、またもやnokogiriがビルドに失敗するのでちょっとだけ設定をします。
「Gemfile」にreveal-ckを書いておきます。
bundle init
中身はこのくらいで十分です。
source "https://rubygems.org" gem "reveal-ck”
そしたらnokogiri向けの設定をしてインストールします。
bundle config build.nokogiri —use-system-libraries bundle install
うまくいったら、bundle経由で実行します。
bundle exec reveal-ck generate
これでslidesフォルダへ一式が出力されています。
また、冒頭でご紹介しましたブログにありますが「config.yml」というYAMLでタイトルや著者、reveal.jsのテーマを指定することもできます。
title: “テストスライド” author: “m0t0k1x2” theme: solarized
利用できるテーマは以下へあります。
THEME http://lab.hakim.se/reveal-js/#/themes
面倒な方のために書いておくと、次のとおりです。
テーマ 見た目 black(defalt) white league sky beige simple serif blood night moon solarized
そのほか
このツール、便利でして「reveal-ck serve」とするとビルトインサーバが「localhost:10000」で起動してくるのでブラウザで確認することができます。 また、マークダウンを変更すると検知してスライドをリビルド、リロードされます。
便利ですね。
補足
bundle exec使えばエラーなく利用できますが、以下のスクリプトを書いておいてrubyで実行してもうまくいきました。
別にブラウザでファイルを直接開いて確認するからどっちでもいいよ、という方はこれでもいいかもしれません。
インストールはgem installしましょう。
gem install reveal-ck -- --use-system-libraries
そしたらあとはスクリプトを以下のように書いて作っておきます。
require ‘rinku' require 'reveal-ck’ RevealCK::Commands::Generate.new(user_dir: Dir.pwd, gem_dir: RevealCK.path, output_dir: 'slides', slides_file:'slides.md').run puts 'complete.'
これを実行すれば同じようにスライドができます。
どうもrequire ‘rinku’がないとこのスクリプトも失敗しますね。 なんなんでしょう。
0 notes
Text
Ratpack入門のためのGroovy再入門 - 2回目 ファイル入出力
今回はGroovyでのファイル入出力についてです。
Groovyでは便利機能でJavaのクラスを拡張しているようです。 そこも踏まえつつ勉強していきます。
ファイルを読む
まずはテキストファイルを一行ずつ読み込むサンプルです。 Javaのjava.io.Fileクラスには備���っていない「eachLine」メソッドが追加されています。
new File(".", "first.go").eachLine { l -> println l }
これだけでテキストファイルの内容を読み込んで標準出力することができます。 また、groovyshからも実行することができます。
読み込んだファイルがGolangのHello worldなのは気にしないでください…
面白いことに、何行目なのかも取得することができるようです。 自分でカウントしなくていいのですが、何に使ったらいんだろ。
new File(".", "first.go").eachLine { l,n -> println “#{n}: #{l}" }
やってみるとこんな感じです。
便利といえば便利か。
また、readerを利用すると途中でエラーが発生しても自動的にストリームを閉じてくれるようにできます。 .Netでいうusingですかね。pythonやrubyにもありますよね。
new File(".", "first.go”).withReader { r -> r.eachLine { l,n -> println “#{n}: #{l}" } }
もちろん、文字コードを指定することもできます。 reader付きのほうが便利かな?
new File(".", “first.go.sjis”).withReader(“Windows-31J") { r -> r.eachLine { l,n -> println "#{n}: #{l}" } }
そのほか、読み込んだ各行をリストにすることもできます。 これはPowerShellっぽいですね。
list = new File(".", "first.go").collect {it}
配列にするときは「as」演算子を使うとよいみたいです。
arr = new File(".", "first.go”) as String[]
このほか、InputStreamを利用してファイル操作することもできるようです。
is = new File(“.”, “first.go”).newInputStream()
でもこの場合は明示的に閉じないとストリームが開いたままなので、withInputStreamを使って自動的に閉じてもらったほうが安全でしょう。
new File(“.”, “first.go”).newInputStream() { is -> // なにかする }
ファイルを書き込む
読み込みが上記のとおりなら、書き込みもだいたい同じです。 writerを使えば文字コードも指定して書き込みできます。
new File(".", "second.go").withWriter { w -> w.write("にほんご") }
ほかに面白いところとしては、リダイレクト的な形で書き込みできるところでしょうか。
new File(“.", “second.go") << "あいうえお"
これ、追記するようになります。 複数行文字列(シングルクォーテーション3つで囲む)も書き込むことができるので、便利かもしれません。
new File(".", "second.go") << ‘''abc def hij’''
書き込みでもOutputStreamを使うことができます。
os = new File(“.”, “second.go”).newOutputStream()
こちらもwithOutputStreamを使ったほうが自動的にストリームが閉じられるので安心ですね。
new File(“.”, “second.go”).withOutputStream { os -> // なにかする }
ファイルツリーを操作する
lsコマンドやdirコマンドに相当する機能もあるようです。 便利ですね。
以下はファイルを列挙するものです。
dir = new File(“.”) dir.eachFile { f -> println f.name }
変数を使わずとも、次でも同じ結果が得られます。
new File(“.”).eachFile { f -> println f.name }
短い。
また、パターンを利用したファイル名のマッチを使うこともできます。
new File(“.").eachMatchFile(~/^f.*¥.go/) { f -> println f.name }
これで拡張子がgoのファイルがヒットします。
再帰的に、フォルダ内のフォルダの中までファイルを列挙するにはeachFileRecurseを使います。
new File(“.”).eachFileRecurse { f -> println f.name }
これだとフォルダについてもヒットしてきます。そこで、種類を指定して列挙します。
import groovy.io.FileType new File(“.”).eachFileRecurse(FileTypes.FILES) { f -> println f.name }
このほか、traverseというメソッドも追加されており、条件によって走査を中断するなどの処理ができるようです。
import groovy.io.FileVisitResult new File(“.”).traverse { f -> if(f.directory && f.name == “pages”){ FileVisitResult.TERMINATE } else { println f.name FileVisitResult.CONTINUE } }
さきほどのファイル名マッチなどと組み合わせることができれば、さらに複雑な走査もできそうです。
0 notes
Text
Ratpack入門のためのGroovy再入門 - 1回目
今回から、Ratpackに入門するためにGroovyに再入門しておこうと思います。
お決まり:インストールする
Groovyのインストールはzip展開してパスを通せばオーケーです。 これはWindowsでもMacでも同じです。 というより、Windowsではposh-gvmを、それ以外ではsdkmanを使ったほうがいいでしょうけどね。
MacやLinuxの場合
まずは必要なものをダウンロードします。
curl -s get.sdkman.io | bash
こうして、次にこうします。
source "$HOME/.sdkman/bin/sdkman-init.sh”
そしたら最新のGroovyをインストールできます。
sdk install groovy
Windows PowerShellの場合
もしもWindowsで、PowerShellでやりてーという方はposh-gvmです。 あ、PowerShellはバージョン3以上でないとダメです。
(new-object Net.WebClient).DownloadString('https://raw.githubusercontent.com/flofreud/posh-gvm/master/GetPoshGvm.ps1') | iex
これで必要なものがダウンロードされてきます。 さらにPowerShellモジュールとして動作するのでインポートしてやります。 できれば「profile.ps1」に追記しとくと便利でしょう。
Import-Module posh-gvm
あとはPowerShellコンソールからGroovyをインストールすることができます。
gvm install groovy
ほかの方法
なお、MacではMacPortsやHomeBrewでインストールすることもできます。 Windowsではインストーラもあるようですね。
zip展開した場合はGROOVY_HOMEという環境変数に展開したフォルダパスを指定します。 あとは環境変数PATHにGROOVY_HOME/binを入れておけばいいでしょう。
インストールしたあと
インストールできたら、対話型シェルなら「groovysh」を、GUIありのPowerShell ISE(とまではいきませんが…)みたいな環境が欲しければ「groovyconsole」とすれば起動してきます。
スクリプトを実行するのであれば、「groovy」コマンドで大丈夫ですね。
なお、現時点(2016年1月)では2.3が最新のようです。
Javaとの違い
GroovyはJavaを包むラッパーのような存在です。
だから、はじめて「Javaの構文がそのままGroovyとして通用する」ということを知った時に「ちょっと何言ってるかわからない」と思ったものです。
PowerShellでもそれはさすがにない…
主な違いは以下のとおりです。
標準でいろいろインポートされている(Javaは自分でインポートする)
どのメソッドが呼び出されるかは実行時に決まる(Javaはコンパイル時に決まる)
配列の初期化に波括弧でリテラルを使うことができない(クロージャになるので…)
フィールド修飾子を省略すると同一パッケージ内でもprivateになる(@PackageScopeを使う)
Java7からの自動リソース管理(.Netのusingみたいなものかな)を��ポートしてないけどクロージャで同じことができる
staticでない内部クラスのインスタンス化の書き方がJavaと同じにできない
Java8からサポートされたラムダをサポートしてない、クロージャでやる
独自拡張なGStringという型がある
シングルクォートな文字列はStringだけど、ダブルクォートな文字列は変数展開があるかどうかでStringかGStringになる
プリミティブ型は自動的にラッピングされてしまう
==がcompareToもしくはequalsに変換されるのでJavaと同じ意味にならないときがある
型の変換のされ方がJavaと異なる(バリエーションが多いからかな)
予約語がJavaより少し多い(as, def, in, trait)
switch/case文でdefaultを最後に書かないといけない
思ったほど違いがないのかもしれませんが、便利なように拡張されていたりあらかじめ読み込まれているので、多少Javaとの差異がありますという良い方の解釈をすればいいのかな…
おかげでハマったことがなくはないのですが、静的なものを動的にするための代償でしょうか。
0 notes
Text
Mac OSXでASP.NET 5をはじめたら、いきなり名称変更で1.0になるらしい
Ratpackの入門をやるんじゃなかったのか?と思ったりするが、今回は違います。
Mac OSXでもMono入ってればASP.NETできるよなーと思ってせっかくだからやってみようと。
まさか
すると、突然にTwitterのタイムラインに「ASP.NET 5 is dead」とか流れてきました。 ええ!?何も始めようとした出鼻をくじかなくても…
ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0 http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx
4.6の置き換えじゃなくて、作り直したから5じゃなくて1.0の方がいいよね?という解釈であってるのかな。
ということで、気にせずドキュメントを見ながら始めることにしました。
はじめるにあたって
こういうサイトがありまして。
get.asp.net https://get.asp.net/
いきなりMac用のインストーラをダウンロードしてきてもいいのですが、もっといい感じのやり方もありそうなので「Install Instructions」をクリックしてみてみました。
そうすると、「Getting Started」というページにあるではありませんか。 「Installing ASP.NET 5 On Mac OS X」というのが。
さらに進むと、「Install ASP.NET 5 from the command-line」というのが���りました。 やった。
まぁでもですね。Visual Studio Codeは入れておいたほうがいいような気がします。 さっき少し使ってみたら、ものすごく便利になってますね。 最初のリリースのときより格段に良さそうです。
Visual Studio Code https://www.visualstudio.com/ja-jp/products/code-vs.aspx
さて、ではインストールしていくことになるのですが、とりあえず必要なのは2つだけです。 DNXというものとDNVMというものです。
DNXは「.Net Execution Environment」というもので、Monoか.Net Coreのどちらかを使えるようです。 わたしはとりあえず両方入れてみることにしましたが、後に入れたほうがデフォルト扱いになったようです。 後からデフォルトにするものは変更できるようなので、気にせず行きます。
もうひとつのDNVMは「.Net Version Manager」ということで、どっかで聞いたようなものですね。 こいつでMonoかCoreか、あるいはバージョンも切り替えることができるようです。
インストール
まずDNVMですが、最近の流行りなんでしょうか。 シェルをcurlで落としてきたものを実行します。
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
非常にお手軽です。一瞬で終わります。
その後、このdnvmコマンドを利用してDNXをインストールします。
.Net Coreを利用するなら次のコマンドになります。 upgradeとついてるので、「ん?」と思いましたが普通にインストールできます。 upgradeコマンドは最新(latest)をインストールするようになるようですね。
dnvm upgrade -r coreclr
「-r」オプションはランタイムの種類です。
Monoを利用するときは以下のコマンドで最新が入ります。
dnvm upgrade -r mono
なお、Mono単体はHomeBrewからインストールすると便利です。 あくまでもここでインストールされるDNXはMono用のランタイムということのようです。
さらにインストールは続きます。 今度はNode.jsとそのパッケージ群をインストールしていきます。 わたしはnvmで導入済みだったので、パッケージだけ最新にしました。
わたしの環境は電子書籍を書き始めのときに導入してたのでちょっと古めのv0.12.4です。 これでも動作には問題なさそうですが、最新はv5.4.1のようです。
あとはパッケージですね。 Yeoman、Bower、そしてGruntかGulpです。 どれも導入済みでしたが、 この際にアップグレードしました。
npm install -g yo bower gulp
わたしはタスクランナーにGulpを使っているのでGruntは入れませんでした。 どうも標準ではタスクランナーにはGulpが利用されるようでした。
さらに。 Scaffolding、つまりは足場を組むような感じで雛形なんかを用意してくれるパッケージもあるのでインストールしておきます。
npm install -g generator-aspnet
これで準備は整いました。
はじめての「MacでASP.NET」
どうも近頃Windowsしてたので、なんか新鮮でした。 ここまでくると、コマンドラインから(!)ASP.NETアプリを準備していくことができます。
ではディレクトリを作りまして、そこへ移動します。 そしてプロジェクトを作るのですが、Railsなんかと同じようにプロジェクト名を指定すると同じ名前のフォルダが作成されます。
でももう少しスマートな雰囲気。
yo aspnet
どんな種類のアプリケーションをつくるかを選択することができます。
ここでは「Empty Application」を選択しているのでした。
なお、「ASP.NET」と聞くとウェブアプリのイメージがしていたのですが、選択肢の通りコンソールアプリもつくることができます。
あとはアプリ名を入力してやるとフォルダと関連のファイルが出力されるという感じです。 で、このあとどうしたらいいのかなーと思ったら画面にコマンドがそのまま表示されています。
まずはプロジェクトのフォルダへ移動します。
cd HelloWorld
そしたらおもむろにコマンドを実行します。
dnu restore
このコマンド、どうやら依存性を解決して必要なパッケージをダウンロードしてくるようです。 大量に落としてくるので、わたしの環境では10分近くかかりました… 気長に待ちましょう。 でも、これははじめてのときだけのようですね。
2つ目以降は一瞬でした。ほぼ全てローカルに揃ってるからでしょう。
あとはいきなりですけどビルドしてやります。
dnu build
まだ何も書いてませんけどね。 そして開発用の組み込みサーバーを起動してブラウザで確認することができます。
dnx web
もうこれでlocalhost:5000でリッスンしてるので、ブラウザで見てみてください。 「Hello World」が表示されていると思います。
最後に
MacでC#でASP.NETということで、先人の偉大なる功績を利用させてもらって楽しく書いていくことができそうです。 Linuxでもディストリビューションでの違いは多少あるものの、ほぼMacと同じ方法でセットアップしていくことができるようです。
C#熱が高まりそうなので、この際にC#も再入門したほうがいいかな?
2 notes
·
View notes