2018年7月30日月曜日

Google Apps Scriptのfor in文について

あまプロではグーグルスプレッドシートでスクリプトを組む事が有ります。

グーグルのスクリプトはApps Scriptという名前で、JavaScriptに似た仕様になっています。
利用にはGoogleのアカウントを作成する必要が有るのですが、無料でアカウントさえ作れば、グーグルサービス同士の連携が出来るので、とても便利です。
例えば、グーグルフォームでアンケートを収集して、アンケート受付をGmailで送信するとかが可能になります。

今回はみんなのサマーセミナーで当日シフトを作成するにあたり、
 グーグルフォームでシフト可能日を選択してもらい
 グーグルスプレッドシートへシフトを割り当てる
というスクリプトを作成しました。

嵌まりポイントが有りましたのであメログ。
例えば配列を繰り返し処理する場合、以下の様なスクリプトを組んだとします。
function myFunction() {
  var abc = [ 'a', 'b', 'c'];
  for( var i in abc) {
    if( i + 1 == 2) { //ここね
      console.log( abc[ i]);
    }
  }
}
とした時、意図した結果になりません…。
デバッグで追跡したみたところ、iにはStringが入っている事が判明しました。
良く解らないのですが、インクリメントして文字列に変換してくれてるんかな?
仕方ないので
function myFunction() {
  var abc = [ 'a', 'b', 'c'];
  for( var i in abc) {
    if( parseInt( i) + 1 == 2) {
      console.log( abc[ i]);
    }
  }
}
として数値に変換して回避しました…。

どうもGASのfor in文では反復子(i)を文字列で扱っている様です…。
反復子の操作はバグの元という意見も有るので、わざと扱い難くしてはるんかな?
一層の事この場合は
function myFunction() {
  var abc = [ 'a', 'b', 'c'];
  for( var i = 0; i < abc.length; i++) {
    if( i + 1 == 2) {
      console.log( abc[ i]);
    }
  }
}
にした方が良ぇんかな?

2018年7月25日水曜日

3Dモデルについて

あまプロでは3Dモデルを作成する案件が有ります。
今回はBlenderとthree.jsを用いて、ウェブサイトにスリッパの3Dモデルを表示してみました。
手順が少しややこしかったので、あメログ。

インストール

あまプロではUbuntuを使いますので、Ubuntuソフトウェアから簡単にBlenderをインストール出来ます。

日本語化

デフォルトではUIが英語表記になっているので、File -> User Preferences -> System -> International Fontsをオンにします。
これだけでは文字化けするので、Interface fontに適当な(/usr/share/fonts/truetype/fonts-japanese-gothic.ttf等)日本語フォントを指定します。

アドオンのインストール

Blenderで作成したオブジェクトをthree.jsで表示するにはglTF(またはそのバイナリ形式のglb)形式に変換する必要が有ります。
glTFはWebGLを用いて3D表示する為に策定されたファイル形式です。
Blenderの標準機能ではオブジェクトをglTF形式へエクスポートする機能が有りませんので、アドオンを別途追加します。
こちらからアドオンをダウンロードし、解凍して
Ubuntu(の18.04)の場合アドオンのパスは/usr/share/blender/scripts/addons/なので、
sudo cp -r glTF-Blender-Exporter-master/scripts/addons/io_scene_gltf2/ /usr/share/blender/scripts/addons/
でコピーします。
ディストリビューションによってはパスが異なると思いますので、調べてみて下さい。
これでエクスポートにglTFが追加されます。もし、追加されへん場合はファイル -> ユーザ設定 -> アドオンで、glTFエクスポートにチェックが付いてないか確認して下さい。

オブジェクトの作成

サイトに表示したいオブジェクトを作成します。
デフォルトでは立方体が表示されているので、これを編集したり、新たにオブジェクトを増やすと良いでしょう。
今回は押し出しや細分割曲面を利用してスリッパのオブジェクトを作りしまた。

UVマッピング

オブジェクトだけではちと寂しいですが、表面に画像を貼り付けてそれらしく見せる事が出来ます。
対話モードを編集モードにして、スクリーンレイアウトをUV/Editingにします。
シェーディング/UVタブのUVマッピングをスマートUV投影にしてOKを押下します。
リンク(表面に貼り付ける)する画像を下で選択すると、左画面に展開図が表示されます。
次にスクリーンレイアウトをDefaultに戻して、 プロパティのテクスチャの画像で先程の展開図を選択します。
プレビュー上ではテクスチャが反映されませんが、これで表面に画像が貼り付けられてます。
何かこちょこちょやってたら偶に反映されます。方法は有るのでしょうが、判りませんでしたm( _ _)m。

エクスポート

作成したオブジェクトをエクスポートします。
glTF形式でもglb形式でも構いませんが、今回はglb形式にしました。
ファイル -> エクスポート -> glTF 2.0(*.glb)をクリックします。
色々オプションが有りますが、取り敢えず何も変えずに保存します。

サイト組み込み

three.jsのサイトにサンプルが上がってますので、ここを参考に組み込む側のスクリプトを作成します。
ローカルで動作さす場合はダウンロードしたライブラリを参照するだけで動きます。
ウェブで公開する場合は、glbファイルとライブラリファイルもアップする必要が有ります。
ライブラリの配置が難しい場合はライブラリのCDNを使うと良いでしょう。

別ドメインにglb(またはglTFファイル)を置く場合

3Dモデルを表示したいjimdoにはglbファイルをアップ出来ませんでしたので、別途GCPのバケットに置く事にしました。
その場合、リソースのドメインが異なりますので、クロスオリジン リソース シェアリング(CORS)の制約に引っ掛かります。
なので、ここを参考にバケット側の設定を変更する必要が有ります。
レンタルサーバに選ってはglbファイルもアップ出来ますので、CORS対応は不要です。

Facebookの3D投稿

glb形式でエクスポートすると、facebookに3Dモデルを投稿出来ます。
2018年7月現在glb形式のみで、glTF形式には対応してない様です。
ファイルサイズの制限等、詳しい方法はこちらをご覧下さい。
PCからの投稿方法は簡単で、投稿欄へglbファイルをドラッグ・アンド・ドロップするだけです。
画像や動画のファイル選択からglbファイルを指定しても表示されませんのでご注意を。
こんな感じでfacebookにスリッパを投稿出来ました。
ライブラリの配置もCORSの設定も不要なので、(表示するだけなら)めちゃ楽です〜。

まとめ

ざっとこんなもんで、サイトに3Dモデルを表示する事が出来また。
みんなのサマーセミナーのサイトをWebGLに対応したブラウザで表示するとスリッパが表示されますので、楽しんでみて下さい。

2018年7月7日土曜日

vimの設定について

あまプロではubuntuを使って開発を行う事が多いです。

エディタはvimを使っています。
大抵の環境には入っている(又はインストールする事が出来る)のでこれを選んでます。

vimは標準設定では使い難く、ちょっと設定を変える必要が有ります。

例えばこんな感じ
:set ambiwidth=double
:set cursorline
:set display=lastline
:set hls
:set list
:set listchars=tab:»\ ,eol:↲,extends:»,precedes:«
:set laststatus=2
:set noswapfile
:set nu
:set nowrap
:set paste
:set statusline=%F%m%r%=[%{&fenc}][%l/%L]
:set sidescroll=1
:set showmatch
:set smartindent
:set showtabline=2
:set ts=4 sw=4 sts=4 et
:set title
:set virtualedit=block
:set whichwrap=b,s,<,>,[,]
:set wrapscan
:hi CursorLineNr cterm=bold
:hi CursorLine ctermbg=black
:hi StatusLine ctermfg=darkgreen ctermbg=lightgreen

これは出来るだけ毎回入力してます。
どんな環境でもいつでもだいたい同じ様にvimを使う為です。

これを設定するとvimがちょっと便利に使えます。

2018年6月24日日曜日

地図について

あまプロでは地図サービスでOpenStreetMapを使う事が多いです。
乗り換え検索ではGoogleMapを使いますが、チラシ作成やスクリーンショットやデザイン等ではオープンストリートマップを使います。

OSMは15年程前にイギリスで始まった、オープンデータの地図情報プロジェクトです。
簡単に言うと、ウィキペディアの地図版です。

このプロジェクトのおもろい所は、自由に地図が描けますので地図好きには最高のプロジェクトになります。
地図データはODbLのライセンスで使えます。
簡単に説明すると、営利非営利を問わず自由に変更出来ますし、データベースから著作物(地図等)を作れます。但し、データベースはODbLを引き継がなければなりません。

いきなりデータを使うなんて無理やわぁと言う方もご安心!
データベースから生成された地図画像もCCBYSAのライセンスで提供されてます。
簡単に説明すると、営利非営利を問わず自由に変更や使用が出来ます。但し、変更後の地図画像もCCBYSAになります。

縛りが全く無いとは言いませんが、かなり自由度の高い物になります。
例えば、データの方はそのまま地図サービスを提供出来ますし、俗に言う位置ゲーのマップやカーナビやサイコン等にも使えます。
有名所で言えばポケモンGOもOSMを使ってます。facebookの地図もOSMです。ヤフー地図もデフォルトでは有りませんが、地図の種類でOSMの選択が可能です。

地図画像の方も例えば印刷物やスクリーンショットに用いる事が出来ます。
地図画像はCCBYSAに加えて"© OpenStreetMap contributors"というクレジットを地図の何処かに記載する必要が有るのですが、それさえ守れば無料で無断で使えます。
OSMのサイトではこのクレジットは右下に表示されてるので、スクショを撮ると自動的にクレジットが入ります。

自由って言うても何だかんだで縛りが多い…かもしれませんが、一般的な商用のウェブ地図サービスですと更に縛りが多いです。
ウェブ地図サービスの殆どが無料で使えますが、自由に使えるウェブ地図サービスは少ないです。
それは地図サービスのデータが地図会社から提供されている為なのですが、
例えば、日本の無料地図サービスの殆どにダウンロード版(オフライン版)は有りません。
最近は携帯各社のエリアも拡大されていますが、それでも人の少ない場所や人の居ない場所はエリア外になります。
そういう場所で使えるのは当然ダウンロード版のみになります。
OSMにはOsmAndというアプリが有ります。但し、当然ですが地図データをダウンロードするにはそれなりの容量が要ります。

また、ウェブ地図サービスはウェブの外に出ると途端に縛りがきつくなります。
ほぼ使えないと言っても過言ではないです。
詳しくは各サービスの利用規約を読むしか無いのですが、基本は著作権が有りますので、無断使用は著作権侵害になります。
使用には地図会社へ使用料を支払って許諾を得る必要が有ります。

SNSを見てると週一ペースで、無断使用した地図が流れてきます。
こんな感じで。
残念ながら役所の印刷物にも多いです。先日、役所の面接の案内にウェブ地図を無断印刷して有りました…。
個人で使うには問題無いですが、ウェブ地図サービスのスクショや印刷物を無断で外部へ配るのは著作権侵害になります。

良く、地図をそのまま使うのが駄目なら自分で描きます、といって地図をトレース(下書きに使う)して自作したと言う方が居ます。
それは自作ではなく盗作です。

参考にするだけなら問題無いでしょ、と言って略地図を描く人も居ます。
例えば、良識の有る人がピカチュウを参考(パクった)にしたペカチュウを堂々とパンフレットに載せるでしょうか?
まともな団体なら載せないと思います。載せた所は倫理を疑われます。
ですが、それが地図の場合皆さん疑わずに受け入れてしまうねんな…これほんま不思議。
地図もキャラクタも記事もロゴマークもテレビ動画も同じ著作物でやで。

地図会社の地図は莫大な予算を掛けて、様々な調査をして高精度な地図を作成しています。
その成果を利用したいのであれば、使用料を支払うべきです。
高精度の地図でなくても構わなければ無料のOSMを使えば良ぇと考えます。
それが嫌なら何も見ずに地図を描きましょう。するとあなたはきっと自分の描いた地図の出来の悪さに驚き、ついつい他所の地図をチラ見してしまう事でしょう(¬_¬)
それも嫌なら地図を載せるのは控えましょう。

偶に、著作権侵害は親告罪なので、著作者でない人が声を上げるのはおかしいという意見が有ります。
親告罪には違いないです。単独の強姦や名誉毀損も親告罪です。
言われなければ罪にならなのは確かにそうですが、そこから先は個人の倫理観にお任せします。

OSMは自由度の高い地図データを提供してますので、そのデータを利用した様々なプロジェクトが派生しています。
  • Wheelmap   道路や施設が車椅子対応しているかの登録表示に特化したサービス
  • F4map    3D表示に特化したサービス(但し端末に3D表示機能が要ります)
  • uMap     地図に道案内線や吹き出し等の書き込みに特化したサービス
  • OpenLevelUp! 施設内の階表示に特化したサービス
  • OpenPoiMap 標準のタイルに表示されないPOI(地物)の選択表示に特化したサービス
           例えばAEDマップとか消火栓マップとかを作れます
  • OSMjp    標準のタイルには載らないけど、日本で要望の多い表示に特化したサービス
どれも尼の同じ場所を表示したリンクを貼り付けてますので、違いをお楽しみ下さい。

OSMを色々と紹介しましたが、もし興味を持たれた方は是非参加してマッパー(地図職人)になってみて下さい。
メールアドレス一つ有ればマッパー登録が可能です。
地元や旅行先の地図等、色々描いてみて下さい。ハマる人はハマる…筈。
注意点としては他所の地図を写さない事。これは厳禁です。
詳しくはまた次回の投稿で紹介しようと思います。

また尼限定ですが、あまプロではCodeforAmagasakiと連携して、毎年インターナショナルオープンデータデイやみんなのサマーセミナーに参加して、OSMの紹介や講習を行ってます。
ご近所の方は参加してみて下さいね〜。

2018年6月10日日曜日

コマンドプロンプトで再帰的にファイルの行数を調べる方法

あまプロでは、時々Windowsの案件を受ける事が有ります。

先日、 C#(拡張子が.cs)の行数を調べる事が有りましたのであメログ。

コマンドプロンプトで
dir *.cs /b /s > ..\csList.txt

for /f %i in ( ..\csList.txt ) do type "%i" | find /c /v "" >> ..\csline.txt
を実行します。
バッチファイルで実行する場合は%を%%に置換する必要が有ります。

カレントディレクトリ配下のC#ファイルの一覧がcsList.txtへ出力され
各ファイルの行数がline.txtへ出力されます。

Linuxのシェルスクリプトとはだいぶちゃいますが、ちゃんと出来ました。

2018年5月25日金曜日

エクセルのマクロについて

あまプロではエクセルのマクロ作成授業も行っています。

先日、簡単なマクロの授業依頼が有りましたので、デバッグの方法を教えつつVBAについて教えていました。
するとある日、生徒のエクセルで文字が入力出来なくなる問題が発生しました。
問題を切り分けてみると、他のソフトでは日本語が入力出来て、どうやらMSOfficeのみ文字が入力出来ない様です。

良く良く聞いてみると、どうやら何処かで入手したエンタープライズ版を個人のパソコンにインストールされてました。
百均のCDに手書きのプロダクトコードでした…。
エクセル起動後のメッセージを見ると、プロダクトコード入力画面が表示され、プロダクトコードを入力すると、入力したプロダクトコードが無効な為に機能を制限していますと出ています。
オフィスの入手の経緯は知りませんが、サポートに電話してみたら如何でしょう?と伝えておきました。

ちなみに、エクセルの基本はそれ程変わってませんので、自宅のマクロ作成用でしたら10年前のバージョンのエクセルでも問題有りません。そして、10年前のバージョンでしたらネットで正規品を千円程度で購入出来ます。

Ubuntuで画面を録画する

あまプロではOSにUbuntuを使てます。
Linuxにはディスプレイサーバという機能が有りまして、Xorgが長い事使われてきました。
そのディスプレイサーバ上でGNOMEやKDE等のデスクトップ環境が動作して、良く見るパソコンのデスクトップが使える様になります。
最近、新たにUnityというディスプレイサーバ(とデスクトップ環境)が登場し、Xorgに置き換わりそうでした。
しかし、利用者に不評で、置き換わりには至らず、再びXorgへ戻っています。で、今回Ubuntu18.04から新たにwaylandというディスプレイサーバが選択肢に加わりました。
初期選択されるディスプレイサーバはXorgですが、ログイン時にwaylandへ切り替える事が出来ます。
今後はwaylandに置き換わって行くんちゃうか、と言われています…。

(新しい物好きなんで)試しにwaylandに切り替えて使ってみました。
普段使いでは問題無さそうですが、未だSimpleScreenRecoderやkazam等の録画ソフトが対応してへん様です。
あまプロでは授業で作成したゲームの動画をアップしているんですが、waylandで録画しても黒しか映らず録画出来ませんでした。音は録れるんですけどね。
なので、録画する時はXorgのSimpleScreenRecorderで録画してます。
暫くはXorgを使う事になりそうです。

waylandに対応したGreenRecorderというソフトも有るらしいですが、未だUbuntuのリポジトリには載っておらず、他のリポジトリを追加してインストールする必要が有り、ちょっと面倒です。

過渡期はどうしてもこういう不具合や手間が発生してしまいます。
この先どうなるんでしょうね〜