しもむブログ

技術メモ。といっても高度なことは書けないので…初心者がハマったところや、ググってもすぐには出てこないようなものを書くつもり。

OpenBlocks IoT EX1 バージョン 8(jessie)にOpenJDK8をインストールする

前提条件

  • OpenBlocks IoT EX1
  • Debian 8.11

失敗例

  • 無邪気に入れようとするがエラー
root@obsiot:~# apt-get install openjdk-8-jdk
Reading package lists... 0%Reading package lists... 100%Reading package lists... Done
Building dependency tree... 0%Building dependency tree... 0%Building dependency tree... 50%Building dependency tree... 50%Building dependency tree... 59%Building dependency tree... 90%Building dependency tree       
Reading state information... 0%Reading state information... 0%Reading state information... Done
Package openjdk-8-jdk is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'openjdk-8-jdk' has no installation candidate
  • 探してみるがなさそう
root@obsiot:~# apt-cache search jdk
libanimal-sniffer-java - JDK/API verification tools
libanimal-sniffer-java-doc - Documentation for Animal Sniffer
jvm-7-avian-jre - lightweight virtual machine using the OpenJDK class library
libcommons-math-java - Java lightweight mathematics and statistics components
libcommons-math-java-doc - Java lightweight mathematics and statistics components - documentation
libcommons-math3-java - Java lightweight mathematics and statistics components
libcommons-math3-java-doc - Java lightweight mathematics and statistics components - documentation
fakeroot-ng - Gives a fake root environment
freemind - Java Program for creating and viewing Mindmaps
gcj-4.8-jdk - GCJ and Classpath development tools for Java(TM)
gcj-4.9-jdk - GCJ and Classpath development tools for Java(TM)
gcj-jdk - gcj and Classpath development tools for Java(TM)
libhessian-java - Java implementation of a binary protocol for web services
libhessian-java-doc - Documentation for libhessian-java
icedtea-7-plugin - web browser plugin based on OpenJDK and IcedTea to execute Java applets
libicu4j-java - Library for Unicode support and internationalization
libicu4j-4.4-java - Library for Unicode support and internationalization
libicu4j-49-java - Library for Unicode support and internationalization
japitools - Java API compatibility testing tools
default-jdk - Standard Java or Java compatible Development Kit
default-jdk-doc - Standard Java or Java compatible Development Kit (documentation)
default-jre - Standard Java or Java compatible Runtime
default-jre-headless - Standard Java or Java compatible Runtime (headless)
gcj-native-helper - Standard helper tools for creating gcj native packages
java3ds-fileloader - Java3D 3DS File Loader
libjson-simple-java - Simple, lightweight and efficient JSON toolkit for Java
jtreg - Regression Test Harness for the OpenJDK platform
libcommons-collections3-java - Apache Commons Collections - Extended Collections API for Java
libcommons-collections4-java - Apache Commons Collections - Extended Collections API for Java
libcommons-collections4-java-doc - Documentation for Commons Collections 4
libcommons-lang-java - Commons Lang - an extension of the java.lang package
libcommons-lang-java-doc - Documentation for Commons Lang - an extension of the java.lang package
libcommons-lang3-java - Extension of the java.lang package (for Java 5+)
libcommons-lang3-java-doc - Documentation for extension of the java.lang package (for Java 5+)
libcommons-launcher-java - Apache Commons Launcher - Cross platform Java application launcher
libhibernate-commons-annotations-java - Hibernate Commons Annotations
libitext1-java - Java Library to generate PDF on the Fly
libjboss-common-java - The JBoss Common Project
libjboss-marshalling-java - alternative serialization API
libjxp-java - Java template engine/script processor
libnb-javaparser-java - Parser for the Java language which is good for use in tools
libpostgresql-jdbc-java - Java database (JDBC) driver for PostgreSQL
libpostgresql-jdbc-java-doc - Java database (JDBC) driver for PostgreSQL (documentation)
libreoffice - office productivity suite (metapackage)
libslf4j-java - Simple Logging Facade for Java
mauve - free test suite for the Java Class libraries
libmaven-enforcer-plugin-java - Maven build rule execution framework
mmake - Makefile generator for Java programs
icedtea-7-jre-jamvm - Alternative JVM for OpenJDK, using JamVM
openjdk-7-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-7-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-7-doc - OpenJDK Development Kit (JDK) documentation
openjdk-7-jdk - OpenJDK Development Kit (JDK)
openjdk-7-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-7-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-7-jre-lib - OpenJDK Java runtime (architecture independent libraries)
openjdk-7-jre-zero - Alternative JVM for OpenJDK, using Zero/Shark
openjdk-7-source - OpenJDK Development Kit (JDK) source files
openjdk-7-jre-dcevm - Alternative VM for OpenJDK 7 with enhanced class redefinition
libpracticalxml-java - practical XML handling routines
substance - cross-platform look & feel for Swing applications
substance-doc - cross-platform look & feel for Swing applications - documentation
testng - testing framework for Java
libtrove-java - high performance collections for java
libtrove-java-doc - high performance collections for java
libtrove3-java - high performance collections for java
libtrove3-java-doc - high performance collections for java
usepackage - utility to manage environment variables from within dotfiles
uwsgi-app-integration-plugins - plugins for integration of uWSGI and application
uwsgi-plugin-jvm-openjdk-7 - Java plugin for uWSGI (OpenJDK 7)
uwsgi-plugin-jwsgi-openjdk-7 - JWSGI plugin for uWSGI (OpenJDK 7)
libvisualvm-jni - All-in-One Java Troubleshooting Tool (JNI libraries)
visualvm - All-in-One Java Troubleshooting Tool
libwagon-java - tools to manage Maven artifacts and deployment

やったこと

  • /etc/apt/sources.listを修正
root@obsiot:~# vi /etc/apt/sources.list

deb http://ftp.jp.debian.org/debian/ jessie main
deb-src http://ftp.jp.debian.org/debian/ jessie main

# deb http://ftp.jp.debian.org/debian/ jessie-backports main
# deb-src http://ftp.jp.debian.org/debian/ jessie-backports main

#deb http://ftp.jp.debian.org/debian/ jessie-updates main  #コメントアウト
#deb-src http://ftp.jp.debian.org/debian/ jessie-updates main  #コメントアウト

deb http://security.debian.org jessie/updates main
deb-src http://security.debian.org jessie/updates main

deb http://ftp.plathome.co.jp/pub/BX1/debian/jessie ./
deb http://archive.debian.org/debian jessie-backports main  #追記
  • ファイルを2つ作成
echo "Acquire::Check-Valid-Until false;" >/etc/apt/apt.conf.d/10-nocheckvalid
echo 'Package: *\nPin: origin "archive.debian.org"\nPin-Priority: 500' >/etc/apt/preferences.d/10-archive-pin
  • 更新してインストール
apt-get update
apt-get install -t jessie-backports openjdk-8-jre-headless ca-certificates-java
apt-get install -t jessie-backports openjdk-8-jdk openjdk-8-jre
  • OpenJDK7が入っていたので切り替える
root@obsiot:~# /usr/sbin/update-java-alternatives -l
java-1.7.0-openjdk-i386 1071 /usr/lib/jvm/java-1.7.0-openjdk-i386
java-1.8.0-openjdk-i386 1069 /usr/lib/jvm/java-1.8.0-openjdk-i386
root@obsiot:~# sudo /usr/sbin/update-java-alternatives -s java-1.8.0-openjdk-i386
update-alternatives: error: no alternatives for mozilla-javaplugin.so
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/IcedTeaPlugin.so
  • バージョンの確認
root@obsiot:~# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~bpo8+1-b11)
OpenJDK Server VM (build 25.171-b11, mixed mode)
root@obsiot:~# javac -version
javac 1.8.0_171
  • いいかんじでIoT(OpenBlocks)ネタが多くなってきた

参考

OpenBlocks IoT EX1にSDカードを挿す時はマウントポイントに気をつける

  • ログを大量かつ長期間とっておきたいので念のためディスク容量を増やしておきたい
  • 開発者向けガイドを読むとMMCスロットがあり、まさにうってつけである

MMCはシステム運用に十分な信頼性を確保できない為、ファイル交換やログ保存用等にご利用ください。

  • たまたま余っていたSDカードをもらったので挿してみる
続きを読む

OpenBlocks IoT BX5にWindowsでシリアルコンソール接続する

はじめに

  • OpenBlocks IoT FamilyシリーズをIoTゲートウェイとして使っている
  • シリアルコンソール接続するのに、最初はEX1の手順でやろうとしてうまくいかなかった
  • 型番によってドライバーが違うようだ

openblocks.plathome.co.jp

やってみた

  • ドライバーはこちら

jp.silabs.com

  • 今回はWindows7なので、「VCP をダウンロード (5.3 MB) (デフォルト)」からダウンロード

f:id:mshimomu:20190117141219p:plain

  • ダウンロードしたzipファイルを解凍するとこんな感じ

f:id:mshimomu:20190117141507p:plain

  • 32bitか64bitかOSに合った方をインストールする(今回は64bit)

f:id:mshimomu:20190117143523p:plain

  • OpenBlocks BX5を接続

f:id:mshimomu:20190117142123j:plain

  • バイスマネージャーを確認すると、COM10で認識されている

f:id:mshimomu:20190117142203p:plain

  • COM10を使ってTera Termで接続
    • ボー・レート:115200
    • データ:8bit
    • パリティ:none
    • ストップ:1bit

f:id:mshimomu:20190117142346p:plain

  • 接続できたので、ユーザ名とパスワードを入れてログイン

f:id:mshimomu:20190117142702p:plain

  • ログイン成功

f:id:mshimomu:20190117143045p:plain

さいごに

  • IoTを始めて約1年半、外部公開が難しい特定メーカーのマニアックなノウハウばかり溜まっていたのだが、やっとIoTネタで記事が書けた

参考

Bitbucket ServerのウェブフックとJenkinsのGeneric Webhook Triggerでジョブを自動実行する

はじめに

先に結論

  • Parameterized Builds for Jenkinsはプロジェクト単位でJenkinsのURLを登録できるので、適切な単位でプロジェクトを分けましょう

やったこと

  • JenkinsにGeneric Webhook Trigger プラグインを入れる
    • http://JENKINS_URL/generic-webhook-trigger/invokeがトリガーになる
  • Bitbucket Serverのウェブフックを設定する
    • 上記のURLを設定

f:id:mshimomu:20181114015428p:plain

  • Jenkinsジョブのビルド・トリガを設定する

  • シェルの実行を書く

echo ---------------------------------------------------
echo "ジョブ開始"
echo "プルリクエスト: ${payload_title}"
echo "ブランチ: ${payload_branch}"
echo ---------------------------------------------------
echo 


git fetch origin
BRANCH=`echo $payload_branch |sed "s/refs\/heads\///"`
echo ---------------------------------------------------
echo "branch is $BRANCH"
echo ---------------------------------------------------
git reset --hard origin/${BRANCH}

chmod +x gradlew
  • できた

f:id:mshimomu:20181114214400p:plain

f:id:mshimomu:20181114214428p:plain

その他

  • 今回はプルリクエストだけをトリガーにしたが、Repository eventsとPull request eventsの両方をトリガーにしたい場合は、eventKeyを条件にしないといけなさそう

Gradleプロジェクトをアップグレードする

  • Gradleプロジェクトはリポジトリをクローンしてgradlewを叩くだけだが、Gradleのバージョンが古いことがある
    • 過去に作ったプロジェクト
    • 落としてきたプロジェクト
    • ローカルのGradleが古いまま作っちゃったプロジェクト
  • そんなときはこのコマンドでアップグレードできる
./gradlew wrapper --gradle-version=4.8
  • 結果はgradle/wrapper/gradle-wrapper.propertiesが変わるだけだけど、これで指定したバージョンのGradleが落ちてくる

  • 存在しないバージョンも指定できてしまう

./gradlew wrapper --gradle-version=4.99

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
  • この場合はもうgradlewできなくなってしまうので注意
  • やってしまったら、gradle/wrapper/gradle-wrapper.propertiesを手動で修正する
./gradlew wrapper --gradle-version=4.99
Downloading https://services.gradle.org/distributions/gradle-4.99-bin.zip

Exception in thread "main" java.io.FileNotFoundException: https://downloads.gradle.org/distributions/gradle-4.99-bin.zip
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1836)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
        at org.gradle.wrapper.Download.downloadInternal(Download.java:60)
        at org.gradle.wrapper.Download.download(Download.java:45)
        at org.gradle.wrapper.Install$1.call(Install.java:62)
        at org.gradle.wrapper.Install$1.call(Install.java:48)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
        at org.gradle.wrapper.Install.createDist(Install.java:48)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

Gebでブラウザとドライバーのバージョンが合っていない時に出るエラー

はじめに

  • Gebで不思議なエラーに悩まされた時の話です。
  • Gebについてはぷーさにさんの記事が詳しいので割愛します。

codezine.jp

  • Yokohama.groovy #42Gebについて学んだ後、ひさしぶりに動かしてみると全然動きません。
  • 原因はブラウザのドライバーのバージョンが古かったからなのですが、エラーからは直接わからず…
  • そこでバージョンが合っていないとどんなエラーが出るか試してみました(とりあえずChrome Driverだけ)。
続きを読む

TDDBC Tokyo 2017-09に行ってきた #tddbc

  • TDDBC | Doorkeeperを見つけてからずっと参加したいと思ってけどなかなか都合が合わず
  • Twitterで今回のconnpassのページが流れてきて参加

tddbc.connpass.com

  • togetterまとめ

togetter.com

  • 自分のやったことをメインにまとめておきます

基調講演

ペア決め〜お昼

  • @hika_riruさんとGroovy+Spockでやることに決定
    • twitter等ではお互い知ってたものの初対面、よろしくお願いします
  • お昼はオシャレなお店
    • 2階が貸切状態でそのままもくもくしたかった

ペアプロ

  • お題はセマンティック・バージョニング
  • テストするクラスはsutにしたいって言ったら、鈍器を持ってると思われたw
  • JUnit実践入門にも書いてあるからこわくないよ

  • 2回目のコードレビューで指名されて前で喋ることになってしまった
    • 1回目のコードレビューのしゃべりが面白すぎたのでハードルが高かった
  • 勉強会で初めて人前で喋ったのだが、TAの方々がやさしくフォローして頂いたので感謝
  • 喋ったこと(記憶にあること)
    • お題は、仕様変更の練習としてあえて全部読まずに1つずつ進めた(ペアでの合意はなし!)
    • 仮実装(茶番)は大事。そもそも実行環境がちゃんとできていなかったのも検出できた
    • Spockのよさを2人で感じた(特に@Unroll)
    • IDEのショートカットを共有できた

懇親会

  • 余り物頂きました

感想など

  • Twitterで知ってる人と会えていろいろお話できた
    • TAの@nyasbaさんに観測されていて嬉し恥ずかし
  • 長丁場なので途中で帰りたくなったらどうしようと思ったけど、ペアプロしてるとあっという間に時間が過ぎて楽しかった
  • TAの層も厚く(ペア:TA=1:1ぐらい?)、絶妙なタイミングでフォローいただけたのでよかった
  • レビューで喋ったこと自体もいい経験だったし、結果として自分達はどういうことを考えて進めたのか勉強会内で振り返るきっかけになった
  • まねしてみたいこと
    • ナビゲーターは少し先を見る。車の運転と一緒
    • JUnitのテストメソッドが数字で始まるときは"_"入れる
    • PRの質問に対しての回答をコードのコメントに書く