ニシキヘビってかわいいよね、実際みたことないけど。

無職がいよかん国でプログラミングとかの備忘録を書いてます。 一日一食たまごかけごはん。

Google翻訳の翻訳元テキストボックスにコピペした時改行を整形するブックマークレット

書籍や論文などが書かれたPDFから英文をコピペすると、文中に存在するPDFの改行もコピペされるので、 Google翻訳が改行位置を文の区切りと判断し、妙な結果がでることがある。

手直ししてるとめんどくさいので、自動で修正を行うブックマークレットを作ってみた。

javascript:(function(){var textarea_source = document.getElementById('source'); textarea_source.addEventListener('paste', function(){setTimeout(function(){var text = textarea_source.value; var new_text = text.replace(/[\n\r]+/g, ' ').replace(/(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?|!)\s/g, '\n\n'); textarea_source.value = new_text;}, 1000)})}());

ブックマークレット起動後、Google翻訳の翻訳元テキストボックスに英文をペーストして1秒経つと、全改行を空白で置換後、文区切りとなるピリオドっぽいところに改行を2つ挿入する。 待機秒数を早めたい場合は、1000のところを各環境に応じて調節する。

Chromium 62.0.3202.75(Official Build)Built on Ubuntu で動作確認。
正規表現の後戻りを使うので、1年半くらい前から更新していないChromeだと動かないです。

正規表現Python - RegEx for splitting text into sentences (sentence-tokenizing) - Stack Overflowを使わせていただきました。

他に文末扱いしたい記号があれば、最後の肯定後戻りに追加すれば動くかと。 たまにへんてこなとこで切れるが、そのためだけにNLTKのPunktSentenceTokenizerを移植する気にはなれない.......

DVWAのセットアップ

DVWAは脆弱性を体験できるWebアプリケーションです。
Damn Vulnerable Web Applicationの略です。
めちゃくちゃ脆弱なウェブアプリ、火の玉直球な名前ですね。

実際のコードを見て勉強したくなったので、探してたらありました。
環境構築した時のメモ書き。

続きを読む

SSHポートフォワーディング

いつも本見たりgoogleしたり--helpしたりしてるので

ssh -L [sshクライアント側で利用するポート]:[sshサーバからみて通信したいホスト名]:[通信したいホストにある通信したいポート] その他オプション


例えば

ssh -L 8989:localhost:8888 remote.server

で, sshクライアントから見たlocalhost:8989ポートにアクセスすると、sshサーバからみたlocalhost:8888(=remote.server:8888)に繋がる。

これでsshサーバーのポートしか開いてなくてもいろいろ通信できる。

SVGのプロパティがつかえない時はnamaspaceが設定されているか確認する

こんなHTML(一部分)があって

<div id="svg_wrapper"></div>

動的にSVG要素を用意していた

var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');

var poly = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
// 中略
svg.appendChild(poly);

var svg_wrapper = document.getElementById('svg_wrapper');
svg_wrapper.appendChild(svg);

使っているある外部ライブラリに、SVGを構成する文字列を渡すメソッドがあった。
こんな感じに。

extarnal_module.func(svg_wrapper.innerHTML);

ところが処理中に、SVGのpoints属性がないためエラー、とのこと。 内部では渡した文字列をDOMparserでDOMに変換して作業してる模様。

なにがダメだったかというと名前空間が定義されてなかったから。 文字列からSVG要素であるDOMに変換するには事前にルートSVG要素で名前空間を定義してないと、ただのHTMLないしはXMLと解釈されてしまう。

雑にユーティリティ関数作って対処

var createElementSVG = function () {
    var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
    svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
    svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
    svg.setAttributeNS(null, 'version', '1.1');
    return svg;
};

createElementNSからつくったDOMは、ルートSVGタグの名前空間がどうであれ、 そのメソッドの第一引数に渡した名前空間が適用されるためSVGに関わる属性が使える。
あっちでつかえてこっちで使えなかったため、何が原因かわかるのに1日溶かしてしまった。 ああ、情けない。