5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

タグ: プログラミング

  • Bitbucketの支払い明細がよくわからないからGitLabに乗り換えた話し

    今の仕事でPDFファイルとか画像ファイルがたくさんあるサイトの世話をしているのだけど、このサイトをgitでバージョン管理している。プログラムソースではなく、HTMLファイルとか画像もgitでバージョン管理していると何かと便利なのである。やはり、先祖返りを起こさない(複数でサイトアップしてしまっているから、厳密には難しいけど)し、昔のページに戻してとかの話しもたまにあるので、gitで管理するのはいいのである。

    さて、今まで使っていたのはアトラシアンのBitbucketだった。LFSで4GB近くのバイナリもレポジトリに入れていた。そうなると、無料プランでは無理で、有料のStandardプランのライセンスを購入していた。特にBitbucketの機能には不満はない。サーバーの運用も任せられるので安心して利用していた。

    しかし、メールで送られてくる支払いの明細をみたら疑問が出てきた。支払いのメールアドレスとBitbucketのログインのアドレスと違っていた。こちらは、運用のアドレスと請求のアドレスが別に登録されているかと思ったら違っていた。こちらは自分が悪いのだけど、2つのアドレスをBitbucketに登録していた。不思議なのは、請求のあったアカウントには有料プランのWorkspacesを所有していない。請求されていない方のアカウントに有料プランを登録しているWorkspacesが存在している。これはどうしてか?

    この辺りのWorkspacesって何かから調べて、アトラシアンのサポート担当者に聞いてみる。翌日の早い回答をくれたが、その回答はよくわからない内容だった。何かWorkspacesとクレジットカード記入と契約担当者の関係とかの、自分では理解できない難しいことを言っていた。

    この辺りは、既に理解不能に陥っている。そもそも、Bitbucketに登録したときにはWorkspacesなんてなかったので(昔だとTeam?)、Workspacesと課金の関係から理解しなければいけないようだ。でも、課金の体系が変更になるのであれば、丁寧に説明してくれないと困る。

    また別件の話しになるのだが、請求は毎月$15されている。レポジトリに5人のアカウントで使っていたので、$3×5人で$15だと思っていたら、実は違っていたようだった。アトラシアンのサポート担当者によると、Standardプランの最低限価格は$15ドルだそうだ。

    しかし、こちらのWorkspacesの設定からリンクされている料金表を見て1ユーザー$3と思い込んでいた。

    サポート担当者の説明だと、本来ならこの表の上にスライダーで人数を入力して価格シミュレーターがある価格表があるのだそうだ。価格シミュレーターだと1~5人でも$15になるそうだ。こちらを見てくれと言われた。

    おいおい、これはよくわからないぞ。重要な情報である価格表でこれでいいのか? 価格に関するすべてのページに、この価格シミュレーターが必要ではないか? だったら、大元の価格表だけにしないと、自分みたいな勘違いする輩が出るのではないのか?

    ついでに請求書もわかりにくい。Workspacesごとに有料プランに登録できるらしいけど、請求書の明細には有料プランではないWorkspacesも載っている。しかも、なぜかすべてのWorkspacesは載っていないという訳のわからなさ。どういった理由でWorkspacesを選択しているのか?

    だんだんBitbucketを使っていくのはめげてきた。課金体系には明確さが重要である。アトラシアンには不信感が残ってしまった。

    ということで、Gitのレポジトリサービスなんて、Bitbucket以外にもいろいろあるしねということになった。どのGitのレポジトリサービスにしようかと考えたら、QNAPのコンテナサービスにGitLabのDockerコンテナで実現することにした。こちらはGitLab公式のコンテナを使って簡単に動かした。最初からGitLabをインストールするなんてRubyの云々でいろいろトラブル起こすのが目に見えているので、簡単確実にGitLab公式のコンテナを何も変更せずに利用する。レポジトリの移行は、BitbucketからPullしてGitLabにPushすれば、こちらも簡単である。

    移行後は、Bitbucketの有料プランのWorkspacesに登録しているレポジトリを削除してStandardプランをFreeプランに忘れずに変更しておく。アトラシアンのサポートによると、これをやっておかないとユーザーをWorkspacesから削除してもそのまま課金されるそうだ。ただし、Workspacesの削除の仕方がわからなかったので、何もレポジトリが存在しないWorkspacesをそのままにしている。

    課金以外のBitbucketは満足していたけど、今回の件は残念だった。海外のサービスを自分のようなヤツが使うのは難しいのは実感した。だけどEvernoteとかDropboxとか使っているけどな。

    だけど、自分のところのQNAPでGitLabを動かすと、メンテナンスとか自分でやらないとけいけないので大変なのである。もっとわかりやすい料金体系のGitのサービスを探そうかな。

  • PlantUMLのアクティビティ図でrepeatのbackwardキーワードと動線が正常に出力されない話し

    今やっている業務の作業フローがこんがらがってきたので、整理しようと思って図に書き出してみた。この際、きれいに出力しようと思った。

    最初はInkSpaceで一から書いていこうとしたが、箱を3つ書いたみたところでめげた。次にやったのは、VS Codeの拡張機能で動くPlantUMLのアクティビティ図である。PlantUMLはInkSpaceやIllustrator、Visio、LibreOfficeのDrawのようなドローアプリケーションで図を描く必要もなく、テキストで描いていけば自動的にアクティビティ図(それ以外のUMLの図でも)を描いてくれる優れものである。

    PlantUMLのアクティビティ図には動線の機能があるので、自分とお客さんの役割を分担した上での業務フロー図が描けそうなので早速描いてみた。動線とはこのような図である。PlantUMLのサイトからの抜粋である。

    これをPlantUMLのアクティビティ図のコードではこんな感じである。

    @startuml
    |Swimlane1|
    start
    :foo1;
    |#AntiqueWhite|Swimlane2|
    :foo2;
    :foo3;
    |Swimlane1|
    :foo4;
    |Swimlane2|
    :foo5;
    stop
    @enduml

    これは簡単と、このまま進めていったら、問題が発生。フローを戻したりが自由にできないのでした。

    PlantUMLではシーケンス(順序)、判断(IF)、前後判定の繰り返し(repeat)くらいの昔流行ったgoto文を廃止した構造化プログラミング(例外的にgoto文は残っているけど)のプログラム制御しか用意されていない。今回は、例えば、処理後に判定してNGだったら、何かしらの処理をしてから、また元の処理に戻すなんてことをやりたい。これを考えてみると、後判定の繰り返しで、判定でOKになるまで繰り返す。繰り返す前にNGのメール送信処理を実行したい。これは判定後の処理で書いてみるとこのような感じになる。

    @startuml
    start
    
    repeat
      :何かの処理;
      backward:処理NGメール;
    repeat while (処理判定?)
    :処理OKメール;
    stop;
    @enduml

    出力されたアクティビティ図はこのような図になる。

    次に担当Aと担当Bに役割を振り分けるように動線で表現してみる。処理は担当Bが行って、その処理が正しく行われたかの判定とその結果のメール送信は担当Aとなる。担当BはNGメールが来たら再度何かの処理を行う。

    @startuml
    |A|
    start
    |B|
    repeat
      :何かの処理;
      |A|
      backward:処理NGメール;
    repeat while (処理判定?)
    :処理OKメール;
    stop;
    @enduml

    これを出力したアクティビティ図はぐちゃぐちゃになる。PlantUMLのサイトにあるライブプレビューでも同じ結果である。ライブラリは一緒なのかな?

    まあ、このようはフローはアクティビティ図からいうと変則的な図だと思うからPlantUMLではサポート外である。何かいい書き方があるのかな?

    仕方ないので、SVGファイルに一旦出力して、出力したSVGファイルをInkSpaceで開いて手で修正した。

    でも、このような処理を通常のプログラミングでどうやっているか考えてみると、処理を無限ループで回して最後に判定し、OKならbreakで無限ループから抜け出している。PlantUMLではbreakが書けないしな。

    そもそもPlantUMLのアクティビティ図の書き方は新しく変わったみたい。いまだベータ版となっている。昔と比べてだいぶメンテナンスしやすくなったみたい。ただし、いろいろと制約が増えてしまったようでもあるらしい。

    著:株式会社フルネス 尾崎惇史
    ¥2,587 (2025/04/01 14:32時点 | Amazon調べ)
    著:竹政 昭利, 著:林田 幸司, 著:大西 洋平, 著:三村 次朗, 著:藤本 陽啓, 著:伊藤 宏幸
    ¥3,191 (2025/04/01 14:32時点 | Amazon調べ)

    追記

    PlantUMLのフォーラムを覗いていたら、どうやらループでbreakができるらしい。ドキュメントに載っていない。新しい構文らしい。

    こんなコードを書くと、

    @startuml
    start
    
    while()
      :何かの処理;
     
      if (処理OK?) then (yes)
        break
      else (no)
       :処理NGメール;
      endif
    
    endwhile
    :処理OKメール;
    
    stop;
    @enduml

    こんなアクティビティ図が出力される。

    これに動線をつけてみると、

    @startuml
    |a|
    |b|
    
    |a|
    start
    
    |b|
    while()
    
      :何かの処理;
     
      |a|
      if (処理OK?) then (yes)
        break
      else (no)
        :処理NGメール;
      endif
    
    endwhile
    
    :処理OKメール;
    
    stop;
    @enduml

    このような惜しい感じになる。もう一歩足りない。

    やはり、動線はまだ上手く動いていないのか? それとも正しい書き方があるのかな? だったら、教えて欲しいわ。

  • ThinkPadの携帯ネットワークが不安定なので、いろいろ解決策を講じた話し

    まだまだThinkPadの携帯ネットワークが不安定である。これはThinkPadを買ったのが失敗したかと思った。わざわざWAN対応でカスタマイズしたのにな。

    と、言ってられないので再度対応を考える。レノボのサポートサイトに行っても快活方法は見つからない。Q&Aのサイトはあるけど、サポートはユーザーコミュニティでやっているみたい。

    ここから余談。

    レノボにすればサポートは、「何かあったらユーザーコミュニティで質問しろよ。詳しいパワーユーザーが答えてくれるぜ。」って感じなのかな。しかし、パワーユーザーっていうのが曲者で、回答内容を見てみると、「あんたの質問内容じゃあ情報が足りない。」とか「あんたの質問は何を言っているかわからない」とか「そのそもこのコミュニティで質問するべきことではない。」とか、初心者からだと凹むような回答が多い。しかもこんな回答とするのが上位の回答数のユーザーと来たもんだから始末が悪い。

    まあ、こんなユーザーコミュニティに頼らないで、自力で解決しなければいけないかと思ってしまったりする、これはレノボによる”ユーザースキルパワーアッププログラム”かもしれないな。

    さて話しは戻るが。

    結局、今のところの解決策として、最新のWANドライバをアップデートすること。2018年7月24日リリースのワイヤレスWANドライバにアップデートしておいた。とりあえずこれでまたまた様子を見ておく。

    ドライバの置き場所とかは以下のレノボのサポートサイトで

    自分のThinkPadの必要なドライバは、ここのリンクからダウンロードできるようだ。あらかじめレノボのユーザーアカウントを作成して、自分のThinkPadをマイプロダクトに登録すること。登録まで多少わかりにくくて手間取るかもしれないけど、がんばって登録してね。

    ダウンロードサイトでドライバの自動更新ができるみたいだけど、あらかじめLenovo Service BridgeというThinkPadのシリアルナンバーとか中身をスキャンするソフトをインストールする必要がある。しかしながら、あらかじめインストールされていても、どういう訳かLenovo Service Bridgeが起動してくれない。そのときは、仕方ないので一度Lenovo Service Bridgeを削除してから再インストールしたら無事にスキャンが始まった。

    ThinkPadは何かあったら解決が難しいと痛感した。まだまだ問題があるかもな。

    追記(2018/07/31)

    やはりWANでつながらない。つながっているけどスリープから復帰したときとか、明示的に携帯ネットワークをOFFにするとつながらなくなる。携帯ネットワークでつなぐためには、ThinkPadの再起動が必要になる。再起動すれば、二回に一回はつながるようになる。

    さて、Lenovoのサポートをお願いしようかとサポートサイトに行ってみると、連絡先の電話番号が見つからない。自分のThinkPadを登録したマイプロダクトのぺーじには、ユーザーコミュニティと有償サポート、国際サポートのリンクしか出てこない。散々探してみると、どうやら購入後30日しかレノボからテクニカルサポートを受けられないようだ。30日以降は有償になる。とにかくレノボのサポートサイトはわかりにくい。Q&A情報からは必要な情報を取得できなかった。

    どうやらレノボは技術的なユーザーサポートは、ユーザーコミュニティに任せてしまっているようだ。ユーザーコミュニティを覗いてみても、そんなに満足できるような回答をされていない。レノボもこのユーザーコミュニティはレノボが運営しておらず、レノボからの回答ではないと謳っている。これではThinkPadを買ってもあとでトラブルがあっても正常に戻すことは一般の人では難しいかもしれない。

    追記(2018/08/31)

    携帯ネットワークにつながらないときの対処方法の一番は、ThinkPadを再起動することしかなさそう。こんなバカなことがあるかは置いておいて、これはどこに相談するかが問題。Lenovoか? Lenovoのユーザーコミュニティか? それともSIMカードを出しているOCNか? いずれも知らないと言われそう。

    最初からWAN対応なんてThinkPadを買わなければよかったと後悔している。そもそもThinkPadを買わなければよかったのかな。携帯ネットワークにつながらないこと以外は、ThinkPad Carbonを気に入っているのだけど。

  • Visual Studio Codeでgit pullできない話し

    VS CodeのMarkdownのプレビューが楽ちんだしまともだったのでPHPの開発環境を移してみる。今まで、EclipseとかNetBeansとか使っていたけど、VS Codeのほうが軽くてよろしい。

    デバッグは、今までXdebug の設定はNetBeansのときにしていたので、サーバー側は何も変更せずにPHPのデバッグのExtensionをインストールすればできた。デバッグをどうやって始めればわからなかったけど、ブラウザでデバッグしたいページにアクセスすればよかったのね。こちらは解決。あとはリモートのサーバーでデバッグをできるかどうか。

    しかし、Gitで問題が発生。ロカールのレポジトリのコミットとかはうまく行くけど、Bitbucketとかのリモートレポジトリへの認証でエラーになる。おそらくプライベートキーの設置がうまくいっていない。プライベートキーをホームディレクトリの.sshに置いたり、Pagentに設定していても、

    Permission denied (publickey).
    fatal: Could not read from remote repository.

    となるのでした。やはり、GitだけはVS Codeでするのはやめて、別でやろうかな。

    あとVS Codeで気になるのは、保存しないと構文チェックをやってくれないこと。これは何か設定が悪いのかな?

    Embedded Link

    Visual Studio Code

    View this post on Google+

  • LibreOfficeがアップデートできなかった話し

    久しぶりにLibreOfficeを使ったらアップデートしろと出てきたので、ダウンロードしてアップデートしてみる。だけど、アップデートできない。

    何か管理者権限が必要と出てくる。何回かインストールしてもダメ。コントロールパネルのプログラム一覧からは消えているから、アンインストールまではやってくれている。だけどLibreOfficeのインストールプログラムはアンインストールをしようとしている。

    面倒だけどWindows10を再起動してみる。今度はうまくインストールできた。

    でも、アップデートを失敗してからPCを再起動してあげないとインストールできないなんて大丈夫なのか? みんなこれでLibreOfficeを使うのはめげるのではないかな。私のところだけの現象だったらいいけどな。

    まあ、今はマイクロソフトのOfficeに乗り換えてしまっているので、こちらとしては大丈夫だけど、今まで書いていたLibreOfficeのファイルもWordで読めるしな。

  • WordPressの不要なプラグインは無効ではなくて削除するのです、という話し

    借りているサーバーに負荷が高かったの原因を調べてみたら、postfixのバウンズメールが原因だった。ほとんど使っていないドメインからのアドレスから送信していた。しかも、メールアドレスも知らないアドレスだった。スパムメールの踏み台にされていた。

    postfixを停止させても、メッセージキューにどんどん溜まっていく。postfixは送信専用にしているから受信はしていない。リレーされている訳ではないようだ。何かやられて不正なプログラムを起動しているかと思っても、cronの設定も変なところがない。

    送信しているアドレスのドメインが設定されているApacheのログを見てみると、外部からプラグインの下にあるプログラムを実行しようとアクセスしていた。IPアドレスを調べると中南米からだった。

    実行されているプラグインは、WordPress Automatic Upgradeという今はメンテナンスもしていないプラグインの中からだった。こちらは無効にしてただけど仕込まれたプログラムが実行されていた。

    WordPress Automatic Upgradeプラグインを削除しておく。すると今度はメッセージキューが溜まらなくなった。念のため、そのWordPressのサイトはメンテナンスにしてmod_writeでエラーページを出すようにしておく。Apacheのアクセスログを見ていると、いまだにしつこくアクセスをしている。今度はTinyMCSのプラグインを不正にアクセスしている。

    今回は更新もしていない、ほぼ休止中のWordPressのサイトだったけど、WordPress本体とプラグインは定期的にはアップデートをかけていた。しかし、WordPressのプラグインは、必要なくなったら無効にではなくて削除すること。インストールするプラグインも何かあったらアップデートしてくれるような新鮮なプラグインで、必要最低限をインストールしないと危ない。ただでさえもWordPressのサイトは狙われやすいですから。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

  • IEのせいでWindows10 へのアップグレード保留をしている話し

    これでWindows10にアップグレードができると書きましたが、念のために別のWindows10 のPCからVPNのクライアントの接続を試してみました。結果は接続できないPCが出てきました。

    試した2台はWindows10だけどHomeエディションだからダメだと思って、娘が使っているレッツノートがWindows7のProfessionalでIE11だから、これなら大丈夫だろうと思いましたが接続できません。VPNで接続する前にホストチェッカーではじかれます。設定条件は接続できているIEと同じにしてはずなのに接続できません。VPNのホストにアクセスすると、最初にActive-Xとかプログラムとかダウンロードしてきますが、何かうまく必要なプログラムがインストールされてきません。これが原因かもしれません。

    一番の原因はサーバー側のVPNの構成がわかっていないことなのですけど。

    これはWindows10にアップグレードしないほうがよさそう。お客さん側のシステム担当者には、IEもアップデートしないようにと言われているし・・・。

  • WordPressの固定ページの中に投稿最新一覧を表示させた話し

    お客さんのWordPressサイトでカテゴリごとに投稿の最新一覧を表示している固定ページがあります。いい加減手作業で更新するのも面倒になってきましたので、プログラムで対応します。

    Googleさんに聞いてみるとショートコードを登録して呼び出すようなことをみなさん書いています。何と皆さん出しているPHPのコードはすべて同じです。所謂コピペ記事です。何か気持ち悪い状態になっています。さて、誰がオリジナルなんでしょうか?

    しかしながら、WordPressって固定ページ内にPHPのプログラムを書けないのでしたね。今ごろ気が付きました。

    そのコードをコピペしてもいいのですが、2つのカテゴリの記事一覧を表示したいので、2つコピペしなければいけませんし、第一コピペコピペで気持ち悪いです。パラメーターを渡して切り替えなんて改造すればいいのですが、それも面倒ということで、何か別の方法を探します。

    What’s New Generator というよさげなプラグインが見つかりました。早速インストールして試してみます。しかし、カテゴリのフィルターが1つで固定されてしまうので、2つのカテゴリの最新一覧を並べることができません。惜しいですが、これではありません。

    次に当たったのは、Shortcodes Ultimateです。基本的にショートコードでWordPressのいろいろな部分にアクセスできるのですが、今回は投稿のカテゴリ別にタイトルだけを最新3件の記事を一覧に表示します。

    具体的には、

    [su_posts template="templates/teaser-loop.php" posts_per_page="3" tax_term="8"]

    なんて書いてしまいます。出力されるタイトルがHTMLのコードのh2タグで吐き出してしまいますので、この辺りは本当なら修正しないといけないのでしょう。CSSで指定してデザインを合わせて作業完了です。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

  • Eclipseに戻したのは何だっけ?という話し

    そろそろ新しいプロジェクトの開発を始めなくていけないのですが、開発環境の見直しをする。PHPのプロジェクトなんだが、最近はEclipseのPDTにしていた。その前は、NetBeansで作っていた。また、その前はEclipse PDTだった。

    そう言えば、NetBeansからEclipseに何で戻したんだっけ? 忘れた。何か理由があったんだっけ?

    自分のブログを読み返しても書いていない。NetBeansで異常終了するようになってしまい解決したけど、何て書いてあるけど、これは違うな。

    そういう肝心なことはチャンと残しておけよ。> 自分

    View this post on Google+

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • サーバーで動くメールフォームを調査した話し

    メールフォームは有名なPerlライブラリを使っている。どうしてPerlかというと、お客さんのサーバーがPerlのCGIしか動かないという理由から。

    しかし、メールサーバーは外部のサーバーを使わなくてはいけないということで、メール送信の処理は私のほうで適当に改造している。このPerlライブラリはsendmailしか使えないということから。

    このたび、めでたくお客さんのサーバーでPHPも動くようになりそうということで、PHPのメールフォームを簡単に確実に作れるかという調査を開始。いまさらガリガリPHPのプログラムを低レベルから書きたくないし、データベースも使わないようなものにCakePHPのようなフレームワークを使うのも大袈裟だしということで丁度いいいメールフォームが作れないかということ。

    今回jQuery-Validation-Engineという、よさげなものを見つけた。メールフォームって入力チェックが肝になりそうだから、バリデーションが簡単にできそう。

    STUDIO KEY「jQueryでメールフォームをノンリロードで処理する」 (リンク切れ)
    http://studio-key.com/tips/jquery-mailform-01

    メール送信の処理を何とかしなければいけないのだけど、Slimなんかの軽量フレームワークを使ってみるかな。

    View this post on Google+

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)

    追記(2021年4月22日)

    実際にはGoogleフォームが現実解かもしれない。ただし、お客さんによっては、情報を外部に格納したくないなんてあるから利用できないかもしれない。