ニュース

シェル芸人のためのJupyter環境

kanataほぼ8年前に追加

Jupyter

シェル芸人のためのJupyter環境を構築しよう!!!11

スクリーンショット

screenshot1.png

Jupyterとは

スクリーンショットをご覧あれ。ブラウザでPython(Bashも)を実行出来る環境です。

  • Markdown形式のメモと一緒にWeb上で実行&保存できちゃうステキ機能
  • 書いた物は保存できて、いつでも再実行可。
  • スライドやhtmlにも変換できます。
  • GitHub Gistにエクスポートすれば、公開もできちゃう。

まさにPythonista(シェル芸人)のための環境ですねw

噂の買い切りVPSCloudAtCostに導入してみてもいいかもしれない。

Jupyter環境の構築

ググると幾つか出てきますが、minicondaを使用したインストール方法を以下にまとめます。

minicondaを利用する利点としては、こんな感じです。

  • 一般ユーザの環境に導入できる(システムに深く食い込まないので、アンインストールが簡単)
  • 既存のPython環境と別々に作ることができ、かつ、お互いに干渉しない環境が簡単に作れる
  • 容量がanacondaより小さく、必要最小限。

minicondaは、主にPythonの数値処理系のライブラリを加えたanacondaというものの最小のセットになります。

想定する環境

以下を想定しています

  • CentOS または RedHatLinux

実際にセットアップした環境は以下です。

CentOS Linux release 7.2.1511 (Core) 

minicondaのインストール

以下からセットアップ用のファイルをダウンロードします。
python3用のセットアップファイルをダウンロードしてください。

miniconda
http://conda.pydata.org/miniconda.html

$ wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

余談ですけど、このシェルスクリプト、バイナリファイルと悪魔合体する黒魔術を使っているので、catしてみたりすると大変な事になりますw

実行。
途中、対話形式で入力を求められますが、以下のよう入力してください。

$ bash Miniconda3-latest-Linux-x86_64.sh
[Enter]
yes
[Enter] # or 任意のインストール先を入力
no      # システムに標準で入っているPython環境と使い分けをしたいため。.bashrcに追加されてもいい人は yes にしておく。

インストール時にnoを選択して .bashrc に追加しなかったので、以下の通り、任意に環境変数をセットするシェルスクリプトを作成しておきます。
これによって、こんな環境の切り替えができます。

  • 通常は、システムに入っているPythonが使われる。
  • このシェルスクリプトを実行して環境変数を取り込んだときだけ、miniconda環境が使われる。

環境変数(PATH)設定用のシェルスクリプトを作る。

$ vi setenv.sh
#!/bin/bash

PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:$PATH
export PATH

ドット実行する。
環境変数PATHの先頭に[minicondaのインストールディレクトリ]/bin が含まれていることを確認する。

$ . setenv.sh
$ env |grep PATH
PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

Jupyterのインストール(minicondaインストール先にインストールされる)

$ conda install jupyter

Jupyter設定ファイルの生成。

$ jupyter notebook --generate-config

パスワードの作成(結果をメモしておく)

以下はパスワードを hoge にしているけど、適宜変更してね。

$ python
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec  7 2015, 11:16:01) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd
>>> passwd()
Enter password: hoge
Verify password: hoge
'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'
>>> quit()

Jupyter設定ファイルの編集

  1. ローカルホストからしか接続を認めない→どこからでもOKに修正
  2. Jupyterで書いたファイルの保存先を指定
  3. 認証パスワードを設定(上記Pythonのpasswd()の事項結果をコピペ)
  4. 接続先ポート番号を指定(デフォルトは8888)
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.ip = 'localhost'
+ c.NotebookApp.ip = '*'

- # c.NotebookApp.notebook_dir = u''
+ c.NotebookApp.notebook_dir = u'ファイルを保存する任意のディレクトリ'

- # c.NotebookApp.password = u''
+ c.NotebookApp.password = u'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8883

httpsて通信するための設定

  • Let's Encrypt サーバー証明書を取得しましょう。
  • 詳細は、ServersManの Let's Encrypt サーバー証明書の取得と自動更新設定 を参照のこと。
  • 証明書が準備できたら、Jupyter設定ファイルの編集します。
  1. サーバ証明書の所在を設定
  2. 秘密鍵の所在を設定
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.certfile = u''
+ c.NotebookApp.certfile = u'/etc/letsencrypt/live/<ドメイン名>/cert.pem'

- # c.NotebookApp.keyfile = u''
+ c.NotebookApp.keyfile = u'/etc/letsencrypt/live/<ドメイン名>/privkey.pem'

Jupyterに Bash のJupyterカーネルを導入する

Jupyterカーネルと呼ばれる以下を追加インストールすることで、
Bash版Jupyterになるのでありえん良さみが深い(Python3環境が前提、Python2だどダメ)。

A bash kernel for IPython
https://github.com/takluyver/bash_kernel

$ . setenv.sh
$ pip install bash_kernel
$ python -m bash_kernel.install

実は、他のいろんな言語も用意されているので、大半の言語はJupyter上で動かす事ができる。

参考:IPython kernels for other languages

Jupyterの起動

起動

$ jupyter-notebook

後はブラウザで、https://example.com:8883 にアクセスするべし。

minicondaでPython2環境も作って共存させる場合

同じ方法でpython2環境も起動できる。
ただし、python3とpython2のJupyter環境を同時に起動するには、
Jupyter設定ファイルのポート番号を別々にする必要がある

$ vi jupyter_notebook_config_for_python2.py

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8882 # python3の設定値とは別にする

起動は、作った設定ファイルを直接指定して起動できる。

$ jupyter-notebook --config=設定ファイルのパス

使い方

使い方はググると沢山出てくるので、そちらに譲ります。
(当ページ下部のMemoの所にもリンクを入れておきました)

シェル芸人のためのJupyterの使い方を説明します。

シェル芸人のためのJupyter使い方

まず、デフォルトのPythonカーネルでもシェル芸はできます。
行頭に%%bashと入力すればシェルを実行できます。

%%bash
date;echo hoge;date

screenshot2.png

ただ、カーネルを Bash に切り替えることで、この%%bashが不要になります。
あとは……わかるね?

date;echo hoge;date

screenshot3.png

Memo

Jupyter関連で役立ちそうなリンクのメモ。

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/02/20/183423

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/05/22/160209

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma


Qiita

Jupyter事始め - Qiita
http://qiita.com/taka4sato/items/2c3397ff34c440044978

extensionを追加してもっと快適なJupyter環境を構築する - Qiita
http://qiita.com/sasaki77/items/30a19d2be7d94116b237

Condaで作ってる仮想環境の切り替えをJupyter上で簡単に行う方法 - Qiita
http://qiita.com/yoppe/items/38005f415a5b8b884c7d

Jupyter Notebookでブログ書きたい - Qiita
http://qiita.com/patraqushe/items/49a990cbdfb51afed620

Jupyter notebook で HTML も自動作成 - Qiita
http://qiita.com/junkoda/items/011d44dcc1c8bd0a936a

Jupyterでコンテナーを入れ子の枠で表現(図式化)、とそれを作る過程で調べたこと - Qiita
http://qiita.com/argius/items/17710321c8225bfb7417

Jupyterで好きなHTMLを埋め込む - Qiita
http://qiita.com/xeno1991/items/65b7da476d6f89d06388

Qiitaの記事とJupyter notebokとの相互変換 - Qiita
http://qiita.com/Tsutomu-KKE@github/items/168400d2e3ea44a70022

iPython でスライド作り - Qiita
http://qiita.com/sosuke/items/e42b5b81878e361249b6

junpyter notebookをCUIで実行&保存 - Qiita
http://qiita.com/nzw0301/items/83814189bd93224b7c51

nbviewerでスライド表示もできるようになった!【Jupyter】 - Qiita
http://qiita.com/ssh0/items/de6cc6aacd004a2e57dd

データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め - Qiita
http://qiita.com/y__sama/items/17aedf0c05187edd61c3


nbviewer - A simple way to share Jupyter Notebooks
http://nbviewer.jupyter.org/

once upon a time, - JupyterからSpark clusterを操作できるlivy + sparkmagicを試してみた
http://chezou.hatenablog.com/entry/2016/07/12/115000

Jupyter Notebook の Tips をまとめてみた
https://adtech.cyberagent.io/techblog/archives/2317

技術書典に行ってキマシタワー

kanataほぼ8年前に追加

技術書典に行ってきました。

技術書典:技術書オンリーイベント

技術書の同人誌販売な感じのイベント。

小生、コミケとかそういうの行ったことがないのだけれど、初めてそれっぽいイベントに行ってきました。早めに行ったから早めに入れたんだけど、めっちゃ並んでた。

20160625_techbookfest1.jpg

初めて薄い本を買いました

めっちゃ人いる!これがコミケか…

以下を買いました。読むのが楽しみ。

O'Creilly - ソフトウェア技術書同人サークル supported by NCC

  • KIJAK'SAY(きじゃくせい)

セキュリティ関係の本(うっすら変態仮・・・げふんげふん)

20160625_techbookfest2.jpg

秋葉原は、ありえん肉みが深い。

久しぶりに秋葉原に来たら、肉度がかなり上がっている。

とんかつ - 商店 - ケバブ - 商店 - ラーメン - 商店

という感じである。異常事態である。何が起きたんだ。その中で会場にほど近い肉汁麺ススムに行ってきました。

味が濃いのだけれど癖になる。これでレベル2(レベル4まである)ありえん肉みが深い。完飲。

20160625_niku.jpg

「シチズンフォー スノーデンの暴露」を見てきました (1コメント)

kanataほぼ8年前に追加

シチズンフォー スノーデンの暴露というエドワード・スノーデンを題材にしたドキュメンタリーを見てきました!

映画「シチズンフォー スノーデンの暴露」

ここの記事を事前に読んでおくと更に楽しめます。

THE ZERO/ONE - 正義の告発者か買収されたスパイか スノーデンの素顔に迫るドキュメンタリー映画『シチズンフォー スノーデンの暴露』

正義の告発者か買収されたスパイか スノーデンの素顔に迫るドキュメンタリー映画『シチズンフォー スノーデンの暴露』
https://the01.jp/p0002479/

THE ZERO/ONE - ハッカーの系譜 エドワード・スノーデン

米国で繰り返される「諜報」と「内部告発」の歴史(1/6)
https://the01.jp/p0001924/

米諜報機関が生んだハッカーの葛藤(2/6)
https://the01.jp/p0001950/

闇に葬られないための入念な「告発準備」(3/6)
https://the01.jp/p0001968/

世界に衝撃を与えた米国の盗聴プログラム「プリズム」(4/6)
https://the01.jp/p0001998/

「世紀の告発者」への第一歩を踏み出す(5/6)
https://the01.jp/p0002027/

香港からの脱出、そしてロシアへ(6/6)
https://the01.jp/p0002038/

THE ZERO/ONE - ハッカーの系譜 ジュリアン・アサンジ

ウィキリークス「反骨」の原風景(1/6)
https://the01.jp/p0002395/

少年ハッカー「メンダックス」の冒険(2/6)
https://the01.jp/p0002414/

サイファーパンクスとの出会い(3/6)
https://the01.jp/p0002449/

少年ハッカーから国家と戦うハクティビストに(4/6)
https://the01.jp/p0002464/

※連載中(2016.6.18現在)

いちエンジニアとしての感想

当初より、エドワード・スノーデンさんのリークした情報の真偽が疑われたりしています。
また、現在に至るまで名だたるIT関連企業は、関与した事実を認めていません。

映画はドキュメンタリーでしたので、エドワード・スノーデンさん自身が、ものすごく、ものすご~く、情報の取り扱いに気を使っていたのを生で見ることが出来ました。(VOIP電話のコード抜いたり、スマホを冷蔵庫に入れたり、全てPGPで暗号化したり)

さてさて、信じられないような情報が数々がリークされた訳ですが、いちエンジニアとして、その真偽について感想を述べたいと思います。

まず、

  • 技術的に矛盾した話は無かった。
  • ちょっと、大げさに情報漏えいを恐れていたようにも感じたが、(VOIP電話のコード抜いたり、スマホを冷蔵庫に入れたり)、技術的には盗聴が可能という側面と、自分の命がかかってるので解る。
  • 逆にそこまで気にしないといけないNSA怖い。

国家規模の盗聴に関して言うと、

  • 実現するには、国家規模で、ものすごいリソースの用意が必要。(特にディスクとメモリが。どの位必要なのか想像もできない。)
  • さらに、IT関連の複数の大企業の協力が必要(顧客のプライバシーを守ると声高に宣言している企業の協力が)。
  • さらに、国家間で秘密裏に協定を結んだり、もしくは勝手に他国へもネットワークを広げることが必要。

という、普通なら実現不可能に思えました。
特に、「IT関連の複数の大企業の協力が必要」というあたりは、CEOだけが墓場まで持って行けばよいという訳でもなくて、そんな工事・作業するのにも複数人の関係者が必要になります。彼らの口を全て塞ぐのは難しいんじゃないんですかね。まさか
でも、でも、もしかしたら国が本気出せばできるのかもしれません。。

2016.6.21追記
と、思ったんだけど次のコンボで特に疑われずにNSAは動けるね。コメント欄に書いたTEDの動画見て思った。
米国には裁判所の命令があれば、合法的に盗聴できる。→それを理由に盗聴する仕組みを各IT企業に作る。→(本当は裁判所の命令がないと盗聴できないけど)後は、勝手に盗聴する。

盗聴されると、どうなるのかしら

そんな訳で、国家規模で盗聴されていると仮定すると何がどうなるか想像してみます。

まず日常的に使っている検索エンジンやメール、ネットショッピングの内容が全て筒抜けになります。
普通に生活している分には、データ収集されても、あまり影響がないような気もしますが、技術的には改竄も可能なので、

  • 「検索語A」で検索したのに「検索語B」の結果が返ってきたり
  • メールに書いてある待合せ場所と時間を書き換えられたり
  • クレジットカードの番号を盗まれて勝手に買い物される

そんなリスクまで考えられます。国がやろうと思ったら、ですけど。

「自分ネットする時、絶対HTTPS(SSL/TLS)しか使わないんで大丈夫っすよ」
と思われる方もいるかもしれませんが、HTTPSは、みなさんのPCとサービスを提供する企業の入り口までを暗号化しているのであって、それ以降は筒抜けになります。ここから抜かれるとどうしようもありません。

                              ┏━━━━━━━━━━ IT企業のデータセンタ ━━━━━━━━━┓
                              ┃                                                            ┃
自分のPC(ブラウザ) <---------->[HTTPSをHTTPに複合する機能]<---------->[ロードバランサ等]<---┃
                       HTTPS  ┃                              HTTP                          ┃
                   暗号化して┗━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━┛
                    安全な区間                                │
                                                   この区間で盗聴されると平文
                                      (普通の常識だとデータセンターの中なので、盗聴は無理)

個人でできる情報の秘匿 - PGPを使う

こんな情報筒抜けな世の中だとしても、誰にも内緒で情報を伝える手段は存在します。
エドワード・スノーデンさんも頻繁に使っておりましたが、公開鍵暗号方式で暗号化して送ればいいんですね。

映画ではPGPを使っておりました。
日常的に使うには、ちょっと面倒なんですが、届いた相手のPCでしか複合できない仕組みなので確実です。

余談ですが、PGPを使う際には鍵長は最大(恐らく2048bit)を設定しましょう。短い鍵長だと、計算能力が高いコンピュータで割り当てられてしまうかもしれません。ちなみに鍵破りコンテストが随時開催中で、640bitの鍵長までは破られています。

参考:MathWorld Headline News RSA-640 Factored

スノーデンさんの件に関しては、真偽についても賛否についても、ご意見ある方いらっしゃると思いますが、いちエンジニアとして技術的に大変興味深く拝見させて頂いた映画でした。

なんか書いてて怖くなってきた。
あれ、誰か来たみたい。

ニコナレで公開されているスライドをpdfでダウンロードするコマンド

kanataほぼ8年前に追加

niconare-dl

niconareは、2019年8月15日(木)をもってサービス終了とのことです。

niconareで公開されているスライドをpdfでダウンロードするコマンド

2019.2.18追記 ニコナレの仕様が変わちゃったので現状は動きません

Installation

ファイルダウンロードして実行権限をつけるだけ

$ wget https://raintrees.net/attachments/download/422/niconare-dl
$ chmod u+x ./niconare-dl

動作環境

x86_64のLinuxで動作すると思われます。

以下で、動作確認しました。

  • CentOS Linux release 7.2.1511 x86_64
  • Kali GNU/Linux 2.0 (sana) x86_64

Debian系だと、若干表示がおかしくなることもあるみたいだけど(゚ε゚)キニシナイ!!

Usage

$ ./niconare-dl [URL]

$ niconare-dl http://niconare.nicovideo.jp/watch/kn1275
initializing..
downloading.. 59 slides
converting.. 恐怖!シェルショッカーのPOSIX原理主義シェルスクリプト.pdf
complete
$ls
恐怖!シェルショッカーのPOSIX原理主義シェルスクリプト.pdf

URLは'(シングルコーテーション)で囲んでおいた方が無難。

URLの中に & が入っているとシェルがバックグラウンド実行の記号と解釈しちゃうので。。

Specification

一時作業領域として、コマンド実行中にカレントディレクトリに以下のディレクトリが作成されます。
コマンド実行後には、削除されます。

niconare-dl_temp_[プロセスID]

もし、なんらかの理由でこのディレクトリが残っていたら、不要ですので削除してかまいません。

注意事項

スライド形式はダウンロードできるんですが、動画形式(?)には対応していません。
許してつかぁさい。堪忍してつかぁさい。。

Background

何故作ったか

最近なんかSlide Share以外に、Speacker Deckニコナレを使う人が出てきたみたい。(Speaker Deckは標準でPDFダウンロード機能がある)

Slide ShareSpeacker Deckは、ダウンロードして、電車の中で読むというのをしておりまして。
ニコナレも・・・!と、思って気がついたら作ってた。

動的リンクの実行ファイルを静的リンクに変換する

kanataほぼ8年前に追加

statifierというのを使ってみました。

Statifier

経緯

とあるコマンドをインストールしようと思った・・・・が・・・・・ 駄目っ・・・・・!
パッケージの依存関係がすごい。つまり、1つコマンドを導入するのに、入れたくないパッケージを山のように入れなければならない。。

そのコマンド1つだけ実行したいだけなのに・・・

そこで思いつく悪魔の発想・・・っ!

fig2.png
fig1.png

1バイナリで動くようにすれば、他の環境に楽に持っていける。理論上は出来るはず・・・と思い、調べたら出てきた。

statifierというのを使えば可能であることがわかった。

ELF STATIFIER MAIN PAGE

メンテナンスはあまり活発ではないようだが、x86_64にも対応してくれているっぽい。

その他の案として、参照している動的リンクライブラリを全部洗い出してコピーし、LD_PRELOAD環境変数に突っ込んだ上で実行すればいけるかなぁ。とか、思ったんだけど、試してはいない。

概要

結局、なにがしたいかと言うと、

$ cat test.c 
#include <stdio.h>

int main(){
  printf("Helloworld");
  return 0;
}
$ gcc test.c 
$ ldd a.out 
        linux-vdso.so.1 =>  (0x00007fffc62d0000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f886214a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8862517000)

この単純なプログラムですら、3つの動的リンクライブラリを必要としている事がわかる。
このライブラリがシステムに存在しないと、プログラムは動かない。
だったら・・・プログラム(a.out)の中に、この3つの動的リンクライブラリを取り込んだらいいじゃない。
という発想。

Install

まず、自分はこのソフトのコンパイルのため、コンパイル用の仮想環境を用意した。
statifierを導入するために、依存関係となっている複数パッケージを導入する・・・のは本末転倒である。
コンパイル済みのものだけを目的の環境にコピーしてやればよいではないか。

という訳で、ここから最新版のtar.gzをダウンロードする。

自分が実施した時は、statifier-1.7.4.tar.gz でした。

適当なところに展開しておく。

$ tar xvfz statifier-1.7.4.tar.gz

コンパイル時に必要となるパッケージをインストール。

# yum install glibc.i686 glibc-devel.i686 libgcc.x86_64 libgcc.i686 

makeする。

$ cd xvfz statifier-1.7.4
$ bash ./configure
$ make

というのが、めんどうな方のために自分がコンパイルしたものをここに置いておく。

statifier-1.7.4_for_x86_64.tar.gz

実行環境について

さっそく動作確認してみる。
dateコマンドを静的リンクにしてみよう。

$ ldd /bin/date 
        linux-vdso.so.1 =>  (0x00007fff3432f000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f61fcf4f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f61fd31c000)
$ cd statifier-1.7.4
$ setarch `uname -m` -R src/statifier.sh /bin/date /tmp/date2

これでstaticなdateコマンドが出来たはず。

$ setarch `uname -m` -R /tmp/date2
2016年  6月  5日 日曜日 17:30:56 JST
$ ldd /tmp/date2
        動的実行ファイルではありません

うん、たぶんうまく動いてるんだと思われる。

超注意:ASLRの怪

なんか、おまじないのようなコマンドがくっついているのが、おわかり頂けただろうか・・・

$ setarch `uname -m` -R

実は、これ、LinuxのASLRというセキュリティ機能を一時的に無効にするコマンドになります。
ASLRについては、ググるか、CTF_Pwnをみてね。
なんか、いろいろやってみたけど、動かなくてね~。

どうやら、「静的リンクの実行体に変換する時」と、「実際に動作させる時」にメモリアドレスが同じになってないといけないっぽい。

なので、必ず「setarch uname -m -R」を頭につけて変換&実行しておくれ。

想定される使い方

よっしゃー。これで、1バイナリになって、どの環境でも動くぞイヤッッホォォォオオォオウ!

と、ならないのが世の定め。。

ちょっとLinuxディストリビューションの違うLinuxに持ち込んでみたが動かない。。
まぁ全部試した訳ではないのだけれど、
同じディストリビューションだと動いているっぽい。

たぶん、kernelのバージョンが違ってたりすると、取り込んだlibcでそれを吸収できないとか、そんな感じになっている気がする。
調べてないけど。

そう考えると1バイナリになるGo言語って結構考えられてますね。ファイルサイズが大きくなるだろうから、そこらへんトレードオフなんだろうけど。

なので、自分は同じLinuxディストリビューションで2環境用意して運用している。

  • VMでコンパイル用環境を作る(足りない物は、なんでもかんでもyum install。使い捨て)
  • 本番環境。できるだけパッケージを入れない。

補足

statifier には、こんな記述が

Recent Linux kernels introduced VDSO (Virtual Dynamic Shared Object) and stack randomization. Those things, while valuable features, don't play well with Statifier.

意訳:ASLRとVDSOを使うバイナリは上手く動かないぜ

この statifier を作った方達は、Ermine というソフトを販売しております。

Ermine works in a fashion similar to Statifier, creating self-contained executables from dynamically-linked >applications. But Ermine-packed applications are not snapshots: instead they can be thought of as small virtual machines.
And because of this an Ermine-packed application does not suffer from the problems created by VDSO/stack randomization

意訳:Ermineなら問題ないんだぜ

Ermine
http://www.magicermine.com/

15日トライアルもできるらしい。

参考

bkブログ - statifier で動的リンクの実行ファイルを擬似的に静的リンクにする
http://0xcc.net/blog/archives/000089.html

ELF Statifierを使って実行形式ファイルをシステム間で移動する
https://osdn.jp/magazine/08/12/02/012255

WAFを知らない人に説明する試み

kanataほぼ8年前に追加

仕事で使うかもしれんのでまとめてみた。

WAFとIPSとFireWallとウィルス対策ソフトと何が違うの?
とか、確かに説明しづらい気がする。WAF知らない人に対しても、できるだけ簡潔に説明したい。

詳細は、Security#WAF参照。

WAF~><

Redmineにブログパーツを貼るには

kanataほぼ8年前に追加

Redmineプラグインを作った。
Redmineにブログパーツを貼るには、このプラグインの機能を使えば可能。
可能というか、HTMLとJavaScriptで出来ることなら、なんでもできてしまう。

Redmine RawHtml plugin

RawHtml plugin開発

概要

通常のRedmine(RubyOnRails)は、デフォルトで許可していないタグやスクリプトを表示・実行することができません。
これはセキュリティ上の仕様であり、正しい、あるべき姿です。

ただ、ただどうしても、貼り付けたいブログパーツとか、実行させたいJavaScriptとかがある場合があります。
それを可能にするWikiマクロになります。

使い方

{{rawhtml(ここにhtmlタグ等を書く)}}

{{rawhtml(<div style="color:#ff0000">あああ</div>)}}

あああ

実行例

SlideShareの貼り付け

PHOTOPRESSOの貼り付け

ブログカードの貼り付け(はてなブログ記事紹介ジェネレータを利用)

オシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black catオシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black cat

ブログカードの貼り付け(Embed Code Generatorを利用)

オシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black cat

ダウンロード

このページに添付してあるやつをダウンロードします。

redmine-rawhtml-0.8.0.tar.gz

セットアップ

DBは使ってないので、rakeとかは必要ありません。
ダウンロードファイル解凍後、pluginsフォルダへ。

# mv -i ./rawhtml /opt/alminium/plugins

お使いの環境に合わせて、ファイルの所有者を変更してください。

# cd /opt/alminium/plugins

# chown -R apache:apache rawhtml

注意事項

利用者のセキュリティに対する考慮について

このプラグインは 全てのタグ、全てのスクリプトを許容 します。
そのため、Redmineの登録ユーザは、 XSSCSRF 等の攻撃を容易に仕込む事が出来ます。

まぁ…かなり気の知れた仲間内で使うとか、私みたいに自分用Redmineとして使ってる人向けだと思ってください。

特定のユーザだけ許可するとか、そんな機能を加えればいいんだろうけど。

混在コンテンツのブロックについて

HTTPとHTTPSが入り交ざってコンテンツを配信していることを、混在コンテンツと言います。
最近のほとんどのWebブラウザは混在アクティブコンテンツに対しては自動でブロックします。
これはWebブラウザのセキュリティを考慮した仕様です。

以下の条件で、表示されたり、表示されなかったりします。

ブログパーツがhttp ブログパーツがhttps
表示元のサイトがhttp ○表示できる ○表示できる
表示元のサイトがhttps ×表示できない ○表示できる

これはこのプラグインに限った話ではなく、ブログパーツ一般のお話になります。
うまく表示されないブログパーツについては、混在コンテンツになっていないか確認するのがよいでしょう。

ちなみにニコニコ動画のブログパーツがhttpのみで、このサイトをhttpsでアクセスしていると、うまく表示されないんや。。

オシャレ定量化コマンドを作ってオシャレ評価してみた (2コメント)

kanataほぼ8年前に追加

以下の記事に感動した。

Instagramでオシャレを定量化できると信じて疑わない彼氏の話
http://kuma-no-kara-age.hatenablog.com/entry/2016/02/01/003051

なるほど、、、一理ある。この方法でオシャレが定量化できそうだ。

さっそくコマンドを作ってみる。

getOshareFromInstagram.sh

#!/bin/bash

# オシャレ定量化コマンド

while [ "$1" != "" ]
do
  # instagramからオシャレ指数を取得
  #POINT=`curl -s curl -s https://www.instagram.com/explore/tags/${1}/|tr ',' '\n'|grep count|grep entry_data|awk -F':' '{print $NF}'`
  # 2017.11.05 動かないので直した
  POINT=`curl -s https://www.instagram.com/explore/tags/${1}/|tr ',' '\n'|grep count\" |grep -v likes|grep -v comments|cut -d' ' -f3`
  # 表示位置調整のための小細工
  if [ `echo "${1}"|wc -m` -le 4 ]
  then
    WORD="${1} "
  else
    WORD="${1}"
  fi
  printf "%.15s\t%'10d oshare\n" "${WORD}" "${POINT}"
  shift
done

exit 0

実測

食べ物 で測定

思いつくままに、適当に食べ物を並べてみる。

$ ./getOshareFromInstagram.sh からあげ ハンバーグ パスタ パフェ ラーメン 蟹 パン ケーキ 沢庵
からあげ            76,194 oshare
ハンバーグ         423,013 oshare
蟹                 97,937 oshare
パン            1,001,182 oshare
ケーキ          1,168,795 oshare
沢庵                2,585 oshare

パンやケーキのオシャレ指数が、かなり高い事がわかる。
ケーキは、沢庵と比べ452倍オシャレであることがわかる。

飲み物 で測定

英名での評価も考えられるが、今回は日本固有のオシャレ感覚を考慮し、和名だけで調査した。

$ ./getOshareFromInstagram.sh 水 牛乳 青汁 ビール 焼酎 日本酒 カクテル ワイン
水        155,891 oshare
牛乳       71,144 oshare
青汁       25,258 oshare
ビール    989,409 oshare
焼酎       93,936 oshare
日本酒    564,994 oshare
カクテル    91,766 oshare
ワイン    397,795 oshare

とりあえずビールを飲んでおけば、オシャレであることに疑いの余地はない。
日本酒も意外にオシャレである。

ファッションブランド で測定

ちょっとググッて見つけたブランドを並べてみる。
日本語と英字の両方が存在する場合は、その両方を記載している。

$ ./getOshareFromInstagram.sh ユニクロ UNIQLO GAP しまむら ZARA GU 無印良品 MUJI
ユニクロ           495,885 oshare
UNIQLO           1,207,245 oshare
GAP             1,528,165 oshare
しまむら           529,127 oshare
ZARA            15,303,593 oshare
GU                656,049 oshare
無印良品           443,495 oshare
MUJI               468,137 oshare

ZARAの圧勝である。

ONE PIECE で測定

$ ./getOshareFromInstagram.sh ルフィ ゾロ ナミ ウソップ サンジ チョッパー ロビン フランキー ブルック
ルフィ             26,365 oshare
ゾロ               13,699 oshare
ナミ                7,082 oshare
ウソップ             4,670 oshare
サンジ             11,418 oshare
チョッパー          33,180 oshare
ロビン             10,586 oshare
フランキー           5,865 oshare
ブルック             3,355 oshare

ゾロとサンジがいい勝負であるが、なんとチョッパーが一番オシャレ指数が高い。
これは、同時にカワイイ指数も含まれていると推察される。

山手線駅名 で測定

山手線駅名の駅名で検索してみる。

$ ./getOshareFromInstagram.sh 東京 有楽町 新橋 浜松町 田町 品川 大崎 五反田 目黒 恵比寿 渋谷 原宿 代々木 新宿 新大久保 高田馬場 目白 池袋 大塚 巣鴨 駒込 田端 西日暮里 日暮里 鶯谷 上野 御徒町 秋葉原 神田
東京    2,225,774 oshare
有楽町     72,929 oshare
新橋       82,467 oshare
浜松町     17,881 oshare
田町       13,631 oshare
品川       90,886 oshare
大崎       10,113 oshare
五反田     40,071 oshare
目黒       79,041 oshare
恵比寿    382,042 oshare
渋谷    1,177,357 oshare
原宿    1,317,258 oshare
代々木     82,567 oshare
新宿      941,782 oshare
新大久保   249,498 oshare
高田馬場    69,581 oshare
目白       19,243 oshare
池袋      492,544 oshare
大塚       12,218 oshare
巣鴨       20,336 oshare
駒込       11,560 oshare
田端        3,841 oshare
西日暮里     7,112 oshare
日暮里     21,986 oshare
鶯谷        4,889 oshare
上野      207,968 oshare
御徒町     19,407 oshare
秋葉原    107,962 oshare
神田       43,982 oshare

東京は、地名以外でもヒットしていると思われるので比較対象から除外する。
すると最もオシャレなのは原宿、次いで、渋谷となり、オシャレ指数の精度の高さを確認できる。
ワーストは田端であるが、原宿の1/342のオシャレ指数となり、東京都心でも格差が大きい。

考察

以上の結果から、かなり高い精度でオシャレ指数を測定できる事が確認できた。
ただし、ONE PIECEでの測定結果にみられるように、純粋なオシャレ指数ではなく「オシャレ指数+カワイイ指数」となっている疑いが残る。
カワイイ指数とオシャレ指数の分離については、今後の課題としたい。

Halvar Flake&PPPとローレイヤーな話をしよう に参加しました

kanataほぼ8年前に追加

Halvar Flake&PPPとローレイヤーな話をしように参加させて頂きました。

当日は、以下の錚々たる顔ぶれで御座いました。

  • 中津留勇さん
  • 黒米祐馬さん
  • ucqさん
  • inaz2さん
  • Halver Flakeさん

お話面白かったです。すごい高度でございました。恐るべしローレイヤーの世界。
(ただ英語力がなくてHalver氏のプレゼンで死んだ。英語力が必要だ。。)

ぼっちで突入した私を気遣って対応して頂いたkanaさん、隣の席で私のお相手して頂いたお二方、ありがとうございました。

資料

inaz2さんは、当日のプレゼンスライドを公開されておりました。

ももいろテクノロジー - 「Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux」というタイトルで発表した
http://inaz2.hatenablog.com/entry/2016/04/28/012136

会場

20160427_HalverFlakeAndPPP.jpg

使わない順 業務で使わないコマンド

kanataほぼ8年前に追加

何気に手元にあるCentOSには標準でインストールされていて、そのコマンドの存在を知っている割には1度も使ったことが無いコマンド達。

調査環境

$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core) 

コマンドの仕様を解りやすく説明するために、こういうファイルを用意してみた。

$ cat test.txt 
abcdefg
ABCDEFG
1234567

shuf

行をランダムに入れ替える。

$ shuf test.txt 
ABCDEFG
1234567
abcdefg

使わない。

rev

文字の並びが逆になる。

$ rev test.txt 
gfedcba
GFEDCBA
7654321

使わない。

tac

行単位で逆に出力する。

$ tac test.txt 
1234567
ABCDEFG
abcdefg

ログファイル見る時にもしかして使う・・・?
(いや、でもtail使うし。。)

tput

ターミナル出力に色をつける事ができる!
細かい仕様はこのあたりを参照すると良い。

# 文字色を変える
$ tput setaf [0-255]
# 背景を変える
$ tput setab [0-255]
# 太字にする
$ tput bold
# 下線を引く
$ tput smul
# 文字と背景を反転
$ tput rev
# 全部リセット
$ tput sgr0

今までechoで代用してたけど、今後はこれを使おうと思ってる。
ちなみにPOSIXコマンドでもある。


みんなの使わないコマンドを教えて欲しい

決してディスっている訳ではない。むしろ全くの逆である。
シェル芸人としての嗜みである。
他にもあったら教えてほしいです。

1 ... 8 9 10 11 12 ... 16 (91-100/152)

他の形式にエクスポート: Atom

クリップボードから画像を追加 (サイズの上限: 100 MB)