2017年12月29日金曜日

CSVの列順番を入れ替える

あまプロではCSVファイルを扱う事が有ります。

先日、列の順番を入れ替える案件が有りましたので、あメログ。

test.csv
a,b,c
a,b,c
というCSVを
a,c,b
a,c,b
に並べ替えたいとします。

方法は色々有るんですが、ワンライナーでさくっと変換したい場合は
paste -d, test.csv test.csv | cut -d, -f1,3,5

echo -e "a,b,c\na,b,c" | sed -e "s/^\(.*\),\(.*\),\(.*\)$/\1,\3,\2/g"

echo -e "a,b,c\na,b,c" | awk 'BEGIN{ FS=","; OFS=",";} { print $1, $3, $2}'
ですかね。
他にも色々方法は有るんですが、私はコマンドの短いpasteで処理しました。
実行速度を取るか、メモリ使用量を取るか、コマンドの短さを取るか、好みのコマンドを取るか、プロジェクト毎の決まりに従うか…等々で色々変わりますので、場合に選って使い分けてます。

2017年12月27日水曜日

SCPを高速化

あまプロではシェルスクリプトを作成する場合が有ります。

先日、scpで大量のファイルをコピーする案件が有りました。
scpとはsshのcpで、暗号化通信コピーのコマンドになります。
サーバ間やリモートローカル間でファイル遣り取りする際に使います。

大変便利なコマンドなんですが、暗号化通信の為に接続時に時間が掛かります。
httpsのサイトも最初の表示に時間が掛かるのと同じです。
内部で公開鍵の交換等を行っている為で、どうしても処理に時間が掛かります。
数十〜数百ファイルなら大した時間ではないですが、これが数千数万になると数時間掛かってしまいます。

ディレクトリ内にファイルが有る場合
scp コピー元 コピー先
scp hoge.jpg username@hostname:/path/to/dir
という風にローカルからリモートへファイルをアップロードします。

シェルスクリプトで大量のファイルをアップロードする場合
ls *.jpg | xargs -i scp {} username@hostname:/path/to/dir
こうなります。

しかし、これだと
scp hoge0.jpg username@hostname:/path/to/dir
scp hoge1.jpg username@hostname:/path/to/dir
scp hoge2.jpg username@hostname:/path/to/dir
scp hoge3.jpg username@hostname:/path/to/dir
 ︙
としている事になり、1ファイルずつ接続切断を繰り返すので非効率です。
この場合、rオプションを追加して、ディレクトリごとアップロードすると高速になります。

scp -r hoge/ username@hostname:/path/to/dir

rオプションを追加する事で、内部ではこんな感じになり、
scp hoge0.jpg hoge1.jpg hoge2.jpg hoge3.jpg username@hostname:/path/to/dir
一回の接続切断にまとめてくれます。

ディレクトリ内の一部ファイルをアップロードしたい場合は
一部ファイルを一時ディレクトリにコピーして、一時ディレクトリごとrオプションで送りましょう。
一時ディレクトリの作成にはmktemp -d temp.XXXを用います。詳しくはmanをご覧下さい。

ファイル数やファイルサイズや帯域に選りますが、今回の案件では5〜6倍程高速化しました。

画像ファイルは既に圧縮済なので無理ですが、テキストファイル等でしたらCオプションを追加する事で圧縮転送も可能です。
転送量低下->高速化となります。

2017年12月26日火曜日

SSHでConnection timed out

あまプロではUbuntuサーバ上でシエルスクリプトを作成する事が有ります。

サーバ間の接続にSSHを使っているんですが、先日ある特定のサーバAからサーバBへログインできなくなってしまいました。
Connection timed out
と表示されて、原因不明…。
他のサーバCやサーバDからはサーバBへいつも通りにログインできるんですが、サーバAからのみタイムアウトが発生します。
何故なんでしょう?

2017年12月22日金曜日

DellのLifecycleController上にUbuntuServerをインストール

あまプロではUbuntuサーバを構築する事が有ります。

今回はデルのPCにウブンツをインストールでハマりましたのであメログ。
DellのサーバにはLifecycleControllerというツールがインストールされています。
このライフサイクルコントローラを経由して各OSをインストールする事になります。

また、最近のPCはUEFIという仕組みが採用されており、従来のBIOSとはちと変わってます。
BIOS版のUbuntuをインストール出来るのですが、そうするとLifecycleControllerから起動出来なくなってしまうので、UEFI版をインストールします。
UbuntuのUEFI版はこちらに有ります。ここから製品名のUbuntuを検索してダウンロードします。

ハマりポイント1
LifecycleControllerを経由せずにUbuntuをインストールする事も出来ますが、そうするとLifecycleControllerからOSを認識出来ず、つまりOSが起動出来なくなりますのでご注意を。
LifecycleControllerを経由してUbuntuをインストールしましょう。

ハマりポイント2
LifecycleControllerのイントールでは何故かUSBメモリが使えません
なので、CDやDVD等の光学メディアにインストーラを書き込みます。

この二つのハマりポイントに気を付ければ、通常通りのインストールになります。

Ubuntuのサーバを構築する場合はUbuntuServerのLTS版をインストールします。
LTSとは長期間(五年)保守される版で、サーバ等の長期間稼働さす場合に適してます。

2017年12月12日火曜日

Postgresqlから外部のデータベースを操作する

あまプロでは、データベースを扱う案件を良く請けます。
先日、PostgreSQLからMySQLを操作する案件に携わりましたので、あメログ。

PostgreSQLからMySQL等の外部のデータベースへ接続するにはForeignDataWrapperという拡張機能を用います。
DBリンクという似た機能も有るのですが、これは外部のPostgreSQLとしか接続出来ません。
FDWであればMySQLだけに限らず、色々なDBへ接続できる様です。詳しくはこちらをご覧下さい。

今回はPostgreSQLからMySQLのlist_db.listsというテーブルに接続してみます。
どちらも同じローカルにインストールしている前提です。
リモートのデータベースに接続する場合は、適宜接続設定を行って下さい。
環境は以下の通り
Ubuntu 17.10
PostgreSQL 9.6.6
MySQL 5.7.20
先ず、MySQL用のFDWをインストールします。
Ubuntu(Debian系)では
sudo apt install postgresql-9.6-mysql-fdw
でインストール可能です。
恐らく他のディストリビューションでもインストール出来る筈です。

以降の操作にはデータベースでの管理者権限が必要です。
使用するユーザに管理者権限が付いてない場合は
GRANT ALL PRIVILEGES ON DATABASE データベース名 TO ユーザ名;
で、権限を付与して下さい。


psqlでPostgreSQL(の権限の付けられたデータベース)へログインします。
拡張機能を作成します。
CREATE EXTENSION mysql_fdw;

サーバを作成します。
CREATE SERVER サーバ名 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'localhost', port '3306');
サーバ名は(以降の設定でも使うので)解り易い名前にして、ホストやポートは環境に合わせて適宜変更して下さい。

マッピングを作成します。
CREATE USER MAPPING FOR public SERVER サーバ名 OPTIONS ( password '******', username 'ユーザ名');
パスワードとユーザ名はMySQL側のパスワードとユーザ名を指定します。

外部テーブルを作成します。
CREATE FOREIGN TABLE lists ( id int, name text)
 SERVER サーバ名 OPTIONS ( dbname 'list_db', table_name 'lists');
テーブルの列名やデータ型はMySQLのテーブル定義に合わせます。
MySQLの場合は
desc テーブル名;
でテーブル定義が表示されます。
違う列名やデータ型に出来るんかな?
そこは未確認です。ひょっとしたら必要な列だけ取得出来るかも。

以上で設定は終わりです。
SELECT * FROM lists;
UPDATE lists SET name = 'ほげほげ';
こんな感じで、PostgreSQLからMySQLへ対してSQL( のDML)を発行する事が出来ます。

外部のデータベース故に色々と制約は有るのですが、結構便利です。

2017年12月11日月曜日

大量のファイル処理

あまプロではシェルスクリプトを作成する場合が有ります。

先日大量のファイルを操作するシェルスクリプトを作成する事が有りましたのであメログ。

 大量の(五万以上)のファイルをワンライナーで変換し様とした際に遭遇したエラー
.hoge.sh: ls: Argument list too long
引数リストが多過ぎますとな!

スクリプト内では
ls -1 *.jpg | 変換コマンド
というコマンドでファイル一覧を取得してたのですが、これがあきませんでした。
ディレクトリ内に多数(五万以上)の画像ファイルが有るので、*.jpgでフィルタして一覧を取得したかったのですが、 どうやら
ls -1 *.jpg
の内部で大量の引数に対応して無いエラーが発生している様です。
xargsを使ってないんかな?

ちなみにフィルタせずに
ls -1
だと大丈夫…何でやねん

仕方ないので
ls -1 | grep .jpg | 変換コマンド
で回避しました。
因みに引数に使用できる最大文字数は
getconf ARG_MAX
で取得出来ます。

2017年12月5日火曜日

無料のドメインを使ってみました

あまプロではwebサイトの構築をお受けする事が有ります。

先日、無料ドメインのFreenomを使う機会が有りました。
さくらVPSでCDNのCloudFlareを使って画像をキャッシュしたかったのですが、
CloudFlareはサブドメインでは使えないので、トップドメインを取得する必要が有ります。
開発用に一時的なトップドメインが必要でしたので、無料ドメインのFreenomを利用しました。

流れとしては
  1. さくらVPS契約
    ネームサーバの利用申請
  2. Freenom契約
    ネームサーバをさくらVPSのネームサーバで登録
  3. Cloudflare契約
    Cloudflareのネームサーバを割り当てられるので、それをFreenomへ登録
こんな感じです。
ちょっとややこしいですけど、さくらVPS(685円)代のみでCDNの開発環境が構築出来ました。
頑張って他のVPS無料サービスを探したら、無料で出来るかもです。
CDNが良ぇ感じに画像をキャッシュしてくれるので、webサーバの負荷が分散されます。

只、Webサーバを数分でも止めると取得したドメインが削除されてしまいますorz
ほんの10分程度、バッチ処理の為にサービスを落としただけなんですけど、サービスを再起動した時には既に遅し、ドメインが削除されておりました。
Freenomの利用規約に書いてるみたいですが、いきなりサイトが表示されなくなった時は開発環境とはいえ焦りました。
まぁ同じドメインは直ぐに再取得出来るので、問題は無かったです。

さくらVPS+ClouddFlare+Freenomで開発環境。
皆さんもお試しあれ。

2017年11月30日木曜日

iptablesの設定

あまプロではUbuntuのサーバ設定をお受けする事が有ります。

ファイアウォールでiptablesを使うのですが、どうも再起動すると設定が消えてしまいます。保存されへんのです…。

例えば
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ポート番号 -j ACCEPT
として、ポートを開放して、

sudo apt install iptables-persistent
iptables保存用パッケージをインストールして
sudo /etc/init.d/netfilter-persistent save
保存しても
reboot後に
sudo iptables --line-numbers -L
が確認すると、設定が保存されないんですよね…。

しゃーないんで、
sudo vim /etc/iptables/iptables.rules
で直接ファイル編集しました。
これで再起動後もポートが開放されました。

apt upgradeでエラー発生

あまプロではUbuntuの案件を受ける事が有ります。


先日、リモートサーバーでアップデートしておりましたら
sudo apt upgrade
いつもは
Running hooks in /etc/ca-certificates/update.d...
done.
と表示される所が
E: Sub-process /usr/bin/dpkg exited unexpectedly
と表示されてしまいました。
何かエラーが発生した様です。

再度
sudo apt upgrade
すると
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
と返って来て、アップデートが完了しませんorz
ここは素直に
sudo dpkg --configure -a
してみると
Running hooks in /etc/ca-certificates/update.d...
done.
無事にアップデートが完了しました。

SSHでサーバに接続できない場合

あまプロではリモートのサーバへ接続してお仕事する案件が有ります。

SSHでリモートサーバへ接続すると、初回に

The authenticity of host 'サーバのIP' can't be established.
RSA key fingerprint is SHA256:**********************************************************
Are you sure you want to continue connecting (yes/no)?
と訊かれます。
ほんまにサーバに接続して良いならyesを入力します。すると
Warning: Permanently added 'ホストのIP' (RSA) to the list of known hosts.







サーバ(の公開鍵)が登録され、次回から公開鍵が一致すれば、訊かれる事はなくなります。

所が、サーバの再インストールやIP変更等が行われると、公開鍵の不一致でログイン時に警告が発生します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:****************************************************************
Please contact your system administrator.

そんな時は
  remove with:
  ssh-keygen -f "/home/ローカルユーザ/.ssh/known_hosts" -R "サーバのIP"
メッセージ通りに一旦登録を削除すると良いです。

2017年11月29日水曜日

Arduino IDE 1.8.5が起動しない

あまプロではArduinoをつかった組み込みプログラミングの講座も行っています。

先日、 Ubuntu17.10へアップグレードしたんですが、どうやらその時に設定が変わった様で、ArduinoIDEが起動しなくなってしまいました…。

sudo ./arduino
Invalid MIT-MAGIC-COOKIE-1 keyPicked up JAVA_TOOL_OPTIONS:
Invalid MIT-MAGIC-COOKIE-1 keyjava.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:126)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.awt.Toolkit$2.run(Toolkit.java:860)
    at java.awt.Toolkit$2.run(Toolkit.java:855)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854)
    at java.awt.SystemColor.updateSystemColors(SystemColor.java:473)
    at java.awt.SystemColor.<clinit>(SystemColor.java:465)
    at processing.app.Theme.init(Theme.java:84)
    at processing.app.Base.<init>(Base.java:219)
    at processing.app.Base.main(Base.java:144)

X11 window serverに接続できないエラーが出るのですが、どうしたものか…。


2017年11月26日日曜日

vimでエンコーディング違いで文字化けしたら

あまプロではLinux(のUbuntu)を使って日々の業務を行っております。

テキストエディタはvimを愛用しております。
ちょっと学習コストは高いのですが、慣れると良ぇ感じに使えます。

vimは編集モード、コマンドモード、ビジュアルモードという状態を持っています。
これは他のテキストエディタには無い特徴の一つです。

私はタブ(ブラウザのタブと同じ横にページを並べる機能)を使って作業してます。
:tabnew file.txt
とコマンドを入力すると、タブでfile.txtを開きます。
ファイルが無ければ新規作成します。

他OSで作成したファイル等は、エンコーディングを認識せずに文字化けする場合が有ります。
そんな時は
:tabnew file.txt | :e ++enc=cp932
とタブを開くコマンドと、エンコーディングを指定して開き直すコマンドを繋げて入力すると、一発で文字化けせずに開けます。

又は、事前にエンコーディングの候補を登録しておけば
:set fileencodings=utf-8,iso-2022-jp,cp932,sjis,euc-jp
ファイルを開く際にvimが自動的に認識してくれるので
:tabnew file.txt
だけで文字化けせずに開けます。

2017年11月22日水曜日

データ救出

あまプロでは時々パソコンのお困り事をお受けする事が有ります。

先日、お客さんのパソコンが起動しなくなってしまいました。
幸いにも保証期間内だったので、Windowsは復旧するそうなのです。
ですが、ハードディスク内に保存しているデータは消えてしまうので、消す前にデータを救出して欲しいという内容でした。
データ救出の専門業者ではないのですが、まぁちょっと頑張ってみようかと思い、救出作業を行ってみました。

先ず、Ubuntuのインストーラを作成します。
isoファイルをダウンロードして、USBメモリにブータブルUSBを作成します。
isoファイルはダウンロード用に1ファイルに圧縮されているのでそのままコピーするだけではブータブルUSBになりません。
書き込みソフト等を使って、ブータブルUSBを作成します。

isoファイルは1.4GBにもなり、そんなUSB持ってへんよ…ダウンロード時間も掛かるし…
という方はKNOPPIXをお薦めします。
CDに収まる700MB版や起動のみの7MBなんかも有ります。

頑張ってUSBへインストーラを書き込んだら、
BIOSの設定を変更して、ハードディスクからの起動をUSBからの起動へ変更します。
最近はデフォルトがUEFIに設定されていて、USB起動に出来ない場合が有りますが、その場合はUEFIを無効に設定するとUSBが選択可能になります。

Ubuntuを起動すると、Ubuntuをインストールするか、インストールせずに使ってみるかを問い合わせてきます。
ここでは「インストールせずに使ってみる」を選択します。
暫く待つと、Ubuntuが起動します。

左側のバーに接続されているハードディスクのアイコンが表示されます。
クリックすると、自動的にマウントされて、ハードディスク内を捜索できます。
ハードディスクの書き込み権限を付けれずに、マウントを失敗する場合が有りますが、目的はデータの救出(読み出し)なので、roオプションを設定してマウントします。

後は必要なファイルを探し出して、別の外付けハードディスクやUSBメモリ等にコピーするだけです。

無事に大事なファイルが取り出せました〜目出度し目出度し。

2017年11月14日火曜日

再帰的SQL

あまプロではシステム開発の案件をお請けしております。
先日、データベースでちょっと複雑なSQLを書いたんであメログ。

例えばこんなテーブルが有りまして
SELECT * FROM directory;
 id | parentid | name 
----+----------+-------
  0 |          | root
  1 |        0 | home
  2 |        0 | usr
  3 |        0 | var
  4 |        0 | etc
  5 |        1 | hoge
  6 |        2 | bin
  7 |        3 | log
  8 |        2 | local
  9 |        8 | bin
 10 |        1 | geho
 11 |        3 | lib
 12 |        0 | sbin
(13 rows)
IDと親IDと名前の列が有るとします。
まぁ良く有る親子関係の表です。
で、そのテーブルを基に階層構造のフルパスを生成せなあきませんでした。

2017年11月9日木曜日

Ubuntu 17.10の続き

あまプロでは教室や開発の端末にUbuntu(またはEdubuntu)を使ってます。
前回の投稿でUbuntu17.10にアップグレードした
日々色々と使っていると不具合を見付けたんであメログ。

  • クリップボードがアプリケーション間で共有できない
    例えばLibreOfficeでコピーしてvimでペーストし様としても貼り付けられません
    同一アプリ無いならコピペ出来るんですが…
    と思ってたら、昨日のアップデートで改修されました
  • スクリーンショットが撮れない
    クリップボード絡みやと思うんですが、スクショをクリップボードに出力して、GIMPに貼り付けるとこんな感じ…

    ちなみに、GIMP自体のスクリーンショットを撮るとこんな感じ…
真っ黒ですわ
   ちなみにちなみに、スクリーンショットをクリップボード出力ではなく、ファイル出力すると正常に画面写真が撮れます。

早よ直してくれへんかなぁ…。

2017年11月2日木曜日

Ubuntuをアップグレードしました

あまプロではOSにUbuntu(とEdubuntu)を使っています。
ウブントゥは半年に一回メジャーアップグレードをリリースしておりまして、簡単に言うと大きなバージョンアップが施されます。

先日Ubuntu17.10がリリースされましたので、教室のパソコンもアップグレードを行いました。
殆ど無事にアップグレードが済んだのですが、一部日本語入力の部分が手間取ったのであメログ。


日本語入力にはfcitxmozcの組み合わせを用いていたのですが、どうもfcitxに不具合が有る様で、かな入力時にキー配列が間違って入力されてしまいます。
例えば、濁点「゛」の入力は@キーですが、隣の[になります。@を押下すると何故か「ふ」が入る…。
ローマ字入力やと問題無く使えるんですけどね…仕方無いので今回から、iBusとmozcの組み合わせに変更しました。

アップグレードは偶にこの様な不具合が起こり得るので、気を付けましょう。
日本語入力の他には見た目(インタフェース)も少し変わっているのですが、今までウインドウ左上に有った終了最小化最大化ボタンが右端になりました…。
あと、ターミナル(端末)で右クリックメニューが二行しか表示されなくなってしまいました。マウスカーソルをメニューの上(または下)へ載せると高速スクロールされ、何とか選択できます…使い難いので、メニューを大きくする方法を探してみます。


半年に一回そんなの嫌やわぁという方は、LTSという五年の長期サポート向けのリリースが有りますので、こちらをお薦めします。

2017年10月24日火曜日

ベータ版やけど、GCP Cloud Functionsを試してみました

あまプロではシステム開発の案件を受ける事が有ります。
先日、GCP Cloud Functionsを使う機会が有りましたので、あメログ。

GCPとはGoogle社が提供する色んなサービスの内、主にシステム開発に特化したサービスを集めたサービス群です。ユーザ登録と支払い方法登録(クレジットカードが要ります)さえすれば、無料で始められます。
AWSとかAzureとかと似た様な物やと思って下さい。

今回の案件は「端末から定期的に送られてくる位置情報をサイトに表示する」という物です。
出来るだけ費用を掛けずに作りたいので、
今回使ったのは、クラウドファンクションズとデータストアとクラウドストレージという3つのサービスです。
各サービスを簡単に説明すると
  • CloudFunctions
    簡単なサーバ側の処理(関数)を処理単位で利用出来るサービス
    サーバを意
    今の所、使用出来る言語はNode.jsのみ(今後増える予定らしい)
    関数毎にURL(エンドポイント)が与えられる
  • DataStore
    簡単なSQL(GQL)も使えるデータベースのサービス
  • CloudStorage
    ファイル置き場
    HTML、JavaScript、CSS、画像、動画が置ける…つまり静的なサイトを構築出来るサービス
こんな感じです。
GoogleCloudPlatformには他にも似た様なサービスが色々有るんですが、無料枠もしくは格安なサービスを選んでみました。

それと上記のサービスはGCP上で完結します。つまり、ブラウザさえ有れば、開発マシンに何もインストールせずに開発出来てしまいます…凄い時代になったもんだ。
勿論、本格的に開発したい場合は開発マシンにツールのインストールが必須になります。
あくまで、 簡単に開発出来ますよ、という意味です。

先ず、端末からGPS情報を受け取って、データストアへ保存する部分
CloudFunctionコンソールを開いて関数の作成を押下します。
初めて関数を利用する場合は、最初にAPIを有効にするボタンを押下する必要が有ります。
次に名前、リージョン、割り当てられるメモリ、タイムアウト、トリガー(HTTPトリガー)、ソースコード(インラインエディタでindex.jsとpackage.json)、ステージバケット(無ければ参照ボタンを押下してバケットを作成)、実行する関数
項目は沢山有りますが、殆ど初期値で良いです。

編集するのはソースコードの部分。ここにnode.jsを記述します。
最初は簡単なHelloWorldが記述されてるので、これをインラインエディタで編集していきます。
このインラインエディタは正直使い難いので、ローカルで手早く開発したい方はこちらを参考にgcloudというツールをインストールして下さい。ローカルで開発して、zip圧縮してアップロードという流れになります。

データはGETで渡すので、GET値を取得する部分と、データストアへ保存する部分を記述します。
今の所まとまった日本語の資料が無いんですが、入門ガイドAPIリファレンスから情報を収集してプログラミングしました。
  • データストアではエンティティという単位で情報を扱う事
    RDBのレコードにみたいな物
  • エンティティにはキーが必要な事
  • 特殊な型(今回の場合は位置情報)を保存する事
    データストアには位置情報型が用意されているので、この型を用います
 この辺りに気を付けてプログラミングします。
プロジェクトIDやエンティティの種類は適宜記述して下さい。
index.jsは
 var url = require( 'url');
/**
 * Responds to any HTTP request that can provide a "message" field in the body.
 *
 * @param {!Object} req Cloud Function request context.
 * @param {!Object} res Cloud Function response context.
 */
exports.helloWorld = function helloWorld( req, res) {
  if( req.method == 'GET') {
    var url_parts = url.parse( req.url, true);
    console.log( url_parts.query.weight);
    var datastore = require('@google-cloud/datastore')({
      projectId: 'プロジェクトのIDを記述',
//      keyFilename: '/path/to/keyfile.json' インラインエディタの場合、キーファイルは不要
    });
    const entity = {
      key: datastore.key( [ 'エンティティの種類を記述', url_parts.query.ID]),
      data: {
        latLng:
          datastore.geoPoint( {
            latitude: parseFloat( url_parts.query.lat),
            longitude: parseFloat( url_parts.query.lon)
          }),
        weight: datastore.double( parseFloat( url_parts.query.weight))
      }
    };

    datastore.upsert( entity)
      .then( () => {
      // Task inserted successfully.
      res.status(200).send('Success: entryed');
    });
  } else {
    res.status(400).send('No message defined!');
  }
};
node.jsではパッケージを管理するにはこのファイルを使います
ここに、データストアの行を追加します package.jsonは
{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "@google-cloud/datastore": "latest"
  }
}
こんな感じです。
作成ボタンを押下すると関数がデプロイされます(コンパイルエラーが出た場合は適宜修正して)。
次にブラウザからHTTPトリガーのURLにアクセスします
https://us-central1-develop-173700.cloudfunctions.net/mottainai-push?ID=5629499534213120&lat=34.001&lon=135.5&weight=2.3
ブラウザでなくてもcurlコマンドでもプログラム内のHttpClientでも何でも良いです。

間違ってなければSuccseと表示されます
データストアのコンソールを表示すると、エンティティが一つ追加されてる筈です。

では次にデータストアから座標を取得するHTTPトリガーを作成します
こちらは単純に求められたIDの座標を返すだけです
  • 座標は他ドメインで使用する想定なので、レスポンスヘッダでCORSを許可します
index.jsは
var url = require( 'url');

/**
 * Responds to any HTTP request that can provide a "message" field in the body.
 *
 * @param {!Object} req Cloud Function request context.
 * @param {!Object} res Cloud Function response context.
 */
exports.helloWorld = function helloWorld( req, res) {
  // Example input: {"message": "Hello!"}
  if( req.method=='GET') {
    // Everything is okay.
    var datastore = require('@google-cloud/datastore')({
      projectId: 'develop-173700',
//      keyFilename: '/path/to/keyfile.json'
    });
   
    datastore.get( datastore.key( [ 'mottainai', url.parse( req.url, true).query.ID]))
      .then( (results) => {
      // ID found.
      const entity = results[ 0];
     
      console.log( url.parse( req.url, true).query.ID);
      console.log( JSON.stringify( entity));
     
      res.header( 'Access-Control-Allow-Origin', req.headers.origin);
      res.header( 'Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
      res.header( 'Access-Control-Allow-Methods', 'GET');
      res.header( 'Access-Control-Allow-Credentials', true);
      res.status( 200).send( entity.latLng.latitude +','+ entity.latLng.longitude +','+ entity.weight);
    });
   
  } else {
    res.status( 400).send( 'No message defined!');
  }
};
 こんな感じ。
package.jsonは全く同じなので省略します。
 先程と同じく、作成ボタンを押下して関数をデプロイします(完了までちょびっとお待ち下さい)。

デプロイ完了後にHTTPトリガーのURLへアクセスすると
https://us-central1-develop-173700.cloudfunctions.net/mottainai-pull?ID=5629499534213120
先程保存されたエンティティの位置情報が取得できる筈です。

 これで、データの保存と取得の仕組みがサーバを用意せずに実現できました。

 最後にクラウドストレージに見た目となるHTMLを配置します。
 バケットを作成して、その中にHTMLを配置して、公開リンクのチェックを付けるだけです。
 このバケットはクラウドファンクションズで設定したバケットと同じにしといた方が解り易いです(別のバケットでも可能)。
今回は取得した座標を真ん中にしたグーグルマップを表示するのを作ってみました。
グーグルマップの表示にはAPIKeyが必要です。そちはらスタートアップガイドをご覧下さい。

ちなみにクラウドファンクションズで設定したバケットには作成した関数の履歴がzip形式で保存されます。

 幾らクラウドストレージが格安とはいえ、最新版のファイルとjson以外は要らないので、定期的に削除しておきましょう。

以上の様な工程で、クラウドストレージを用いた簡単サービスの作成になります。
Webサーバを用いたセッションの管理(つまりログインの機能)は使えないんですが、セッションに依存しない簡単な機能であれば無料(もしくは格安)で実装出来てしまいます。
例えば、定期実行するログの収集や、単純な集計等はこれで実現できそうです〜。

2017年10月21日土曜日

RaspberryPiでUSBメモリの日本語ファイル名の文字化けについて

あまプロではRaspberryPiを使った組み込みプログラミングもお教えしています。

ラズパイにはUSBが付いてまして、そこにマウスやキーボードを指す事が出来ます。
当然USBメモリも指す事が出来るのですが、あるラズパイではUSBメモリ内の日本語ファイル名が文字化けするという現象が起きてました。

他のラズパイでは日本語ファイル名の文字化けは起きてないので、何か設定の違いで起きている現象だと考えられます。
色々調べた所、usbmountというパッケージが原因という事が判りました。
どうやらこのusbmountというパッケージをインストールすると、USBメモリ内の日本語ファイル名が文字化けてまう様です…。
そもそもusbmountパッケージ無しでもラズパイは自動的にUSBメモリが挿入されると認識してマウントしてくれるので、usbmountパッケージは削除しました。

これで日本語ファイル名が文字化けする問題が解決しました。

2017年9月28日木曜日

Edubuntuで共有ディレクトリを開けない

あまプロでは生徒のパソコンにEdubuntuを使用しています。

先日、パソコン間でファイルを共有し様として問題発生。
Edubuntuから他のパソコンの共有ディレクトリを開けない現象が発生しました。
共有ディレクトリというか、ネットワーク上のコンピュータ一覧すら表示できません…。
ずーっとこのまま動きません。
サーバ側はUbuntu17.04で、他のクライアントUbuntu16.04からは表示出来ました。
ファイル共有にはsambaというソフトを使うんですが、sambaがインストールされてへんのかな?
と疑ってみましたが、 クライアント側にはインストールされてました。

$ smbclient //192.168.0.54/共有ディレクトリ
WARNING: The "syslog" option is deprecated
Enter user's password: 
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.5.8-Ubuntu]
smb: \> ls
  .                                   D        0  Sun Sep 10 07:23:53 2017
smbclient単独だと共有ディレクトリの表示やファイルのアップが出来ました。めっちゃめんどいです( -.-)
Nautilus(Ubuntuのファイルマネージャ)経由やとあきません…。

EdubuntuみらNautilusは共有ディレクトリにアクセス出来へん制限でも付いてるんかしら?

2017年9月19日火曜日

スクレイピーについて

あまプロではシステム開発の案件もお受けしています。
個人なんで、大きな案件には対応出来ませんが、国内の殆どは小さな案件の集まりです。

先日、スクレイピングの案件が有りまして、その中でScrapyというスクレイピングフレームワーク使う場面が有りました。
ページ内の要素をCSSセレクタで要素を指定するのですが、
ScrapyのCSSセレクタはtbody要素を無視する(認識しない)仕様みたいです
tbody要素をセレクタから削除すると意図しか結果になりました

小一時間悩みました…

2017年9月15日金曜日

Scratchで音が出ない…

あまプロでは教室でLinuxを使っています(正確にはEdubuntu)。

教室には10台以上のパソコンが有り、生徒へ自由に貸出して、日々パッケージが更新されますので、全く同じパソコンという物は有りません。
不具合も時々起こるのですが、今日は音が出なかった時の話。

Scratchでプログラミングを教えてた時、一台のパソコンから音が出てない事に気が付きました。
環境はUbuntu17.04でFirefox55.0.2でShockwaveFlash27.0.0.130です。
他のパソコンでは音が出てるので機械(ハードウェア)の故障を疑ったのですが、スピーカテストで音は聞こえます…。

色々調べて試した所、Edubuntuではpavucontrolというパッケージをインストールする必要が有るそうです。
どうやら、UbuntuのFirefox52から音出力の仕様が変わったそうらしいです。

sudo apt install pavucontrol
でScratchの音が出る様になりました♪

2017年9月13日水曜日

PostgreSQLで空の配列を抽出する

あまプロではシステム開発も行っております。

先日、PostgreSQLの案件が有りまして、それで配列の型を使う機会が有りました。
今までポスグレの配列は使った事が無かったんですが、便利やったんであメログ。

空(要素数0)の配列を取得する方法が何処にも載ってなかったので調べました。
SELECT a FROM t WHERE array_length( a, 1) is null;
だそうです。
aが配列です。
もっと簡潔に書けるかもしれませんが、今回はこれで。

2017年8月17日木曜日

BigQueryにimportする

あまプロではシステム開発も請け負っております。

先日、GoogleBigQueryを使う機会が有りまして、はまった箇所が有りましたのであメログ。
  1. SQLの書式を拡張している
    SQLの書き方がちょっと独特
    select * from tablename;

    select * from [projectID:dataset.tablename];
    となります
  2. 大量データのインポートはGCPStorage経由で
    データインポートの手段は数種類用意されてますが、大量データとなると手段が限られます
    ジョブストリーミングでインポートする方法も有るんですが、Storageからインポートする方法をご紹介
    例えば1000万件のCSVデータやと数十GBになるので、アップロードするだけで何日も掛かりそう…現実的ではないです
    Storageからはgzip( *.csv.gz)形式のインポートが出来るんです
    エンコーディングはUTF-8ね
  3. gzipインポートは単一ファイルのみ
    ついついいつもの癖で
    tar -zcvf testdata.csv.tar.gz testdata.csv
    とかすると、インポート時に
    Error detected while parsing row starting at position: 0. Error: Bad character (ASCII 0) encountered. (error code: invalid)
    という謎のエラーを吐きます
    どうやらtarコマンドで一つのファイルを結合した為に、無効なデータが生成されてしまった様です…一つのファイルを結合しても無意味なのに気付かなんだ orz
    gzip -c testdata.csv > testdata.csv.gz
    で事足りました
実際に使てみんと、なかなか知見は貯まりませんなぁ

ちなみに2000万件のCSVのgzipデータのインポートは三十分くらいで完了しました
ローカル(2.1Ghz,6GB)で圧縮するだけでも同じくらい掛かったんで、やっぱ速いですね
ちなみにちなみにデータ作成はシェルで行ったんですが、ローカルで半日くらい掛かりました…

2017年7月20日木曜日

GCPのStorageにアップロードすると

あまプロでは小さなシステム開発案件をお受けする事が有るのですが、GCPを使う事が有ります。
HTML/JavaScript/CSSの場合はCloudStorageを利用するのですが、先日気付いた事が有ります。
ファイルをアップロードしても反映されないんです。
バケットという単位でURLが割り振られまして、その中にファイルをアップロードして公開すると、URLから参照できる…筈なんですが、一度アップロードしたらサーバにずっとキャッシュされるみたいで、残るんです。
ファイルを修正してアップロードしても、前のファイルから更新されないんです。
ファイルを一旦削除しても、削除した筈のファイルが公開URLから参照できるんです。
思い切ってバケットを一旦削除してみたんですが、それでも公開URLから参照できるんですよね…。

一応フィードバックは送っておきましたがこういうもんなんですかね?

2017年7月19日水曜日

UbuntuのFirefoxとFlashで日本語入力出来ない

あまプロでは生徒へ無料でPCを貸し出してます。
出来るだけ教室の負担を抑えるべく、OSはEdubuntuを使っています。
Edubuntuの中身はUbuntu(更に言えばDebian)なので、現在のバージョンは17.04になります(Ubuntuは四月と十月にアップグレードされます)。

ブラウザはFirefoxがインストールされているので、FlashPlayerScratchがほぼ動かせます。
なんですが、FlashPlayerはどうもWindows向けに最適化されてるらしく、Linux版はちょいちょい不具合が出ます。
現在のバージョンはFirefox54.0とShockwaveFlash26.0.0.137です。
現在のバージョンではFlashで日本語入力が出来ません。
数箇月前までは入力できてたのですが、最近入力出来なくなりました。
半角入力は現在でも可能なのですが、全角入力に切り替えると入力出来なくなります。
コピペが可能なので、現在はURLの所に仮入力して、コピーして、Scratchへペーストして回避してます。面倒臭いです…。

Flash側と日本語入力側のどちらに原因が有るのか判りませんが、Scratchの次期バージョンではFlash不要になりますし、Flashなので当不具合が改修されるには時間が掛かりそうです(最悪の場合は改修されへんかも)。

ググっても解決策が出て来なくて、中途半端に回避できるので放置しとります。
どなたか解決策をご存知の方、ご教示願いますm( _ _)m

2017年7月10日月曜日

無線LAN換装

あまプロではパソコンをお持ちでない方へもプログラミングをお教えしてますので、(安い)ノートパソコンを取り揃えてます。

ご厚意で使わないノートパソコンを譲り受ける場合が有るのですが、動かなかったり、無線LANが付いてへん場合が有ります。
そんな時は動かへんノートパソコンの無線LANカード(とアンテナ)を取り外して、動くノートパソコンへ付け替えて、資源を有効活用しています。

色々パソコンを解体してると少し技術が貯まって来ましたので、ここらで一つあメログ。
今回はNEC LL370/KからNEC VY25AA-9 に無線LANを移す例です。
必要な工具は精密ドライバ(先の細いやつです)とラジオペンチです。

1.先ずLL370/Kのネジを全部外す。
 裏面は勿論、側面もゴム足の中も内ゴムの中も全部外す
 それでも外れへん場合は中のCPUファンとか冷却装置とか外せる物から外す

2.
内ゴムの下にネジが隠されてるPCも有ります。
ネジを外して枠も外すとこんな感じ
液晶モニタと外枠の間にアンテナが這わされてました
これを取り出します。
アンテナ線は本体から蝶番(ヒンジ)部分を通って蓋に貼り付けるのが一般的みたいです。
 本体側ではこんな感じで無線LANカードへ接続されてます。
 ちなみにアルプス電気さんのAPLJ6-1というカードでした。
miniPCI expressポートからカードを抜いて、アンテナ線も外します(ラジオペンチで端子部分を 引っ張ると外し易いです)
3.摘出完了
途中ちょっと端折ってますけど、取り外しはそない難しくないと思います。
全部外すと何だかんだで結構な量のネジとゴム足になります。
4.外した時と同様に、換装先のPCも全部ネジを外します。
 液晶モニタを外すと、無線LANが付いてへんPCでもアンテナ線だけ設置されてる場合が有ります。
 換装元のPC用のアンテナ線を換装先のPCに這わすので、ちょっと長さが足らへんかったり、余ったりする場合が有りますが、上手いこと這わせます。
 蓋部分から、蝶番(ヒンジ)部分にアンテナ線を通して、miniPCI expressポートまで辿らせるのは、時間も掛かりますし、手先の器用さが要ります。のんびり参りましょう〜
こんな感じで換装先に設置します。
  カードのネジ穴と本体のネジ穴が合わへんので、隙間に紙を詰めて回避しました。
5.
 PCを起動してみます
Wi-Fiはハードウェアスイッチで無効になっています だと?
 このメッセージが出る場合はFn+F2とかFn+F1でスイッチが有効になる場合が有ります。
 BIOSの設定で切り替える場合も有るそうです。
 今回の場合は換装先のPCがそもそも無線LAN未対応機種でしたので、上記の方法ではなく、物理スイッチを切り替える必要が有りました。
6.
PC前面右側に注目
その内側にスイッチが有りました
 こいつをパチっとなして、起動しますと
見事、Wi-Fiが有効になっとります〜。
 あまプロではEdubuntuを使っていますが、多分WindowsでもMacでも同じです。
 後は通常通り無線LANを接続するだけです。

その他細かい注意点は
  • ネジが固い場合が有りますどうしてもネジ穴を舐めてまう場合が有るんですが…そういう潰れたネジ用の専用工具も有りますので、駆使して外したりましょう
  • 電波法の絡みで、特定無線設備の技術基準適合証明等のマーク(技適マーク)が付いてへん無線LANカードは使ったらあかん場合が有ります
    詳しくは最寄りの総合通信局へお問い合わせ下さい
    当例の様に技適マーク取得済みのカードの換装は問題ないです。
 こんな感じで無線LANカードを換装します。
メモリの増設選りちょっと難しいですけど、資源の再使用の観点からも良ぇかなと考えてます。

2017年4月29日土曜日

Mapillaryアプリでアップロード出来る様になりました

先日、Mapillaryアプリで写真をアップロードできないという記事を書きましたが、昨日のアップデートでversion:3.54になり、アップロードできない不具合が改修されていました。
めでたしめでたし…
アップロード出来る様になったので、早速マッピングして写真をアップしました。

さぁAndroidユーザの皆さんお待たせしました、マッピングし放題でっせぇ〜

2017年4月19日水曜日

Mapillaryアプリで写真をアップロードできない

Code for Amagasakiではオープンデータやオープンソースの活用しています。
その中でも特にOpenStreetMapの地図データ作成イベントを定期的に行っています。

先日も地図が好きという方にOSMを紹介さしてもらったんですが、 パソコンが不慣れなのにも関わらず非常に興味を持ってくれました。

地図作成の際にはMapillaryというサービスを使っています。
スマホやタブレットにアプリをインストールして、位置情報付きで写真撮影して、アップロードするとOSMの地図編集時にその写真を見ながら地図が描けるというなかなか便利なサービスです。

なんですが、このMapillaryさん、結構頻繁にアップデートされておりまして、機能改善されるなら良ぇんですが、現在のAndroid版の最新3.49では写真の様にアップロードがいつまで経っても終わらない現象に悩まされております。
 早よ直して欲しいなぁ…。
しゃーないんで、サイトのから写真をアップロードしてるんですが、サイトからやとカメラの方向の情報が渡せない様で全部北向きになってまいます…。以前は普通にアプリからアップロード出来てたんで、直に直ると思います。

ちなみに無事にアップロードしたらこんな感じに、写真を見ながら地図が描ける様になります。

2017年4月7日金曜日

リブレオフィス5.3

あまプロでは教室で使うパソコンのOSにLinux(のEdubuntu)を使てます。

Edubuntuには標準でLibreOfficeというオフィスアプリがインストールされてます。
先日、そのリブレオフィスのバグ登録を行ったという投稿をしましたが、そのバグが改修されたバージョンが総てリリースされました。
 まぁ、私は報告しただけで、改修してくれたのは別の方ですけど…。

Ubuntu17.04は4/13にリリース予定で、その最新のUbuntuには上記のLibreOffice5.3系がインストールされています。

これで春から快適オフィス生活〜

2017年2月17日金曜日

ホームページ構築サービスについて

あまプロではホームページの作成業務も行っています。
静的なホームページを作成する場合は無料のホームページ作成サービスを使わせてもらっています。
昔はホームページと言えばHTMLを直書きしてまして、ちょっと昔はオーサリングツールで構築してました。
最近ではオーサリングツールがWEBサービスになっています。

各サービスは日々進化していますので、差は殆ど無いのですが、気になったので比較してみました。
サイト名Strikingly Wix Jimdo Weebly Google Site
SSL×××
無料プラン
日本語
広告なし×
日本で人気なのはJimdoでしょうか。勉強会も良く聞きます。
ほんまに大きな機能差は殆ど無く、使い勝手は各人の好みに依ると考えます。
個人的には元に戻す/やり直し機能の有るグーグルサイトも好きです。

私は利用した事が無いので判りませんが、サポートは各サービスで違うと思います。
中には日本語の電話対応をしてくれるのも有るでしょう。

切磋琢磨して更に改良して頂けると、利用者として嬉しいです😅

2017年2月8日水曜日

WordPress脆弱性について

あまプロではお客さんのホームページの管理保守も請け負っております。
お客さんの中にはWordPressでホームページを更新してはる所が多いです。

WordPressでは先日1/26にコンテンツインジェクションの脆弱性が公表され、お客さんのホームページは脆弱性が該当するバージョン4.7.1でした。
公表されたその日の内に外部から脆弱性を用いた不適切な投稿がされていました。

そちらのお客さんの環境ではセキュリティの自動更新を設定していなかった為に、外部から勝手に無関係な投稿をされてしまっていました。

WordPressの自動更新を適用し、不適切な投稿を削除して現在はホームページも復旧しております。
ほんまに…油断なりませんね。

2017年1月27日金曜日

Re: インプレスでプレゼンテーションの軽量化の際にファイル名が文字化けする

先日投稿したLibreOfficeバグですが、早くも修正されて次期バージョンでリリースされるそうです。

総てのバグが直ぐ改修される訳ではないですけど、正しくバグを報告すると開発者の皆さんへ知らされ、可能であれば改修されるんですね。
あまプロではオープンソースに依存しているので、色々な形で貢献していきたいと考えております。
主に周知とバグ投稿やけどね。

今回は日本語環境のバグでしたので、英語圏のリブレユーザは興味無いかなと思ってたんですが、日本の開発者の方が直ぐ改修して下さいました。

ぼちぼち自分でもリブレのバグを改修出来る様にならなあかんなぁ…。

デジタルオーシャンでプロセスがkillされる

あまプロではプログラミング教室の他に様々なシステム開発案件を請け負っております。

先日あるお客さんの環境で開発しててはまった点をご紹介。
その案件はデジタルオーシャンというサーバ(IaaS)上での実装でした。
後ろではAWSが動いているそうです。
社内システムって事で取り敢えず最安プランでの開発だったのですが、何故か環境構築時にインストーラプロセスが強制停止されてしまう現象に遭いました。
何度遣っても
(Killed)
って出るんです…。
何でかなぁと色々調べた(先ずは自分を疑う性質なんで、結構調べました)所、サーバのメモリ不足が原因でした。
最安プランは1CPUの512MBなのですが、インストーラが600MB近く消費してたので、プロセスがkillされてました…。
お客さんにプランを変更して頂いて、無事に解決しました。
swapを増やしてたらプランを変えずとも回避できたのかな?

まぁ今回は原因が掴めて何選り。

2017年1月17日火曜日

インプレスでプレゼンテーションの軽量化の際にファイル名が文字化けする

本日はパソコンを納めたお客さん宅に一時間だけサポートにお伺いしてました。

メールの設定や、ブラウザのインストール等々をお手伝いして、ソフトの32bitと64bitの違いを説明してました。
お使いになっているLibreOfficeのImpressでファイルを開いていると途中で落ちたり、動作が遅くなるとの事。
画像が多いプレゼンテーションファイルでサイズが22MBとちと大きめ…。
確かに最新のパソコンやのに、Impressで開くと動作がもっさりしていますな。

設定でメモリ使用量を増やして、プレゼンテーションの軽量化を行ってみました。
うん、動作も軽快になり、落ちる事もなくなったので、これで様子を診て頂きます。

で、その「プレゼンテーションの軽量化」を行った際に…Impressのバグを見付けてしまいました(年明け一発目!)。
例えば"ファイル名"test"を軽量化した際は"test.mini"というファイル名になるのですが、日本語ファイル名の"てすと"を軽量化すると"%E3%81%A6%E3%81%99%E3%81%A8.mini"というファイル名になってしまいます。
名前を付けて保存の場合は正しく表示されるのに…何故かwikipediaのURLみたいにURLエンコードされたファイル名が初期表示されとりますねぇ。
ファイル名を手打ちで修正したら回避出来るっちゃ出来るんですけど、これでは困るのでバグ報告しておきました。
ソースコードを解析した訳やないですけど、名前を付けて保存の処理を写したら解決しそうな気がします。
お願い、直して偉い人。

2017年1月10日火曜日

オープンストリートマップのiDエディタについて

あまプロでは時々OpenStreetMapで地図を描いています。
オープンデータの勉強と、地域の勉強の為に活用しています。

主に尼崎市内の地図を描く練習をするのですが、先日尼崎市内をiDで編集する際にブラウザがフリーズ(ハング)するという現象に遭遇しました。
場所はこの辺りです。当環境では再現率100%です。
その場合はJOSMで編集して回避しましたが、iDのバグっぽかったので、念の為にバグ報告を挙げておきました。
どうやらあまプロの環境だけでなく他の環境でも起こる現象の様です。

iDはJavaScriptで実装されているので、Firefoxでデバッグすれば原因を突き止められそうな気もするんですが…直して、賢な方~。

2017年1月7日土曜日

Writer crashes when adding a textbox and undo

先日投稿したLibreOfficeWriterのバグですが、早速改修され次の次の5.4.0でリリースされるそうです。
仕事が速いですねぇ。

私が昨年報告したLibreOfficeBaseのバグは全然直される気配が無いんですが…人気が有るプロダクトやと速攻で改修ですわ。

5.4.0なんで、春頃にはお目見得すると思います~😄

2017年1月1日日曜日

新年のご挨拶

酉年です。
明けましてお目出度う御座います。

暮れに滑り込みでLibreOfficeバグレポートを提出ました。
Ubuntu環境限定なんですが、Writerでテキストボックス作成後に元に戻すとクラッシュするというバグです。
Windows環境では起きないんですけどね。

リブレオフィス関連でもう一つお知らせが有ります。
リブレオフィスは現在新しい5.3.0のベータ版試験期間中です。
その5.3.0で、昨年提出したバグが修正されてます。
有り難う御座いますm( _ _)m
背景色の設定がBasicIDEに反映されへんというバグです。
リブレも少しずつですが良くなっております。

尚、5.3.0はもう暫く試験期間が続きますので、試験に参加しても良ぇよ~という方は(自己責任で)ご協力下さい。
この後ベータ版試験が終わるとリリース候補版試験となり、最後に晴れてリリースとなります。
色々と新しい機能も追加されてますのでお楽しみに!

それでは本年も宜しくお願いします。