カテゴリー
システム関連

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になるそうだ。こちらを見てくれと言われた。

https://bitbucket.org/product/ja/pricing

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

ついでに請求書もわかりにくい。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のアクティビティ図の書き方は新しく変わったみたい。いまだベータ版となっている。昔と比べてだいぶメンテナンスしやすくなったみたい。ただし、いろいろと制約が増えてしまったようでもあるらしい。

追記

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

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

やはり、動線はまだ上手く動いていないのか?

カテゴリー
その他

コストコでタイヤ交換してきた

そろそろタイヤ交換しなければいけないと書いたけど、ようやくタイヤ交換をしてきた。

交換しに行ったのはコストコ。近くのカー用品店に行ってみたけど、安さより簡単即決、電話での説明が丁寧でよかったコストコにした。近くのカー用品店は、ピットがいっぱいで予約もとれないし、係の人は忙しいそうだから雑に対応してくれるしな。

コストコの担当者は、こちらの希望を聞いてくれて、ピレリ、横浜、ミシュランといろいろとタイヤを紹介してくれた。結局は性能よりも値段を優先してミシュランにした。タイヤ交換の予約をして完了。

MICHELIN ENERGY SAVER +

今履いているタイヤは特殊なサイズらしくて取り寄せになった。入荷したら確認の電話を入れてくれるそうな(実際に電話があった)。

交換当日は、コストコの駐車場の奥の方にあるタイヤセンターに行く。予約は自分一組でガラガラ。タイヤを交換している間はコストコで買い物する。

1時間ほどでコストコ店内で交換完了の電話をもらう。いつものように買い物カートを駐車場まで押して、そのままタイヤセンターでクルマを引き取っておしまい。

コストコでタイヤ交換をすると、買い物クポーンが8,000円もらえて実はカーショップでタイヤ交換をするよりもお得になるかも。それに窒素の空気圧点検とか、前後タイヤのローテーションとか、簡単なパンク修理も無料だそうな(今のクルマはスペアタイヤがなくなっているから、パンクしたときにコストコにどうやってクルマで行くかは問題だけど)。いまなら、そんなに待たずに作業してくれるらしい。暇なのかな?

ついでにコストコのタイヤセンターのスタッフによると、ミシュランタイヤは、気に入らなければ(このタイヤは感覚的にイヤでもOKだそうだ)60日の全額返金保証プログラムというのもやっているそうな。でも、返金なんで面倒なのでやらないだろうな。

ミシュランの全額返金保証プログラム

コストコのタイヤセンターの作業内容をスタッフの人に聞いたら、タイヤの交換以外にバッテリーの交換もやっているそうな。だけど、オイル交換をこのコストコでやっていないのは残念。他のコストコの倉庫ではオイル交換OKとかガソリンスタンドもあるのにな。

今回の教訓。タイヤが高くなるからインチアップなんてしないで、純正タイヤのままにしたほうがいいよ。今度クルマを買う自分に言っておく。

カテゴリー
インストール システム関連

ThinkPadの携帯ネットワークが不安定なので

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

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

ここから余談。

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

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

さて話しは戻るが。

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

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

https://support.lenovo.com/jp/ja/solutions/ht117260

自分の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を気に入っているのだけど。

カテゴリー
その他

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のサイトは狙われやすいですから。

カテゴリー
システム関連

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で指定してデザインを合わせて作業完了です。

カテゴリー
Google +

Windows7のWindows UpdateでIE10をアップデートは失敗

今WIndows7を使っていますけど、FacebookでIE10がWindows Updateで更新できるという情報があったので更新してみた。

予想通り更新失敗。

Windows7にはIE8をいまだに使っている。どうしてもIE9にアップデートが失敗する。IE10が出てきたので、これで9を飛び越えて10にしようかと思ったけど予想通り。PCのディスクを初期化して、Windows7を再インストールしない限り、IE8のままなのだろうな。

でも、IEは使っていないからIE10が使えなくても困らないのが正直のところ。サイトの動作チェックでしか普段はIEは使っていない。ChromeとFirefoxを使い分けている。IE10は、VirtualBoxの上に動かしているWindows8でテストできるし、他のPCでアップデートすればいいので。

しかし、IE10と一緒にセキュリティ更新プログラムをインストールされたけど、Chromeの拡張機能や設定はすべて飛ばしてくれました。まあ、Chromeのアカウントの同期機能ですぐに元通りになったけど、これはちょっと困ります。

Google+: View post on Google+

カテゴリー
アマチュア無線

ADIFのマルチバイト対応は難しい

アマチュア無線のログデータを交換するデータ形式にADIF(Amateur Data Interchange Format)というものがあります。趣味のプログラムでインポートクラスライブラリをPHPで作成してみました。

ADIFでは

Head Data Head Data Head Data
<eoh>
<call:6>WN4AZY<band:3>20M<mode:4>RTTY<qso_date:8>19960513<time_on:4>1305<eor>
<call:5>VK9NS<band:3>40M<mode:5>PSK63<qso_date:8>20101022<time_on:4>0111<eor>

のような形式になります。元々の仕様は、シングルバイトしか考えていないようなので、こちらに日本語を含んだマルチバイト文字を設定すると対応が難しくなります。見ての通り、コロン(:)の次にはデータ長が入ります。例えば、日本で一番使われている某ログソフトではシフトJISしか考えていないので、日本語を含んだコメントは

<comment:6>テスト

のようにマルチバイト文字は2バイトで出力されてしまいます。しかし、UTF8上では、2バイトに限らないので、このデータ長での指定は使えません。<>の区切り文字で解析していくことになります。コメントに<を使われたりすると、値の終了がどこだかわからなくなってしまいます。シフトJISのまま処理しようすれば、マルチバイト文字の2バイト目に<を使われれば難しくなります。

ADIFのドキュメントを読んでも<>:のような区切り文字をエスケープすることは記述されていませんので、どうしてもデータ長で値を読み込んで行くのでしょう。

某ログソフトのADIFのエクポートが、

<comment:3>テスト

のように、文字数で出力してくれればいいのにと思うのですが、昔のシフトJISを基準にしているので無理だろうなと思うのでした。後はADIFのバージョン3に記述されているXMLベースのADXファイルフォーマットに期待です。