TOPに戻る
鬱るんです
躁鬱病のITエンジニア「はまー」が心と体の模様を記した雑記帳。 大手IT企業で心身ともにぼろぼろになり退職した後、ほそぼそと働いたり事業を立ち上げようとして頓挫したり、作業所に通ったり障害者雇用で働いたりと紆余曲折したが、今は無職な毎日。

カテゴリー:IT関連

昨日も遅くなってしまった。

22時半に寝るつもりが、少し遅くなってしまった。それでも最近は眠れてたのに、昨日は眠れず、また起きてコーンフレークを食べてしまった。食べちゃいかんと言ってるのに。なにか具体策を考えようとかこの前書いたが、何もやってない。それで、食べてそのまま寝ればいいのに、PCを起動してなんだかんだやっていた。そのうち眠気がきてふらふらになってるのに、まだ何かやっていた。なんですぐ寝ないんだろう?0時をまわってようやく寝た。夜は眠れたと思ったが、朝がしんどくて、起きたのは9時20分だった。疲労感がある。気力がまるでない。

と言いつつ今日も朝からプログラミングをしていた。Excelの制限をオーバーしたときの処理をしていたのだが、セル内に格納できる文字が32,767までで、それをオーバーしたときはセルをセットしようとした時点でVBAがエラーを出してしまう。セルに書き込む前に、リミットの文字数だけ左から切り取っていって、セルに分割して書き込むという処理をループで回すようにした。例外処理などあってけっこう苦労したが、なんとかうまくいった。が、プログラムがよけいわかりにくくなった。

プログラムを書いていて、そんなレアケースないだろうと思うのだが、そこまでやるというのは、単にプログラマーとしてそういうロジックを考えてインプリメントしてみたい、という欲求からである。それにしてもこのプログラム、たくさんコメントは入れてあるのだが、あとから見てわかるかなあ。

しかしまあ、いろいろ処理を増やしたため、実行に時間がかかってしまうようになった。5,700行のトーク履歴ファイルを処理するのに15秒かかる。Core i7でメモリ16GBでSSD500GBの私のPCでそんなに時間がかかるのだから、もっとスペックの低いPCでもっとサイズの大きなファイルの処理はさぞかし時間がかかるだろう。まあ1分くらいは待ってちょ。

そんなExcelの制限に引っかかるような超レアケースの処理を作り込んでいたのに、肝心の機能面は何も手を付けてなかった。LINEの画面を模しているとは言え、全く同じにする必要はない。前から不便だと思っていたのが新しい日付のトークに切り替わったときに、今まで読んでたのはいつのだっけ、とトークのだいぶ上に戻って確認しないといけなかったこと。日付を表示するついでに前の日付も表示するようにしたら、ちょっと便利になった。

日付表示画面

こんな簡単にできる修正だったらどんどんやればいい。もっとあったら便利な機能はないかな。セル内にURLがあったらその部分をリンクにするというのはどうだろうか。でもExcelのリンクはセル単位でしかできないから、ふたつURLが書いてあったら最初だけとか、かな。どうしようか。

そんなことをしているうちに昼過ぎになったので、妻とローソンにお買い物に行って帰ってきた。もう少し遠くまで歩かないといかんな。すぐそばの坂を登っているだけで苦しくなってきた。体力が衰えているのか。Twitterの10日間連続リツイートキャンペーンで3回当たったうちの3回目のLチキを引き換えて帰ってきた。Lチキうまいよなあ。いくらだっけ?何円分得したのかな。セブンにはナナチキ、ファミマにはファミチキという類似商品がある。

Lチキ

プログラムを書いているVBEの画面。ちょっと使いづらい。画面を見てわかる人はわかるだろうが、Excelのバージョンが低い。Office2010をまだ使っているのだが、サポートが今年の10月に切れてしまう。新しいOffice365を購入するべきだろうが、4万円くらいするのでちょっと渋っている。最近臨時出費が多くて貯金減りまくりだから、いくらひとり10万円ずつ入ってくると言ってもあまりお金を使いたくない。でもセキュリティに手を抜いたり金を渋るのはよくないのだ。一時期はセキュリティでちょいと飯を食っていた身分なので、そこはちゃんとしたい。

VBE画面

10月ぎりぎりまで粘るか。

今日も動画を載せておこう。最近よく動画を載せている上白石萌歌と上白石萌音と、「もか&もね」姉妹のデュエット。スピッツの「チェリー」。顔も声もよく似ている。ハモリもいいしユニゾンがぴたり。気持ちいい。

昨日は22時半に寝た・・・と書きたいが、また遅くなってしまい、22時50分くらいになってしまったか。プログラムを書いていたわけではない。友達とLINEをしていて、22時半近くになったので切り上げたのだのだが、その後なにしてたっけ?夜中は眠りが浅くて何度も目が覚めた。たくさんの夢を見て疲れた。荒唐無稽な夢ばかり。

眼科で診察を受けていると池上彰に「目の手術をします」と言われて寝台に乗せられ、手術室まで運ばれた。どうやら池上彰が手術をするらしい。全身麻酔が怖くてやだよーと思っていたら、別室にいた次元大介が何かやってくれて(この辺でわからなくなった。場面が変わったか目が覚めたか)。

ボーカルアンサンブルの仲間2人に会うために京阪電車に乗っていた。枚方公園駅で降りるのだが、そこに近づいた時にふと尻ポケットに手をやったら財布がないのに気がついて血の気が引いた。ここまでSuicaだけで来れたから気が付かなかった。これは実際にありそうで怖い。すると赤ん坊みたいなお爺さんみたいな干からびた人が車両内に倒れていたので、「大丈夫ですか」と救命講習で教わったとおり肩を叩いたが反応がないので心臓マッサージをやったら生き返った。

街でファミレスのメニューのようなごついチラシを配っていたのでもらったら、新しくできたでかい寿司屋の案内だった。近くまで行ってお店を見てから元の場所に戻り、「行かないからいらない」と言ってパンフ(チラシ)を返した。

最近よくLINEでやり取りしている友達と電話で話をしていた。どうやら向こうは長野かその辺りの山にいるらしいのだが、音が途切れたと思ったら何かの音楽が聞こえてきた。スマホの画面を見たらその曲名が表示されていた。よくわからないが、なんだか便利だと思った。

以上、夢の話でした。

今日もまたずっとプログラミングをしていた。レアケースに対応しようとしたら、このプログラムのやり方だと不可能なことがわかった。最終行の最後に改行コードが入ってない場合、ADODBのストリームで行単位でReadTextしたときに、最後の行がEOS判定されてそこだけループを回せない。う~ん、これを解決するためにはどうしたらよいか。どうしようもない。ADODBの仕様なのでそこはどうしようもない。UTF-8なので普通にファイルをOpenしてもExcelでは文字化けする。あ、そうだいったんバイナリーで開いて強引に最後に改行コードを付加して保存すればいいのでは・・・。

などとばかなことを考えてしまった。どうせいったん全部ファイルを読み込むなら、テキストとして取り込んで普通にそれをそのまま処理すればいいではないか。

とりあえずちょこちょこといじって、ReadTextで行単位でなくファイル丸ごと読んで変数に放り込んでから、配列に分割して処理してみた。これならループは自分で制御できる。先読みをしているからループを1回多く回して処理をしたら、それでなんとかうまくいった。一気に取り込んで分割したら、今度は最後によけいな改行が入っていることになってしまったので、それを削除する処理を追加。いったいなんなんだ。まあやりたいことはそれでできた。

しかし、いっぺんにファイルを読みこんでから処理をするのと、ストリームから1行ずつ読み込んで処理するのはどちらがいいのか。私がプログラミングをしてきた中での常識では後者である。前者だと中身をいっぺんにメモリに貼り付けるので、ファイルがばかでかいとかなりメモリを食う。C言語というかなりメモリの扱いにデリケートな言語が長かった私は、プログラムで使うメモリの量にちょっと神経質だ。ファイルの内容を全てメモリに貼り付けるというのはあまり好きではない。いちいちファイルのI/Oが発生しない分高速とは思うが。しかし、私は最近のプログラミング事情からかなり離れてしまった。メモリが潤沢にある今のような環境だと、とりあえず全部メモリに読み込むのは当たり前なのかもしれない。どうなんだろう?

今日は郵便局へ行って県営住宅の収入申告書を出して、ローソンに行ってTwitterのリツイートキャンペーンで当たったLチキを引き換えて来ようと思っていたのに、もうちょっと、もうちょっとしたらと思っていたら昼過ぎになってしまった。妻に「もうすぐ3時だよ」と言われて「は!」という状態に。今は郵便窓口は15時までではないか。もう間に合わない。まあいいや、期日は6月だからまだ大丈夫だ。Lチキの期限は5月25日だから忘れないうちに行こう。というわけで今日もプログラミングで終わった。

なんか面白い動画が流れてきたから載せておこう。ジェニーハイ『ジェニーハイウォッシュ』。「手を洗いましょう」という曲なんだが。ジェニーハイはなんどか載せたが、ゲス極の川谷絵音、吉本芸人のくっきー、小藪一豊、ゴーストライター騒動の新垣隆、中嶋イッキュウのネタバンド。

今作っているプログラムはまだまだ未完成なので、細かい仕様とテスト内容を考えていた。Excelにはいろいろ制限があって、1つのセルに入力できる文字数は32,767文字まで、扱える行数は1,048,586行まで、そして表示できるセルの高さが409ポイントまで。この辺りのハンドリングをしないと、行数が死ぬほど大きかったり1つのトークがめちゃくちゃ長いようなファイルを読み込んだ時にオーバーフローしてエラーになったりちゃんと表示されなかったりする。

まだいろいろ制約や例外はあると思うが、上に書いた中で一番むずかしいのが、セルの高さの制御。この処理をする上でネックなのは、「結合したセルは高さの自動調整ができない」というExcelの仕様である。このプログラムではトーク内容を2つのセルを横に結合したセルに書き込んでいるのだが、それでは自動調整ができないため、結合したセルと同じ幅に設定したダミーのセルにトーク内容をいったん書き込み、そこで高さの自動調整をしてからその高さを取得し、そのセルは削除してから改めて本物の結合セルにトーク内容を書き込んで、先ほど取得した高さを設定するというトリッキーなことをやっている。

ただ、プログラム内ではトーク内で改行した場合、次の行に移って別セルとして出力しているため、改行が多くて縦に長いトークが途中で切れることはない。あくまでも改行なしで打ち込んだトークがいっぱい過ぎてあふれる場合である。1回のトークで改行なしにそんなにたくさん打ち込むやついるのか?と思うが、最近兄や私はPCでLINEをやっており、テキストファイルに打ち込んだ内容やウェブサイトに載っているテキストをコピペして入力することがある。そうすると手打ちではまず入力しないような長い文章が入ることはあり得る。それからPCからコピペした場合、スマホやPCのLINEの入力欄で直接入力できないタブ文字が入ったりする。このタブ文字はトーク履歴ファイルで項目の区切りとなっていおり、本文中にタブが入るとイレギュラーな行になってしまう。これが厄介で、その例外にはできる限り対処したのだが、これのせいでプログラムが必要以上にややこしくなってしまった。

話がそれたが、トーク内容が長すぎてセルの高さが409ポイントを超える(一部隠れてしまう)ときの対処方法としては、

1.トークの内容を分割して複数の行に書き込む
2.複数の行を結合して1つのトークを書き込む

が考えられる。似たような感じだがちょっと違う。トークをダミーのセルに入力して自動調整して得た高さは、入力した内容がオーバーする場合はMAX値409と返ってくる。それ以上広げられないからだ。そこで高さが409と返ってきた場合、

1の場合
トークを半分に分割し、2つのセルに分けて出力する。しかし、あまりにも長くて半分にしてもまだオーバーしたり、その半分にしてもまだオーバーしたり、ということがあり得るので再帰的な処理が必要。ちょっとややこしい処理をしないといけない。

2の場合
セルを縦に結合した場合、それぞれのセルの高さ制限は409ポイントだが、2つのセルだとその倍になる。要は結合しても1つずつのセルの高さ制限は変わらないということ。となると、トーク内容を全部1セルに入れたら本来は高さ何ポイントなのか、その高さがわかったら、全部で何セル分必要かわかるのでその分セルを結合してから書き込めばいい。

と、2の方が簡単そうに思えるのだが、肝心の「トーク内容を全部1セルに入れたら本来は何ポイントなのか」がわからない。あくまでも自動調整して返ってくるのは制限のMAX値409で、どれだけはみ出してるのかわからない。それならもう1つセルを縦に結合して自動調整して高さを取得しては・・・というところで「結合したセルは自動調整できない」という制約に引っかかる。

ということで、久しぶりだが1の処理にチャレンジしてみた。再帰的な処理というのはばしっとはまると驚くほどシンプルなコードで全体のロジックが完成することが多い。数時間かかって、試行錯誤した結果、うん、シンプルに処理することができた。かなり嬉しいのだ。再帰処理を書いたのは久しぶりだな。頭の中ではネストが深くなるとなかなかイメージしにくかったが、こういうときはビジュアル化するに限る。と言うことで絵を書いてみてようやく難所を越えた。こういうのを書いたのも久しぶりだ。

再帰処理のイメージ図

と言うわけで、一歩野望に近づいた。

次はセル内の文字数が32,767を超えた場合の処理をするだが、上の処理だけで十分な気がする。32,767文字もあったら、高さはとっくに409ポイントを超えるよな。

行数が1,048,586を超える場合はどうしよう。見やすくするためトークとトークの間に細い行を挿入しているので、実際にはトーク履歴が50万行以上を超える場合、というようなケースだが、もうそれは「書き込めるところまでしか書き込みません」という仕様でいいか・・・。全部取り込めなかったら自分でテキストファイルを分割してくれ、でもいいような気がするが、実際に50万行のテキストファイルをエディタで開いて半分ずつに保存、とかできるものなのかな(メモリが・・・)。そもそもそんなにLINEするか?私が今年の1月に機種変更してから4ヶ月間に友達とやりとりした履歴ファイルを見ると、5,700行。う~んそんなにあるか。もっとヘビーにLINEをやっててそれが2~3年分とか溜まってたら50万行くらいいくかもしれんな。ただ、そんなでかいファイル処理してたらExcelがハングすると思う。読み込み自体はストリームで1行ずつなのだが、どうだろう。

昨日は23時に寝た。22時半近くまで友達とLINEをやっていたのだが、「もう時間だから寝るね」と送ってから30分くらいなんだかんだやってた。だめだなこりゃ。しかも23時に寝てから30分くらい眠れず、いったん起きてきて牛乳を飲んでチーズを食べて、今日のおやつのチョコまで食べてしまった。そしてPCを立ち上げて何かやろうとした。ますますだめだこりゃ。そこで眠気が来たので寝た。朝は8時半起床。こんな生活リズムになって、作業所に復帰した時にちゃんと通えるだろうか。まあ寝る時間を早めるけどね。

今日は朝からプログラミングの続き。もうできたと思ったのだが、よく考えると最初は自分だけが使うためだけに作ったので、まともにエラー処理も入れてないし、いろんなイレギュラーな場合を想定したテストもやってない。これはいかん、こんなものは公開することはできない。いろいろなケースを想定してエラーハンドリングを入れてちゃんとテストをしないと。Excelはいろいろ制限があるのでそれを超えた場合どうするかとか、あとはテキストファイルのフォーマットがイレギュラーな場合とかいろいろある。これはテスト項目一覧表を作らなければ。う~ん、これは更にプログラムが複雑になる。

と思ってとりかかったのだが、根本的にメイン処理の構造を変えないとだめだな。ちょっと作り直そう。と言うことでがりがりプログラムを書き換えていた。基本的なロジックは変えてないのだが、大きく構造を変えた。ちゃんとした構造じゃないとロジックが追いにくい。プログラムを公開しようと思ったら、変に下手くそなプログラムでは恥ずかしい。

ずっとその作業をやっていたが、今日もちょっとだけローソンへ行ってマルチコピー機で印鑑証明書を取って、Twitterのリツイートキャンペーンで当たったLチキを引き換えて帰ってきた。ローソンの前にポストがあるのを見て、しまった料金不足の切手を貼ったハガキを持ってきて出せばよかった、と思った。このハガキ出さなかったらどうなるんだろう。「配達した郵便物返せ」とか言ってくるのだろうか。さすがにそれはないだろうが、郵便局が損するの?

コンビニのマルチコピー機で公的書類を取ったことのある人が少ないかと思ったので、ちょっとどんな感じか写真を撮ってきたので、紙芝居を載っけてみる。

はじまりはじまり~。まずは「行政サービス」をタッチ。

コンビニでで印鑑証明書

「証明書交付サービス(コンビニ交付)」を選択。もう1つ「戸籍証明書交付の利用登録申請」というのもあるが、これは本籍地以外の市区町村に住んでいて戸籍証明書を取りたいときは、利用登録申請が必要だということだ。私は本籍も住民票も横浜にあるからいいが、異なっていると普通は本籍のある役所へ行くか、郵送で取り寄せないといけない。この利用登録申請をしたらどこにいても取れるのだろう。これは便利だ。

コンビニでで印鑑証明書

なんか出てきたけど、こういうのは全く読まずに反射的に「同意する」を押してしまう。本当はいかんのだが。

コンビニでで印鑑証明書

マイナンバーカードをそこに置けとのこと。

コンビニでで印鑑証明書

置いてみました。

コンビニでで印鑑証明書

置いたら自動的にこの画面に。「お住いの市区町村の証明書」をタッチ。もう1つのは「住所地と本籍違が異なる方が「戸籍証明書」「戸籍の附票の写し」を必要とされる場合に選択してください」とある。

コンビニでで印鑑証明書

暗証番号を入力。特別定額給付金のオンライン申請をしようとして、これを忘れてしまった人が役所に殺到してるとか。

コンビニでで印鑑証明書

カードを取り外すと次の画面に続く。と言うか取り外さないと進まない。忘れにくいような仕組みになっている。

コンビニでで印鑑証明書

必要な書類を選択。今回は印鑑証明書。

コンビニでで印鑑証明書

必要な部数を入力。

コンビニでで印鑑証明書

必要書類と自分の名前が出てくるので確認。手数料は役所で取るより50円安い。

コンビニでで印鑑証明書

これで準備完了。スタートボタンを押すべし。

コンビニでで印鑑証明書

あ、お金入れるの忘れてた。う~ん現金しか使えなかった。電子マネーとかQRコード決済が使えないのはちょっと惜しいな。

コンビニでで印鑑証明書

プリント中で~す。

コンビニでで印鑑証明書

領収書もちゃんと印刷される。

コンビニでで印鑑証明書

終わったら「お忘れものに注意ください」の画面。けっこう大きな音で「印刷物、カード類、釣り銭、領収書をお忘れにならないようご注意ください」というアナウンスがいつまでもいつまでも流れる。「終了する(音声停止)」ボタンを押さないと永久に鳴り続けるという仕様っぽい。これでも忘れる人は忘れるだろう。

コンビニでで印鑑証明書

そんなこんなで今日は終わった。プログラムの改造はまだまだ続くから、当分遊べそうだ。その後はこのブログとは別に、もうひとつ新しいウェブページを作ろう。前に公開したCSVファイルをMicrosoft Moneyに取り込むプログラムも合わせて、自分が作ったプログラムを公開する新しいサイトを作るのだ。いや、サイト自体はこのサイトだけどね。もう1つWordPressをインストールして固定ページで作ろう。

今日もまたリモート収録シリーズの動画を。藤井フミヤ ♪「TRUE LOVE ~ Sound Inn S @HOME Ver. ~」。

昨日は23時15分に寝た。また遅くなった。昨日はプログラミングをやっていたわけではなく、あ、いやちょっとやっていたけど表示される文字のフォントを変えただけである。普通のゴシック体では味気ないので、LINEの画面に似たフォントに変えてみた。で、そのプログラムで作ったExcelで表示したLINEの友達とのトーク履歴を読んでいた。時間が過ぎているのはわかっていたが、もうちょっと、もうちょっと、とやっているうちに23時を過ぎ、ひ~寝なきゃ、と思って寝た。夜はよく眠れたが朝方頻繁に目をさました。7時20分に自然に起きれた。今日は早起き(というほど早くない)。

そのプログラムだが、手前味噌ながらこれはなかなか役立つものを作った(また言ってる)。LINEの画面で昔のトークを表示させるのはめんどくさいし、一度閉じるとまた上に遡る作業をやり直しだが、Excelにしてしまえばファイルを開けばいつでも履歴が見れるし、読んだところまででその辺のセルを選択して保存したら、次開いたときはそこから続きを読める。最近友達がちょっと悩んでいるというか困っているといる状態で、ここ数ヶ月頻繁にLINEのやり取りをしていたのだが、なんかアドバイスしたり一緒に解決策を考えたりできないかなと、なにかヒントがないか読み返していた。それにしてもコロナがなあ。いろんなところに影響が。

Pontaからメール。ポイントのお知らせだが、3,000ポイント以上あった。そうだ、パッチョポイントがたまってきたので3,000ポイントをローソンのPontaポイントに交換したんだった。

Pontaポイント

パッチョポイントというのは東京ガスのポイントで、電力会社を東電から東京ガスに変更してからたまり始めた。少しは電気代が安くなると言われたが、正直変わってない。まあ増えてないからそれでいい。このガスと電気のセットで「生活まわり駆けつけサービス」という、水道のトラブルや鍵がなくなったとかのトラブル時に無料で対応してくれるサービスがついているので、どっちかというとそれが目当てか。2年くらいでようやく3,000ポイント貯まったよ。

と言うことでポイントでお買い物をしようと、お昼ごはんを買いにローソンへ。お昼ごはんはお弁当にすることにして、私はつけ麺、妻はとろろそばを買って、ツイッターのリツイートキャンペーンで当たったLチキも引き換えて、チュッパチャップスの無料クーポンも引き換えて帰ってきた。ラーメンが食べたいと思っていたが、見事に温かい麺類は1つもなかった。

つけ麺

Lチキ

チュッパチャップス

正直チュッパチャップスはいらんのだが、まあくれる物はもらっておこう、というわけで口に含んで舐めていた(貧乏性)。

午後もなんかだらだら過ごした。午前中の続きでLINEの履歴をExcelで読んだり。まあ今日は天気も悪いし、ローソンにも行ったからまあいいのだ。その後は、先の記事で書いた、自分が作成したプログラムを公開するページを作っていた。う~ん、VBAだけ書いて、「これをExcelで実行してちょ」とやるのはあまりにも不親切だな。「マクロってどこに書くの?」という人が多いだろうから、1つずつ解説を書いていかないと。

今日も昨日までと同じリモート収録シリーズの動画を。渡辺美里 ♪「時代 ~ Sound Inn S @HOME Ver. ~」。まわる~まわる~よ~じだい~は~まわる~。