「 技術ネタ 」一覧

2018年8月22日

昨日に続いて仕事でJenkins構築。

Pipelineを初めて使ってみたけど、ビルドのフローが可視化できて割といい感じ。
フローの途中のジョブからパラレルで実行することもできる(昔からできてたかもしれないが)。

Pipelineで使えるgroovyのコマンドがいまいち分かりづらいものがあったり、できることできないことがありそうな感じはするけど、最悪はシェルスクリプトでやればなんとか。

水曜なので残業なしで帰宅してから、Giteaを触ってみる。Gitlabのオンプレ用よりセットアップも簡単で動作も速い。これを仕事で使うことはおそらくないけど、こういう選択肢もあるのかという知見。

いろいろやっていたらすぐに時間が経ってしまいいつもの睡眠時間。
平日は4時間くらいしか睡眠時間が取れてないのでもう少し取りたい。


2018年8月21日

仕事で思うところがあり、久しぶりにJenkinsの環境を構築。

2,3年前と比べてUIが少しわかりやすくなったような気もするけれど、設定の面倒さは変わらず。

設定の自由度が高い分仕方ないのだろうけど、最初にビルドタスクが通るようにしたりテストとかのタスクがきちんと動くように持っていくまでが手間がかかる。

実行時のパーミッションが違うとか、SCMからチェックアウトしたままの状態ではビルドが通らない(Makefileとか設定ファイルの変更が必要)から、チェックアウト後に修正済み設定ファイルを上書きするとか、別プロジェクでビルドしたファイルが後工程で必要になるとかいろいろ。

オンプレで使えるCIツールはJenkinsの一人勝ち?なのは変わってないのかな。
いまの時代は外部のCIサービスを使えってことなのだろうけど、当然我々のようなSI仕事の場合はセキュリティポリシー云々で外のサービスは原則使えないので。


個人で開発する時のサーバに悩む

個人開発者向けサーバ環境の選び方まとめ(heroku,aws,firebaseなどなど)

↑の記事にあるように、個人でちょっとお試し開発したいときのサーバの選択肢は意外と難しいように思う。

自分が作ったサービスとかを公開するつもりなら別だけど、自分しか使わないとかちょっと実験的な使い方だと使う頻度も高くないので

・できれば安く(数百円、高くても月1000円以内)
・でもある程度自由が効く(ソフトのインストールができる)
・対応言語が多い(今はpythonが動いてくれればいいかな)
・DBも使える(しっかり使うわけでもないので軽く使えればOK)

という感じ。

勉強として考えるとAWSとかAzureあたりを触っておくのがいつか役に立つかもしれないけど、どうしてもこのあたりはVPSとして使おうとすると割高になるように思う。
(スモールインスタンスやサーバレス環境があるのは知ってるけど、一通りのVPSとして使うとなると)

いまは、このブログのレンタルサーバとしてエックスサーバー、VPSはDTIのServersMan@VPSを契約している。

ServersManは月500円でメモリ1GBと安くてスペックもそこそこだけれど、管理画面が貧弱というか無いに等しいのと、選択できるOSが古めのしかない、VPSサービスの改善やアップデートが数年単位で止まっているように見えるのが少し不満なので、どこか良い所があれば乗り換えたい。

今の時点ではいろいろ見てみて、Conohaあたりを検討中。サーバスペックは落ちるけど現在進行系でサービス内容がアップデートされているところが良いかなあと。


最近触っている技術

後の自分のためにメモ。
2018年8月時点ではだいたいこんなことをやっている。

・仕事はC++メイン。テンプレートをゴリゴリというより割とシンプルなクラス構成のもの
・ただし開発環境がC++11もフルで使えないくらいのコンパイラバージョンなので少し面倒

・勝手にPythonの勉強も兼ねて開発用ツールを作っている。PythonでCUIツールだったり、Python + FlaskでWebアプリだったり(勝手に作っているとは言っても作ったものはチーム内に公開してる)
・LeafletやGoogleMap APIも入門レベルでは使えるようになった
・CSSフレームワークはBulma。簡単な分、少し手の届かないところもあるがあまり不満はない
・JS関係はVue.jsでSPAを見よう見まねで。ただしVue.jsのコンポーネントは勉強できてないので作れない
・DBはPostgreSQL。ただこれはデータストアのために使っているだけなので、そこまでDB自体を弄り倒してない
・SCMはチームはTFSやSVN。手元では一人ローカルgitで開発ブランチ切ったりして少しだけ導入してる


Subversionのコマンド結果(svn logなど)をXML形式で取得する

つい最近まで知らなかったのでメモ。

ソースコードのバージョン管理と言えば今ではgitがトレンドだけど、仕事先ではまだまだSubversionだったりマイクロソフトのTeam Foundation Serverだったりで、おそらくgitを使っているチームはほとんど無いのではないかと思う。

そんな中、Subversionのコミットログをプログラム上で扱いたいと思うことがあり、いろいろと方法を探していた。
最初はSubversionの言語バインディング(API)を使うしかないのかな、と調べてみたけれどJavaとCしかまともにサポートされてなさそうな雰囲気だったのと使い方が面倒そうで保留。

次にSubvertionがリポジトリとやり取りしてるプロトコルを喋れないかと調べてみたけれどこれも仕様がよく分からず、WebDAVだとどうかな?と見てみてもSubversionのサーバー構築の情報はたくさん出てくるけれど、あまり情報が無くてこれも保留。

※いまこのブログを書いてる途中に調べてみると、WebDAVのプロトコル仕様は公開されている様子。時間があればこちらも調べてみる。

で、何気なくsvn logコマンドのリファレンスを眺めていたら"--xml"というオプションがあるのを発見。

通常のsvn logコマンドだとこんな感じの出力(一部省略)だが、

# svn log -l 2 http://svn.apache.org/repos/asf/subversion/trunk
------------------------------------------------------------------------
r1801108 | philip | 2017-07-07 05:56:14 +0900 (金, 07  7月 2017) | 24 lines

Add exception checks to some of the JavaHL native code to avoid JVM
warnings about JNI problems of the form:

  WARNING in native method: JNI call made without checking exceptions when required to

------------------------------------------------------------------------
r1801012 | danielsh | 2017-07-06 19:19:47 +0900 (木, 06  7月 2017) | 3 lines

* tools/dist/templates/rc-release-ann.ezt,
* tools/dist/templates/stable-release-ann.ezt:
    Fix a copy-pasto in these templates.
------------------------------------------------------------------------

--xmlオプションをつけると

# svn log -l 2 --xml http://svn.apache.org/repos/asf/subversion/trunk



philip
2017-07-06T20:56:14.167594Z
Add exception checks to some of the JavaHL native code to avoid JVM
warnings about JNI problems of the form:

  WARNING in native method: JNI call made without checking exceptions when required to



danielsh
2017-07-06T10:19:47.297427Z
* tools/dist/templates/rc-release-ann.ezt,
* tools/dist/templates/stable-release-ann.ezt:
    Fix a copy-pasto in these templates.


とXMLで出力される。

これなら標準入力でXMLを受け取ってパースすればどうとでも扱える。プログラム内からsvnコマンドを直接実行するのでセキュリティ的にどうこうはあるかもしれないが、個人が使うちょっとしたツールではあまり問題にならないだろう。

svn logコマンド以外にもsvn info や svn status など--xmlオプションを付けられるコマンドは他にもあるようなので、上手く使うと便利なことができるかも。


データベーススペシャリスト試験 合格発表

午前Ⅰ 免除
午前Ⅱ 80点
午後Ⅰ 61点
午後Ⅱ 57点

ということで不合格でした。午後IIが惜しかった…。あと3点ということは小問1つ分くらいか。

けれど、勉強ほとんどしていない中でのこの点数なので勉強すれば何とかなりそう。いちおう約10年前に一度合格してはいるけど、データベース周りはブランク長い中で、最近また仕事で触るようになってきたのでリハビリしておかないと。

さて、そろそろ秋試験の申し込みが始まる時期。ネットワークとセキュリティは割と最近合格しているので順番的にはシステムアーキテクトになるだろうか。これもかなり昔に前身のアプリケーションエンジニア試験に合格したことがあるので、手が届かない訳ではないと思う。ただ論文の試験はかなり苦戦した記憶がある上に、自分に書けるだけの経験とネタがあるかと言われると微妙ではある。午前I免除も切れるはずだし、受験するかどうかも含めて考えることにするつもり。


FlickrのOAuthで認証サイトにリダイレクトする際にはpermsパラメータが必要

この連休にFlickrのOAuth周りを触っていてハマったこと。

FlickrでOAuthのユーザー認証をする場合、Request Tokenの取得後にFlickrの認証ページにリダイレクトするのが流れだと思うのだけど、FlickrへリダイレクトするURLにパラメータを追加でしていしないとユーザー情報を入力しても"Oops! Flickr doesn't recognise the permission set."というメッセージが表示され、認証エラーになってしまう。

Flickr公式のドキュメント(http://www.flickr.com/services/api/auth.oauth.html)だと、サイトに飛ばすときは

http://www.flickr.com/services/oauth/authorize?oauth_token=72157626737672178-022bbd2f4c2f3432

のようなoauth_tokenのみがクエリに付ければいいとなっているけど、実際は"perms"パラメータもつけないとうまく動作しない。

Additionally, you can pass the optional perms= parameter, asking for read, write, or delete privileges. This parameter will override the setting defined in your application's authentication flow.

サイトの説明にはoptionalとなっているので、指定しなければデフォルト(readのみ)になってくれるかと思っていたのだけど、違うようだ。

http://www.flickr.com/services/oauth/authorize?oauth_token=72157626737672178-022bbd2f4c2f3432&perms=read

↑この形が正解。

OAuthにsignpostのライブラリを使っている場合は、OAuthProvider#retrieveRequestToken()で返るリダイレクトURLに自分でpermsパラメータを付ける。

(参考)http://www.flickr.com/groups/api/discuss/72157626891119797/#comment72157627007728025


RGB565画像を作るならGIMPが使える(C言語ソースも出力可)

RGB565の画像データを必要とするケースというと、主に組み込みでVRAMに書かないいけないとかそういうケースがほとんどかなぁと思うので、割とニッチではあるのだけど仕事などでやっているとたまに「さくっとPCでテスト用画像を作ってRGB565にしたいなぁ」と思うことがある。

とりあえずちょっとしたテスト用として、C言語のソースにバイナリデータとして埋め込んで動作させたいとかいう時もあるかと思う。

何か使えるツールはないだろうかと探していたら、GIMPが使えることが分かった。

分かった、と書いているけどGIMPでRGB565でのC言語ソース出力の機能は最新のGIMP2.8の一つ前、2.7から搭載されている機能らしい。

とりあえず方法。

1.絵を描く

Clipboard01

必要な幅高さなどの条件で絵を描きます。他の画像ファイルを読み込ませても良いはず。

2."Cソースコード"形式でエクスポートする

Clipboard02

メニューから、「ファイル」→「エクスポート」を選択すると画像の出力形式を選ぶ画面になる。ここで「ファイル形式の選択」で"C ソースコード"を選択する。

3.出力オプションでRGB565を選ぶ

Clipboard03

Cソースコードで出力を選ぶと、このようなオプション画面が出るのでRGB565形式で保存、のチェックボックスを入れる。他の項目はお好みで…と言いたいところだが、どうもGIMPのバグなのか?チェックボックスの組み合わせによっては、RGB565形式で出力されないパターンがあったので要注意。

出力結果

Clipboard04

このように幅、高さ、1ピクセルあたりのバイト数、画像データが構造体の形でファイルに出力される。

このまま使うも良し、必要に応じてデータ部のみ抜き出して使うも良し。

注意点

・出力オプションで"structではなくマクロを使う"を選択すると、#define部がRGB565形式で出力されない。(データ部はRGB565で吐かれている)
・出力形式を"Cヘッダファイル"にするとRGB565では出力されない

バイナリで出力したい場合はどうすればいいのだろう…。Windows BMP形式だとRGB565で出力するオプションがあるので、いったんBMPで出力してBMPヘッダを削ればいいのかな…?


Galaxy NexusとArduino MEGA ADKをArduino1.0環境で接続する

特に珍しいことは何も無く、単にADKのサンプルアプリが動くところまでを確認しただけだけど。

DSCN0605

先代のGalaxy Sが2.3.4カスタムROMにアップデートしてもADKサポートせず、Android3.xデバイスとして買ったAcer ICONIA TAB A500も結局ADKサポート無しという悲しい状態で、買ってあったArduino MEGA ADKだけが浮いていたのだけども、ようやく日の目を見ることができたと言うべきか。

Arduino周りの環境構築は、Arduino1.0になってArduino側ライブラリのAPI定義などが変更になった関係などで、GoogleのADKページ

http://developer.android.com/guide/topics/usb/adk.html#getting-started / Android Open Accessory Development Kit | Android Developers

を見るより、ArduinoのMEGA ADKのページに書かかれている方法のとおりにするほうが良い。変にハマらなくて済む。

http://labs.arduino.cc/ADK/AccessoryMode / Arduino Labs - Accessory Mode browse

ポイントは、Arduino1.0のフォルダにライブラリとしてAndroidAccessoryとUSB_Host_Shieldを入れる必要があるのだが、それの入手元。Googleのサイトだと、Google提供のADKパッケージに含まれるAndroidAccessoryとUSB_Host_Shieldを使うように書かれているけど、Arduino1.0の場合はArduinoのサイトで配布されているアーカイブを使う、というところ。

3. Arduino 1.0 + Arduino Libraries
...
As with Processing, you need to run the IDE once to create your sketchbook folder. Once created, download this file. The two folders, “libraries” and “tools” need to be placed in your Arduino sketchbook folder.

"this file"とさらっと目立たないリンクになっているけど、ここからダウンロードできるアーカイブをArduino1.0のフォルダにコピーすること。これですんなり認識する。

ADKやAndroid側アプリの作り方については、以下のgclueさんのサイトの解説がとても解りやすくてオススメ。

ちなみに、gclueさんのサイトの"ADKの開発環境の構築"に書かれている「ソースコードの修正」は、Arduinoのサイトでは既に修正済みのライブラリがダウンロードされるようなのでこの手順は必要無くなっている。

ADKの開発環境の構築 - IoT Docs
ADKのライフサイクル - IoT Docs
Androidアプリの作成 - IoT Docs


さくらのVPSを解約

サービスに不満があったというよりかは、活用できてなかったので。

VPSの新プラン乗り換えの案内が来ていて、最初は同じ値段なら乗り換えないとなぁと思っていたけど、良く考えてみると今すぐにVPS載せ替えるほど使ってないな、と。

もともとは

プライベートgitリポジトリ
プライベートredmine
・Wordpress実験用環境
・Androidフルソースの置き場所

を見込んで使っていたのだけど、プライベートgitリポジトリはbitbucketに移行してしまったし、redmineもとりあえずはbitbucketのissue機能を使えば自分しか見ないので事足りそうだし、Wordpressの実験環境とAndroidフルソースは、PC上のVirtualBox環境にでも作ればいいか、と。

特に公開してるWebサービスも持っていないし、稼働率の低いサーバを月々維持するのも勿体ないので、今回のさくらVPSの新プラン登場を機にVPS環境は一旦閉めることにした。

サービス自体は、旧プランがそのままアップグレードにならなかった(乗り換え必要)のが不満と言えば不満だけど、それ以外は価格や環境はそれほど不満は無かったので、また必要だと思ったとき契約することにする。


スポンサーリンク