プログラミングについて

Google Cloud SDKやPythonなどコマンドラインで動かすのは楽しいです

数日前ブログで、私がITを好きになった原点はCP/MやMS-DOSを使ってゲームのSE制作のアルバイトをしたことなので、コマンドラインで動くPythonのツールを作ることくらいは続けて行きたい、と書きました。

仕事としてユーザーインターフェースがちゃんとしたアプリを作るのは、私にとっては時間も労力もかかります。

ライフワークを優先する身としては、ITに関することを続けて行くにしても、好きなことでシンプルなことに限定したいと思っています。

・・・ということをブログに書いた日は意識していなかったのですが、今日Google App Engineで静的ウェブサイトをホストするために、Google Cloud SDKをコマンドラインで動かしてみました。

実はあるクライアントさんのホームページをGoogle App Engineで作っていて、五月に「Migrate your App Engine projects from the legacy SDK (appcfg) by Aug 30, 2020」というメールが来ていたのですが、他にいろいろやることがあって、先延ばしにしていたのです。

サンプルをデプロイしてみたところ、今までのレガシーSDKのときとほぼ同じなので、何とか移行できそうです。

メルマガのスクリプトが動かない・・・原因はお問い合わせ用メルアドでした

クライアントさんの依頼を受けて、いつもやっているメルマガを送信しようとしたら、なぜか上手く行きません。

Google App ScriptのMailApp.sendEmail()を使ってスクリプトを組んでいるものを使っていて、今までは上手く行っていたのです。

全員に配信する前に、自分のメールアドレスにテスト配信しているのですが、届かないのです。

今までと違うのは、「このプロジェクトで Chrome V8 を搭載した新しい Apps Script ランタイムを有効にします。」という表示が出たので有効にしたことくらい。

なので無効に戻したのですが、症状は変わらず。

スクリプトが参照している、クライアントさんが管理しているGoogleスプレッドシートの送信者リストが変なことになってないかな・・・。これも特に問題ないようです。

もしやと思ってGmailの送信トレイを見てみると、次のようなメッセージが。

「メールのブロック (テスト送信先のメルアド)へのメールはブロックされました。詳しくは、下記の詳細な技術情報をご覧ください。」

リンク先の技術情報を見ると、「メールが返送された理由 ・メールの本文やリンクが不審であると判断された。」という箇所に目が留まりました。

高齢になってもできることを考えていたのに本末転倒になるところでした

IT関連の仕事は自分が高齢になると厳しいと思うので、ライフワークとして考えているものは、歳をとってもできることばかりです。

ただライフワークの一部はデータをもとにやる必要があるので、データを生成するツールはスクリプトで組まなきゃいけないなと考えています。

ツールの内容は大したものではないので組むのは難しくないと思いますが、それでも高齢者になったらメンテナンスできるか心配ではあります。

それにそのツールを公開するとしたら、当然Web上になるので、JavaScriptで組むことになります。

う~ん、何だか大変なことになりそうな予感・・・。

そんなことを考えるうちに思いついたのが、ツールを公開しなくてもいいということ。

私が考えているようなツールは、既にいくつかWebサイトに存在するので、あえて私が公開する必要はありません。

そして公開して使ってもらうとなったら、デバッグもそうですが、ユーザーインターフェースも考えなきゃならない。

それにJavaScriptの言語仕様は毎年のように改訂されているみたいなので、高齢になって付いて行くのは大変だなと思っていたのす。

そう考えると急に気が軽くなりました。

PHPのsimplexml_load_file()で176日以前の日付のrssデータが取得できない?

私が運営をお手伝いしているホームページで、あるブログの「最新ニュース」を表示させるために、PHPのsimplexml_load_file()でnewsカテゴリーを取得しようとしていました。

$rss_url = 'http://xxx=rss';
$rss = simplexml_load_file($rss_url, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach ($rss->channel->item as $item) {
  $category = $item->category;
  if ($category == 'news') {
    ・・・
  }

ところが、なぜか指定した数だけ取得できません。

ネットで検索してもどこが悪いのかよく分かりません。

このブログはnewsカテゴリーの記事があまりなくて、結構古い記事ばかりなので、もしやと思い公開日(投稿日)をいろいろ変えて試してみました。

すると175日前までの日付のrssデータは取得できるけど、176日以前の日付になると取得できない・・・。

翻訳アプリはよくできていますが生身の人間のおかしな日本語が面白かったりします

iOSアプリの申請でリジェクトされたので、Appleの指摘に回答する文章を英文を書いていました。

今は頭のいいインターネットの翻訳サイトがあるのでそんなに苦労はしませんが、それでも英文に変換する前にできるだけシンプルな日本語の文章を考え、変換結果に変なところがあれば修正しています。

英語に堪能な方ばかりではないと思うので、私と同じような方は多いと思います。

しかし、ネイティブじゃない人間が書く英文なので、Appleの担当者にとってはずいぶん妙な英文だろうなと想像しています。それはしょうがないですよね。

最近は来日される外国人の方も増えてきて、普通に日本語を喋る方が多くてびっくりしてしまいます。

とはいうものの、そこはネイティブの日本人ではないので、たまに違和感のある表現をされることもあります。

とても流暢に日本語を喋る方でもそうなので、私が書いた英文なんて、ほとんど意味が通じてないんじゃないかと不安になります。

実際は私ではなく、翻訳サイトがちゃんとした英文を作ってくれているので、そんなに心配する必要はないと思いますが。

そういう意味では英会話の方も、外国の方とスマホの翻訳アプリを介してできる時代になりつつあるのかもしれません。

Gmailのスレッド関連で調べたことを備忘録として書いておきます

先日、GmailからGoogle Apps Scriptを使ってGoogleスプレッドシートに書き込むスクリプトを書く仕事の話をしましたが、スレッド関連で調べたことを備忘録として書いておきます。

一つひとつはよく知られている情報だと思います。

取得するメールは、あるWebサイトのメールフォームからGmailに転送されて来ます。

例えば今日は2月2日でスレッドのスタートが2月1日のメール、そこに2月2日のメールがくっ付いているとします。

このスレッドのメールは、「昨日」を指定してもゴミ箱に移らず、「今日」を指定してもサーチできません。

なので、ゴミ箱に移すには「今日以前」を指定してスレッドを全部移すしかありません。一度に削除できるのは最大100件までらしいのでこんな感じ。

var myThreads = GmailApp.search('older_than:0d', 0, 99);
GmailApp.moveThreadsToTrash(myThreads);

実際にはトリガーを使って下の方法でGoogleスプレッドシートに書き込んで行くのですが、上記の削除は毎日深夜にトリガーで実行します。

今日もGmailの基本的なことを調べていたら時間が過ぎてしまいました

昨日はGmailからGoogle Apps Scriptを使ってGoogleスプレッドシートに書き込むスクリプトを書く仕事を請けたけれど、やり始めたらまた基本的なことを知らずに困ってしまったことを書きました。

シートに記入された最終タイムスタンプよりあとのメールを取得するために、GmailApp.search()メソッドの検索演算子after:にUNIX時間を設定したのにうまく行かなかったので、よく確認したらGmailのスレッド表示設定がOFFになっていたという落ちでした。

あるWebサイトのメールフォームのメールが同じ件名で転送されてくるので、果てしなく長いスレッドになりそうです。

スレッドのこと自体よく分かっていないので、スレッド化されないように違う件名でメールを送ってみて、GmailApp.search()の結果を比較していました。

同じスレッドに10時00分と10時20分のメールがあったとして、後者のメールを取得するためにafter:10時10分を指定しても両方拾ってしまいます。

スレッド表示OFFの状態で一方にラベルを付けて、検索演算子のlabel:ラベル名やhas:userlabelsを指定してみても結果は同じです。

また仕事を請けたあとに基本的な知識がなかったことに気付いてしまいました

あるWebサイトのメールフォームのメールがGmailに転送されてくるので、そのメールをGoogle Apps Scriptを使ってGoogleスプレッドシートに書き込むスクリプトを書くことになりました。

すでにシートに書き込まれたもの以降のメールを取得する方法を調べてみると、GmailApp.search()というメソッドのafter:という検索演算子を使うらしい。

Gmailを見てみるとスレッドになっていないので、単にシートに記入済みの最終タイムスタンプよりあとのメールを取得すればいいと思ったのですが、このafter:というのは「日」の指定までしかできないみたい。

何かいい方法はないか調べていたらありました。UNIX時間に変換したものを指定すればいいそう。
https://www.lifehacker.jp/2016/12/161221_gmail_timesearch.html

しかしやってみると、どうもうまくいきません。

もしかして、この転送されたメールってスレッドになってるんじゃない?

日頃からWordPressに触れていないので簡単にできると思って冷や汗をかいてしまいました

数日前、以前WordPressでホームページを作成したお客さんから追加ページを依頼されたけれど、やろうとしたら簡単ではなさそうで困ったというお話をしました。

そのあと他の業務が入っていたのであまり進まなかったのですが、今日何とかできたので記録しておきます。

やりたいことは、会社で今までやってきたイベントの記事、つまりイベントのカテゴリーを年別アーカイブウィジェットで表示させたい。

そして「過去のイベント」というようなメニューをクリックして、最新のイベント記事のある年別アーカイブページを表示させたい、ということです。

WordPressの月別アーカイブウィジェットはカテゴリー指定はできないのですが、プラグインを使えばできるだろうと簡単に考えていました。

プラグインはあるにはあるみたいですが、どうも更新されていないよう。使うのに躊躇します。

プログラマーさんが正確を期して見積もり作業をしているのを見るといつも感心します

数年前WordPressでホームページを作って納品したお客さんから、新しいページを追加して欲しいという依頼がありました。

打ち合わせをしているときはありがちなカスタマイズだと思ったので、簡単に請け負って帰ってきたのですが、実際にやろうとしたら簡単ではなさそう。

インターネットで調べてみてもあまり情報がありません。

プラグインはいくつかあるようですが、更新が止まっていて不具合も出ているようです。

このようなCMSのカスタマイズを含むホームページの制作は、時間があるときに私が請け負って、スマホアプリやPCソフトの開発はプログラマーさんに回します。

私の手には負えないカスタマイズであればプログラマーさんに回しますが、そういうのは最初から大手ホームページ制作会社さんが請け負うでしょうから、今までのところそのような依頼はありません。

ちょうど同じ時期にスマホアプリの案件があったので、プログラマーさんに見積もってもらっているのですが、私のようにいい加減ではなくてちゃんと時間をかけています。

いつも思うのですが、こういうところはスゴイなと思います。

考えてみれば当たり前で、見積もりが間違っていて納品できなかったら大問題ですもんね。