PythonとJavaScript で空の配列の真偽値が違う件について

Python >>> bool([]) False JavaScript > Boolean([]) true どっちが良いかと言われると難しいなあ。どちらにせよ、配列そのものを真偽値チェックに使うのはバグの温床になるから止めたほうがいいね。lengthをチェックするとか変数定義をチェックするとかに…

fetchにタイムアウトとリトライの処理を付ける

axios(+ axios-retry)だとタイムアウトとリトライの処理があるけど、fetchには何もないらしい。まじか。手続き型言語なら普通にタイマーでキャンセル処理を登録してリトライはforループとかで、、 for(1 .. retry_num){ if (timer(fetch, timeout) == 0){ br…

fetchでReadableStreamを使う

var ts = function(){ dt = new Date(); year = dt.getFullYear(); month = (dt.getMonth()+1).toString().padStart(2, '0'); day = dt.getDate().toString().padStart(2, '0'); hour = dt.getHours().toString().padStart(2, '0'); min = dt.getMinutes().t…

GmailのSMTPでOAuth2.0を使う in Perl

こちらの記事の続き。kkobayashi-a.hatenablog.comIMAPに比べてSMTPでOAuth 2.0の認証をするサンプルコードについてはほとんど情報がありませんでしたが、唯一こちらが参考になりました。www.perlmonks.orgGmail用のAuthen::SASLオブジェクトをAuthen::SASL:…

GmailのIMAPでOAuth2.0を使う in Perl

GmailのIMAPログインが失敗するようになってしまった。Google アカウントが5月30日にセキュリティ強化、Gmailの外部メールアプリ利用などが使えなくなる可能性 - ケータイ Watchこれのことらしい。困りますね。 use strict; use warnings; use utf8; use IO:…

WindowsでPycURLを使う

PycURL – A Python Interface To The cURL library — PycURL 7.45.1 documentationPythonでHTTP関係の処理をするならRequestsなのですが、PycURLはlibcurlベースで高速だったり細かい処理ができたりして便利なこともあるので使ってみます。残念ながらWindows…

PHPの http_build_query と Pythonの urlencode

シンプルなkey=valueの形式なら何を使っても同じ結果になるけど、ネストしたデータ構造だと結果が違う。stackoverflow.com元々はjQueryのparam()とPythonのurlencodeで結果が違うなーと思って(jQueryはPHPと同じ結果になる)調べてたけど、どっちでもサーバ…

BrowserMob Proxyを使ってみる

github.com JavaアプリとかSeleniumとかで使うのがメインみたいだけど、とりあえず挙動を掴むためにstandaloneで動かしてみる。 Windows環境では $ bin/browsermob-proxy.bat でBrowserMob Proxyを起動する。UNIX系OS(LinuxとかMacとか)ではbin/browsermob-p…

PerlからIMAPでGmailを受信する

PerlからGmailを送信する方法については前に調べたけど、今回はGmailを受信する方法を調べてみた。 Perlでgmailからメール送る - kkobayashi_a’s blog Perlでgmailからメール送る 補足 - kkobayashi_a’s blog Net::IMAP::Clientでメールの受信、Email::MIME…

PerlのYAML::SyckとJSON::XSでutf-8ファイルを取り扱うポイント

考えてみると当たり前なんだけど、毎回考えるのが面倒なので動くコードをまとめておく。Perlはunicode周りの挙動が面倒なんだよなあ。Python(3)の方がシンプルでよいね。モダンな言語はやっぱりこの辺の取り扱いがスマートだわ。 YAML::Syck UTF-8 エンコー…

imapsyncでモバメをGmailにコピーする その3 - ローカルのmboxをThunderbird + Got Your BackでGmailにコピーする

現在受信しているモバメはimapsyncで問題なくGmailに同期できるようになった。喜んでいたのもつかの間、昔ローカルにコピーを取っていたモバメのmboxファイルを発見してしまった。ついでにこれもGmailに同期しておきたい。mboxをimapにコピーするツールは探…

imapsyncでモバメをGmailにコピーする その2

特に実用上支障はない(自分は使わないので)けど、日本語のフォルダが文字化けする。 これはデコードにUnicode::Stringを使ってるせいで、Encode::IMAPUTF7を使うとうまくいく。 IMAP4ではUTF-7ではなく修正UTF-7というものを使っているのが原因らしいが、…

imapsyncでモバメをGmailにコピーする

この話の続き。ThunderbirdでドコモメールをGmailに自動転送する - kkobayashi_a’s blog今までThunderbirdのフィルタ機能を使ってキャリアメールからGmailにモバメをコピーしていたけど、そのためだけに常時Thunderbirdを起動させておくのがどうもオーバース…

スキャンしたファイルをHuginでstitchする

雑誌のスキャンはドキュメントスキャナよりフラットベッドスキャナの方が圧倒的に使いやすい。スキャン画像に変な白い線や黒い線が入ってイライラすることもないし、硬い紙も柔らかい紙も気にせずスキャンできるし、複数ページの巻き込みもない。買う前には…

opencvでスキャン後の余白カット

ImageMagickの-trimオプションでもいいかなあと思っていたんだけど、斜めにスキャンした画像の補正とか-fuzzの調整とか色々面倒。と思いつつImageMagickを使ったりGIMPの台形補正(遠近法)ツールでシコシコやったりしてごまかしていたけど、どうやらopencvを…

EvernoteのAPIを使ってみる

Documentation - Evernote DevelopersPerlでいいかなぁと思ったけど公式ドキュメントが不親切なのでPythonにする。Evernote Cloud API — Python Quick-start Guide - Evernote Developersgetting startedのドキュメントによると、まずは sendboxのアカウント…

CygwinでHTTPS接続できないときはca-certificatesをチェックしよう

何度かブログで触れている気がするdropbox-apiスクリプト。https://github.com/s-aska/dropbox-api-commandいつの頃からか(今思えばCygwinパッケージをアップグレードした辺りからか・・・)エラーになった。 $ dropbox-api ls /sync 2018-05-28T16:51:48 […

Wunderlist APIを使ってみた

Wunderlistの完了済みタスクをコピーしてEvernoteに保存してタスクを削除、というのを毎週するようにしたのだけど、どうにも面倒くさい。Documentation | Wunderlist DeveloperAPIが提供されているから自動化できそう。検索するとPerlではAPI::Wunderlistと…

10年遅いPerlのourの話

10年ぶりにPerlを書いて色々調べていたら超懐かしい話題を見かけたので。 ourの挙動は分かったけど、一番重要なのはそれで何が嬉しいの?という事じゃないのかなあ。 要するにuse strict環境でグローバル変数(完全修飾名?)を簡単に作れる方法というだけ。…

Firefox webdriverでcookieが読めなくなった話

取得したクッキーを保存して読み直すだけのコードである。 from selenium import webdriver import json driver = webdriver.Firefox() #driver = webdriver.Chrome() #driver = webdriver.PhantomJS() try: driver.get("http://www.google.com") fw = open(…

○○ソートみたいなやつ

ソートファクトリー こういうの。 use strict; use warnings; use Path::Class; my @list = file('list.txt')->slurp(chomp=>1); my $COUNT = 0; print "$_\n" foreach sort { compare($a, $b) } @list; sub compare{ my($lhs, $rhs) = @_; printf("#%02d: w…

ウインドウの最小化

ルームを沢山開いてウインドウを放っておくと、全ルームの音がなって大変なことになるし、ブラウザがクソ重くなって大変なことになる。ルームを開く前にウインドウを最小化しておけば大丈夫なので、実行時はブラウザを最小化しておきたい。しかし、これが意…

Seleniumを使ってみる(Cygin64 + Python)

近年ますますリッチになっていくWebコンテンツ、たいていのことは単純なスクレイピングでできるけど、Javascriptやら何やらを駆使したサイトは扱いづらい。ので、いつかはブラウザ自動化を試してみたいなあと思っていた、が調べるのが面倒でChromeの拡張を作…

Smart::CommentsとかData::DumperのUTF-8文字列をエスケープしない

調べてみると色々でてくる。 Data::Dumper や Smart::Comments の出力を utf8 文字列に変更する | ミヤビッチの穴 Smart::Commentsで調べると上のサイトが出てくる。$SIG{__WARN__}をフックする方法らしい。これは毎回このコードを書かないとダメそうなので…

twitterをなんかするやつ

GitHub - dyama/berryjack: The simple twitter media downloader Twitterの画像を一括ダウンロードするシェルスクリプト「berryjack」を書いた。 – dyama's page 検索すると色々出てくるけど、シンプルにシェルスクリプトというのがよさげ。基本的なアイデ…

return; と return undef; の違い

use strict; use warnings; use Smart::Comments; my %n = (val=>return_nothing()); my %u = (val=>return_undef()); ### %n ### %u sub return_nothing{ return; } sub return_undef{ return undef; } $ perl a.pl Odd number of elements in hash assignm…

dropbox-api-commandのファイル更新判定を変更する

GitHub - s-aska/dropbox-api-command: command line interface to access Dropbox API Perlで実装されたDropbox操作コマンドです。ディレクトリのsyncのために定期的にcronで実行して便利に使わせていただいていたのですが、ファイルの更新を「サイズが違う…

Perlで配列の値をハッシュにしたいような時

表現が難しいんだけど my @value = (1, 2, 3, 4, 5); みたいなデータがあって、それをハッシュとして初期化したいときはどうするか。 my %hash = ( key1 => $value[0], key2 => $value[1], .. .. ); とかするのだろうけど、配列の個数が何個もあると面倒くさ…

bio監視する的な

推しのプロフィールの更新をチェックするツール、bioischanged.comみたいなサービスがあるみたいだけど、どこまで変更を細かくチェックするのか分からなかったので、自分でもちょっと作ってみた。cronに登録して放っておくとDMが来る。ネトストぽい。。別にJ…

twitterを掘る

通常twitterでは3200くらいしか過去のツイートを遡れません。とはいえ全ツイートを保存したい。そんなときは、"from:XXXX since:YYYY until:ZZZZ" でツイッターを検索すると好きな期間のツイートを取得できます。例えばこんな感じ。https://twitter.com/sear…