PowerShellでパイプでエクスプローラを開く

PowerShellでexplorerを開く方法はいくつか存在します。

  1. Start-Process . (エイリアス start .)
  2. Invoke-Item . (エイリアス ii .)
  3. Invoke-Item explorer .
  4. explorer .

1,2はディレクトリを指定するとそれに関連付けられたエクスプローラが開くという動作です。3,4はexplorer.exeの引数に.を指定しています。まぁ、他にもSystem.Diagnostics.Processを使うとか、COMやWin32経由とか色々ありますが、多くの場合不要なのでおいておきます。

続きを読む...

OthloHackに参加しました! #Othlotech #othlohack

OthloHack2017に参加してきました。

OthloHack2017|学生限定ハッカソン

OthloHackは昨年も参加したのですが、自分が納得いくものまで行き着かず、賞ももらえずということで汚名挽回(誤用ではない)に乗り込みました。(自分がセキュリティ方面の人なので、スキルセットがハッカソン向けじゃないというのが地味に辛い)

今年のテーマは「毎日をワクワクさせる」でした。

続きを読む...

セキュリティ・コアキャンプ2017に参加しました

だいぶ時間が経ってしまったんですが、コアキャンプの参加報告です。

今年度から、セキュリティ・コアキャンプ 2017という企画が始まりました。

そこで2017年から圧倒的な成長の機会として「セキュリティ・コアキャンプ」を開催することになりました。

とあるように、セキュリティキャンプ2017の同じ会場で圧倒的成長のためのプログラムを受けるというわけです。新規の参加者向けとは違い、手取り足取り教えるのではなく「 背中をみて学べ 」という方針のプログラム構成になっています。最初は予定が合わないかと思っていたんですが、最終的に大丈夫になって急いで申し込みを書いたのですが、無事通過しました。

続きを読む...

Chocolateyの自作パッケージ入門(1)

Chocolateyとは?

ChocolateyはWindowsのパッケージマネージャです。コマンドラインからWindowsにソフトウェアをインストールできます。MacのHomebrew、Linuxのaptやyumといえば技術者向けにはわかりやすいかもしれません。Windowsにパッケージマネージャはないと思い込んでいる人もいるようなのですが、Chocolateyはかなりまともに動きます。プログラミング用の環境とかもコマンド一発で整えられて超便利。

しかし、どうにもHomebrewやapt,yumなどと比べてパッケージが少ないです。やはり知名度と歴史の違いが大きいのでしょう。(機能面でもまだまだではありますが・・・)

ないのなら、作ってしまえ、パッケージ ということで、この記事ではChocolateyのパッケージを自作してみようの入門編です。

一応PowerShellの知識が必要ですが、そんなに難しいことをするわけではないので大丈夫だと思います。各ステップで適宜Githbuの作業履歴を張っておくので参考にしてください。

続きを読む...

SECCON beginners 2017 名古屋に行ってきた #ctf4b #seccon

SECCON Beginners に行ってきました。

SECCON 2017

気がついたら駅を行き過ぎてしまい引き返すというぽかをやらかしたものの、なんとか時間内にたどり着きました。なんかもっと人が少ないイメージでいたのですが、100人以上がぎっしりいてびっくり。nagoyasecのときもそうですが、セキュリティを学びたい人は多いのだなーと実感します。

会場も多くの方々が設営してくれてあり、頭が下がります。CTFがあると普通の勉強会と違いネットワークを構築する必要があったりするのでなかなか大変そうです・・・

続きを読む...

サイボウズ・ラボユース研究生に採択されました

第7期サイボウズ・ラボユース研究生(支援金なしの方)に採択されました。サイボウズ・ラボユースはサイボウズ・ラボさんの行っている学生向けの支援プロジェクトです。技術的な支援を受けながら開発できる、という非常にありがたい環境です。私は名古屋住なので基本的にオフィスに向かうことはできず、オンラインでという形になります。

サイボウズ・ラボ:サイボウズ・ラボユース:募集要項

#作るもの

C++でLLVMのインタプリタ/コンパイラを作成したい!というのが今回の目標です。LLVMむっちゃ楽しそう!と前から思ってたので、この機会に頑張りたいと思います!!

ただ、面接の際にもつっこまれたのですが、若干自分の頭の中でやりたいこと・やるべきことの考えが空転している部分があるので、学習を進めつついろいろ詰めていきたいと考えてます。
多分、自分の頭の中の作りたいものがなかなか高度なもので、現状では圧倒的に知識と実力不足。(いつかめっちゃ高機能なバイナリエディタとか、IDA Pro並みのデバッガとか作りたいじゃないですか。)よって、そこに向けて実現可能なものから着実に知識と実力をつけたい!というのが自分の発想の一つなのかなーと思っています。

とりあえず、現状でC++もLLVMも初心者なのでどうにか時間を捻出していきたいと思います。テストとかもあるのですが、来月中にはEffective C++は読破+LLVMの公式リファレンスを読み始めるとかはしたいです。

続きを読む...

Xamarin.FormsでHtmlAgilityPackでXPathを使う

以前Xamarin.FormsとHtmlAgilityPackでスクレイピング!でHtmlAgilityPackをXamarinで使うとXPathが使えないよという話を書きました。Xamarin勉強会でLT用に調べ直したところ、無事XPathが使えたのでスライドを再編集して記事にしておきます。

LT当時と比べて更に状況が変化したので内容が少し変わってます。環境はVisual Studio 2017で確認しています。

やりたいこと

スクレイピングなどの際にHtmlを解析したいことがあります。HtmlAgilityPackはそんなときに使える.NET用のライブラリです。
他にもいくつか解析ライブラリはあるのですが、最も活発にメンテナンスされている、著名なものだとHtmlAgilityPackになるようです。

HTMLを解析する時、一般的なライブラリではCSSと同じ方法で指定できるCSS Selectorを利用します。しかし、HAPでは現在未対応です。
代わりにLINQやXPathを利用できます。それぞれ用途が違い、

  • LINQ(リスト向けの汎用)
  • XPath(XMLやそれに近いツリー構造用)
  • CSS Selector(HTML特化)

の順にHTMLに特化していき、短く、わかりやすく書くことができます。

続きを読む...

久しぶりにWindowsの環境構築をした

WindowsのノートPCがやっと修理(交換)から帰ってきたので、あらためてWindowsの環境を構築しました。 用途は主にプログラミングと大学の電子ノートです。今回はそのメモ。

環境

  • Surface Pro 3(RAM8GB/SSD256GB/Corei5)
  • 最新のWindowsまで更新(Windows 10 Creators Update)

昔と比べて、環境を取り戻すのが非常に楽になっています。

続きを読む...

PowerShellの関数をコピーしたりラップしたりする

PowerShellで関数の呼び出しの前後に処理を追加したいとき(ラップすると表現するんですかね?)にハマったのでメモ。

こんなことがしたい。

function hoge{
    ls
}

function hoge{
    echo "lsを呼びます"
    hoge #古いhogeを呼びたい・・・
}

これは当然のことながらhogeを永遠に再起して無限ループになります。

うまくいかない例

C#などでは関数の参照(デリゲート)を変数に入れておいたりすれば後からそれを呼び出せます。PowerShellではうまく行きません。

function hoge{
    ls
}
$a = hoge
# この$aは「hogeの呼び出し結果」が格納されているだけ!
$b = { hoge }
&$b #=> (lsの結果)
# スクリプトブロックを使っていて呼び出すことができる。
function hoge{
    echo "piyo"
}
&$b #=> piyo
# 置き換え後の結果が表示されてしまう・・・

と、上のような方法ではうまくできません。PowerShellはダイナミックスコープのため、実行されたときのhogeの関数を呼び出してしまうためです。

ではどうするか

関数の中身を変数としてアクセスする方法があるので、それを利用するだけです。

$c = $function:prompt
&$c

PowerShellではFunctionをファイルシステムのように扱える「プロバイダ」が用意しているため、上のように$function:promptとすると変数のようにアクセスできます。 なんなら、$function:hoge = "echo test;"+$function:hogeのように文字列として強引に処理をねじ込むことも可能です。

ちなみに、一部の記号などを含む名前の場合、波括弧でくくる必要があります。

# 「-」が区切りと判断され、New関数の中身を見てしまう
function New(){ echo "new function!" }
echo $function:New-Guid #=> echo "new function!"-Guid

# {}でくくる
echo ${function:New-Guid} #=> New-Guid関数の中身

プロバイダについてはここらへんに詳しく書いてあります。 プロバイダとドライブ - Windows PowerShell | ++C++; // 未確認飛行 C

結構検索しても見つからなくて大変でしたが、PowerShellは十分高機能なので大抵のことはできるようになっているので、頑張って探せばきっと答えはある・・・

続きを読む...

セキュキャンのアドバイス&昨年度の応募用紙晒すか・・・

2017年度のセキュリティキャンプ全国大会の募集が開始されてます。
セキュリティ・キャンプ全国大会2017 ホーム:IPA 独立行政法人 情報処理推進機構
セキュリティとかわかる人も、わからない人も良い機会になるはずです。
(自分の無力さを知ることも大切です!)

大学生が多いですが、高校生とか高専生もためらう必要はないと思います。

受験者へ

セキュリティキャンプの応募で求められるのは正解ではなく熱意だそうです。
多少間違っていたり冗長であっても全部書ききった方が良いのではないでしょうか。
具体的な基準はわかりませんが、正解だけ書いてあるとか、文章があまりにも短いのはよろしくないみたいです。

例えば、この年の選択問題【8】なんかは「このプログラムはc@Np2Ol6と入力した時に終了コード0、それ以外で終了コード1で終了するプログラムである。」という1行で終わるところを私は延々と求めるまでの手順を書いています。その手順もあまりに稚拙で恥ずかしかったのですが、熱意を見せるならいっそ書くか、と思って書いて出しました。

あと、基本的にわからないことだらけだったので、めっちゃググりました。はい。
こんなの調べずに全部わかるような輩はそうそういないと思います。

黒歴史を晒す

問題はこちら→https://www.ipa.go.jp/files/000053055.pdf

かなり稚拙で恥ずかしいです。あと、一部はXXXと伏字にさせてくださいorz

あと、ごちうさの問題はシャロちゃん派だったので解きませんでした。

続きを読む...

Micrsoft CompleteでSurface Pro 3のACアダプタ&ペンを交換してもらった

Surface Pro 3の保証でACアダプタを入手

Surface Pro 3をもう二年ぐらい使っているのですが、最近急にACアダプタの調子が悪くなってきました。ケーブルを指してもランプがピカピカして充電できない。どうやらこのあたりが逝ってしまったようです。2年持てばこの手の製品では十分役目を果たしたでしょうが、純正品は高い。(売ってる所見つからなかったけど、過去の販売や海外MS Storeを見ると$80前後)。
こういう時にTypeCが羨ましい。Surface Pro 5がTypeCになったらちょっと惹かれるかも・・・

続きを読む...

.NET Frameworkのライブラリのpublicな名前を探求する

この記事は完全に投稿を忘れていたC# Advent Calendar 2016 - Qiitaの14日目です。

目的

問1「.NET Frameworkの標準ライブラリで一番長いクラス名やメソッド名は?」
問2「publicな”HWND”を含む名前を持つ名前はどう表記するのが適切?」

問1についてはAPI名最長選手権 - Qiitaという記事が2013年にあります。その後の更新などでもっと長い名前がないか確認してみたいものです。

問2については、もう少し実用的。Win32にはウィンドウハンドルを表すHWND型が頻繁に登場します。.NETで扱うときはWindowHandleやHandleといった名前が適切ですが、相互運用の関係上、HWNDをそのまま使いたい状況もしばしばあります。 その時の名前は、一単語とみなしてHwndとするか、Wnd(Windowの略)を意識してHWndの方が正しい気もします。こういうときは、標準ライブラリの命名に従って置くのが間違いありません。

ということで、標準ライブラリのpublicな名前を列挙するソフトを作成してみます。

続きを読む...

Swiperの紹介と、ループのバグらしき挙動に対処する

この記事はOthloTech Advent Calendar 2016 - Qiitaの9日目です。

こんにちは、MIPSのクロスコンパイルができないで影白です。

現在、ChromeのタブをMacのアプリ気切り替えやWindowsのAlt+Tab切り替えと同じようなデザインで切り替える拡張機能を作成しています。 YahooさんのReactJSハンズオンに参加できなかったのでReactJSを自力でやるか!と思い立ったやつです。 現在はまだChromeストアなどには上がってません。動くものがGitHubにありますので、興味があれば見てみてください。(現在は起動条件があまりにマニアックなので、おそらく誰もわかりません。使いたい人がいたらご連絡を・・・)

AruTab

デザインなどについては絶賛調整中ですが、フラットな感じに仕上がる予定。

ReactJSは完全にJavaScriptからソースを生成することになるので、データを元にHTMLをガリガリ書き出したい場合なんかは結構便利。ChromeExtensionでも十分活用可能です。ただし、ChromeExtensionの場合は事前コンパイルしたほうが良さげ。
ただし、万能とはいかずHTMLベースの場合は逆に面倒になりますし、ChromeExtensionのContentScript(Webページ上で実行するスクリプト)はHTMLは元ページのままなので、jQueryの力技でねじ伏せるのが一番楽だなと思いました。

さて、本当は拡張をストアに上げてChromeExtensionについて語ろうかと思ったのですが、色々と間に合わなかったのでそれは諦めました。 というか、ソースがあまりにも汚いので作り直しになります。

今回は、作成中に使ったSwiperというライブラリーの紹介と、バグ対策の記事です。

続きを読む...

Xamarin.FormsとHtmlAgilityPackでスクレイピング!

[初心者さん・学生さん大歓迎!] Xamarin その2 Advent Calendar 2016 - Qiitaの5日目です。

今回はXamarinを使ってスクレイピングに挑戦してみます。
C#ということで、Reference Sourceの検索部分を取得し、解析します。

プロジェクト作成

まず、Xamarin.Forms 入門ガイド - Xamarin : XLsoft エクセルソフトを参考にプロジェクトを作成します。若干分類が変わっていたりしますが、Blank App (Xamarin.Forms Portable)のプロジェクトを作ればOK。 今回は「RSTest」という名前にしたので適宜読み替えてください。
しばらく待つとWindowsのターゲット確認が出ますが、これもそのままでOKボタン。(ターゲット バージョンは最新に、最小バージョンは一番古いのを選択しておけば2016年12月現在、大丈夫です。)

このあと、HtmlAgilityPackを導入するのですが、念のために一度ビルド。それなりに時間がかかりますが、正常なことを確認。まぁ、Xamarinなので。
UWPなら[ビルド]→[構成マネージャ]のUWPの欄の「ビルド」と「配置」にチェックを付ける。
AndroidならAndroidSDKからAPI24以降を消し去るなど、謎の動作が必要ですが、まぁ、頑張ってググってください。

続きを読む...

とりあえず投稿

結局公開する公開する言って何もしてこなかったんですが、気がついたら12月。アドベントカレンダーを書かないといけなくなってきました・・・

しょうがないのでブログを公開です。デザインはデフォルトのままで全然いじってないので、そのうちちゃんとしたものを作ります。ええ、作りますとも・・・

続きを読む...