ブログ・コラム

2020.03.30

【PHP】Google Driveへのアップロード

PHPからGoogleDriveへアクセスする事ができます。

たとえば、DBのバックアップ先としてGoogleDriveを指定することができます。

Google APIの有効化、クライアントシークレット、およびJsonファイルの取得が必要になりますが、
詳細はEnable the Google Drive APIを参照ください。

サンプルとして、ファイルをGoogleDriveへアップロードするサンプルを作りましたので、ご紹介します。

このサンプルは、コマンドから下記のように実行するとGoogleDriveへファイルがアップロードされます。

これをcrontabに設定して実行すれば、定期的にファイルをアップロードできます。

下記は、DBデータをZIP化して、そのファイルをGoogleDriveへアップロードするサンプルです。

※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。

2019.12.31

沼津へ新オフィス移転の報告(来年3月)

12/24(火)に新オフィスの契約を完了しました。

2020年3月から、沼津市に移転をします。

縁あって、沼津信用金庫の旧駅北支店(リコー通り)

の1階に引っ越すことになりました。

 

沼信さんは、このビルを

『地域活性化及び産業振興に向けて沼津市の施策と連携し、

市外から新規進出するIT 企業を中核に教育機関等との連携によるインターンシップ、テレワーク・デイズなどに活用することで働き方改革などの取り組みを推進する拠点としていく』

とのことで、公募がかかりました。

この話しを聞いて・・・・「これ、うちの会社のことじゃん!」と思い応募。

採択いただきました。

沼信さんにはとても感謝しています。

 

私たちアーティスティックスは、

メーカーへの派遣・常駐開発ばかりだったところから、

2010年に地域に根差したIT企業になりたいとの

思いで大きく舵を切り、事業形態を変えました。

それは、いばらの道、険しくうまくいかないことばかりでしが、時間がかかりましたが、やっとここまで来ました。

 

ホームページ制作、

セールスフォース構築、

ICT/IoT/クラウドを活用して

皆さんの課題をいっしょに解決することで、

「共に成長」の経営理念に一歩近づくことができました。

 

引っ越しに際しては、

沼津市役所の商工振興課のみなさんにも

ほんとていねいに相談に乗っていただき、

本日、ITオフィス等進出事業費補助金の申請を

出すことができました。

感謝しています。

 

移転してからは、単なるオフィスではなく、

この拠点を、いろんな人たちが出会い、つながり、

新たなものが生まれていく場所にしていきたい。

私たちは、その一翼を担い、

人と人、会社と会社がつながって、

単独ではできなかった新たな取り組みが生まれる場にしたい。

そのために私たちは、多くの人たちと出会うとともに、もっと専門性を磨き、みなさんの力になれるようになりたいです。

 

3月には新たなオフィスで事業をスタートします。

近くなりましたらご案内いたしますので、ぜひ遊びにいらしてください。

ありがとうございます。

2019.11.11

ちょうど四半世紀を振り返る

1994年11月11日

(株)アーティスティックスの前身、(有)アーティスティックスは誕生しました。インターネットなど、ほとんどなかった時代。経営者仲間もいませんでした。会社設立の本を買ってきて何週間も前から書類を準備して、その日、法務局の窓口に書類を出しました。法務局の窓口の雰囲気に、たじろいだことを今でも鮮明に覚えています。

設立当時は「子供部屋」と呼ばれる実家の一室が会社のすべてでした。ほどなくして高専時代の同級生がいっしょにやろうと合流。それを期に、沼津市の国1バイパス沿いにオフィスを借り、開発(長岡担当)とパソコン教室(同級生担当)を開設しました。会社設立よりもオフィスを借り仲間ができた時が、本当の意味での起業に近かったかもしれません。とても夢は広がっていました。毎日のように夜遅くまで2人で仕事していましたが、楽しくやりがいがありました。

規模拡大 その陰で・・・

開発業務のほうが利益が上がるため、2人でそちらに専念。パソコンスクールをやらなくなると広すぎるオフィス。さぁ、これからどうしようか。2人だけでやっていくのはつまらない。仲間は多いほうがいいと人を採用することにしました。何人かの中途社員に来てもらいましたがなかなか定着せず、それならいっそのことと新卒を採用することに。2人しかいないのに、新卒3名採用というかなり無茶をしました。

実務経験ゼロですべてを教えなければなりませんでしたが、3名とも一所懸命学んでくれました。

そのころになると、中途社員も少しずつ定着。新卒社員の面倒を見るという形で、いい具合に両方とも成長し、会社に定着してくれました。アーティスティックスの初期をこの3名の新卒と中途社員さんたちが支えてくれました。気をよくして翌年も2人の新卒社員を採用。人数は前の年よりも少なかったのですが、とても素晴らしい新卒学生が来てくれました。2人ともまったくタイプは違いましたが会社に入って大活躍。1人は今でも会社を支えてくれています。

今からは想像しにくいかもしれませんが、新卒を採用するのは中堅・大手ばかり。10名程度の会社では「私のような小さな会社では新卒なんてとても採用できない」と言ってるところが多かった時代。無理してでも新卒採用に踏み切ったのがとてもよかったです。新卒2年目の頃には、かなり会社に勢いがつきました。

2000年には株式会社化。前職の同僚も加わり3名が経営陣となり、さらに採用に力を入れていきました。途中、ITミニバブルの崩壊があり、社内開発から客先常駐中心に切り替わりましたが、順調に規模を拡大。24名までになりました。このまま規模を大きくしていけばいいという路線が見えてきたのと同時に、人材ビジネス的なものに少しずつ疑問を持ち始めていた、その時にそれは起きました。

リーマンショックで大きく会社のかじを切る

2008年9月、リーマンショック。これからどうなるんだろうか、漠然とした不安。先が見えませんでした。当社への影響は年が明けて1月。お客様先の業務縮小とプロジェクトの相次ぐ中止。社員24名のうち15名の業務が一気になくなりました。IT業界ができて数10年、初めての経験でした。このままでは会社がなくなる、アーティスティックスをどの方向に持っていくか、非常に悩みました。いくつかの選択肢があった中、アーティスティックスは「人材ビジネスからの脱却」に大きく舵を切りました。常駐・派遣業務は最小限にして、最終的にはなくす。その代わりに、ニーズを持ったお客様と直接つながることを目指しました。いくつかの業務を試し、ホームページ制作、クラウド型顧客管理システムSalesforceの構築支援の2つを新規事業として立ち上げました。しかし、それはいばらの道でした。

ニーズを持った顧客と直接商売をすること。つまり自社で営業をしていくということです。これは思いのほか大変でした。私を筆頭に社員全員が技術者。営業なんてしたことはありません。人材ビジネスの御用聞き営業とはまったく違います。業務がないから全員営業。技術者もお客様のところにって提案しました。それが嫌で会社を去った人もたくさんいました。とても苦しい時代でしたが、その結果、非常に強い会社に生まれ変わった、そう思います。人材ビジネスに漠然とした不安を持っていた私でしたが、リーマンショックのおかげで、そこから脱することができました。大変な経験で二度としたくありませんが、今思えば、私たちには必要なことだったのかもしれません。

ドットツリーそして新たなステージへ

2016年、伊豆市修善寺にできたドットツリー修善寺にサテライトオフィスを構えました。伊豆地域に根差してサービスを提供していくための拠点であり中小企業が手を組むビジネスチームでした。そこに新たな人材が加わり「みらいラボ@ドットツリー」という当社のラボ(研究開発部門)を作ることができました。新規事業のWeb、クラウド事業、そして長年培ってきた組込開発をベースとしたIoTやアプリ開発、これらを複合的につなげてお客様の課題を一緒になって解決するのが、みらいラボ@ドットツリーのコンセプトです。静岡県のITコーディネータに認定いただき、また三島市とはICT等を活用したまちづくりに関する協定を結んだりと、さまざまな相談に乗ることができるようになりました。

苦しい時代を一緒に乗りきってくれた社員さんたちは、目覚ましい成長を遂げました。このころに経営理念を「共に成長」に書き換えました。共に成長の共には、まず第1には社員さんたちです。この社員さんたちと共に仕事をしていきたい。少しずつでもいいからお互い成長していきたい。やっていく仕事もレベルアップしていきたい。そのためにも、お客さまの事業成長に貢献して一緒に成長していきたい。そして、この地域の成長の一翼を担える私たちでありたい。そんな思いで「共に成長」を新しい理念として掲げてきました。

四半世紀がたったからというわけではありませんが、これからのアーティスティックスは、がらりと変わっていきます。お客様の事業成長や地域の成長に今以上に貢献できるようになります。30周年に向けて、これからがまた楽しみです。

2019.10.30

【Android】署名付きapk作成時の注意点

いざapkファイルを作って動作確認をしようと思ったら、インストールできない、アプリが起動しないという経験がないでしょうか。

そんな事例を紹介します。

端末により、署名付きapkがインストール出来ない

端末により、署名付きapkがインストール出来ないケースがあります。
(右図のように「アプリはインストールされていません」とエラーメッセージがでました。)

私が確認したのは下記条件です。

端末 Priori 3 LTE
(OS android5.1)
開発環境 Android Studio 3.1.4

Android Studio2.3から、署名付きAPKを作成する際に、Signature Versionsを選ぶ項目(V1, V2)が追加されました。

作成の際にこの項目にチェックが無い場合、端末のOSバージョンによってインストールできなくなります。

私の場合は、V1を選択をしていなかった(V2のみ選択)ためにインストールできない状況になりました。

後述しますが、これによりAndroid7.0未満の端末(今回は5.1)で、apkがインストール出来ない、という事象が発生しました。

改めて、V1, V2両方の署名にチェックを入れたところ、無事7.0以前の端末でもインストール出来ました。
(基本的には、両方チェックが推奨されています。)

V1は従来の署名方法で、V2はAndroid7.0以降の「インストール時間高速化」や「セキュリティ面が強化」された署名方法のようです。

挙動としては、Android7.0以降では「V2」がインストール時に検証され、7.0以前では「V1」が検証(V2は無視)されます。

今回は、この「V1」を選択していなかった為、検証すべき署名が見当たらなかった(OS5.1ではインストール出来なかった)ということになります。

※ ちなみに、Android Studio2.2以前では、デフォルトでV1とV2両方で署名されていたようです。
(2.3からはそれが選択できる(必要に応じてV1またはV2を外せる)ようになった。)

GoogleMapが表示されない

Android Studioでデバックしている時は地図が表示されていたのに、署名付きのapkを作ってインストールすると地図が表示されなくなる経験をしました。

API(Maps SDK for Android)の設定に於いて、「使用アプリを制限する」為にSHA1の登録が必要となります。

このSHA1には「デバッグ用」と「リリース用」があるのですが、「デバッグ用」のみ設定しているとapkを作ったときに地図が表示されなくなります。

以下コマンドでリリース用のSHA1が取得でき、apkを作ってインストールしても地図が表示されるようになります。

  • keytool -list -v -keystore your_keystore_name -alias your_alias_name

ちなみにデバッグ用のSHA1取得は、以下コマンドとなります。

  • keytool -v -list -keystore ~/.android/debug.keystore

参考サイトに記載されているSHA1の取得方法のコマンドは、デバッグ用の取得方法が多くあり、これを鵜呑みにコピペ実行して「設定は全て完了した」と思ってしまいました。

まとめ

今回の二つとも、分かってしまえば本当に何てことない単純なミスなのですが、最初の段階で見落としてしまうと、後でその原因を追求するのに、意外と時間が掛かってしまったりします。

みなさん、気をつけましょう!

※この記事に対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。

2019.07.03

【C#】マウスフック

キーボードフックの記事にも記載しましたが、Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。

マウスを左クリックした、マウスを動かしたなどのイベントをwindowが非アクティブ状態で取得したい場合は、マウスのイベントをフックする必要があります。

以下にサンプルソースを掲載します。

サンプルソース

namespaceなどは適宜読み替えてください。

イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。

この関数の引数の意味は下記のとおりです。

第1引数 フックするイベントの種類

マウスのイベントをフックする場合は、
WH_MOUSE_LL(14)を指定する。

第2引数 フック時の関数のアドレス イベントが発生した時に実行される関数。
第3引数 インスタンスハンドル 現在実行中のハンドルを渡す。
第4引数 スレッドID 0を指定すると、すべてのスレッドでフックされる。

サンプルソースのように指定すると、マウスボタンのクリック、マウス移動などのイベントが発生する都度EventMouse関数が呼ばれるようになります。

サンプルでは、マウスの座標をデリゲート関数に渡しています。

最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。

このサンプルは、下記のように実行すると、MouseEvent関数が実行されます。

※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。

2019.06.05

【C#】キーボードフック

Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。

キーボードが押された、離されたイベントをwindowが非アクティブ状態で取得する必要がある場合は、キーボードイベントをフックする必要があります。

以下にサンプルソースを掲載します。

サンプルソース

namespaceなどは適宜読み替えてください。

イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。

この関数の引数の意味は下記のとおりです。

第1引数 フックするイベントの種類

キーボードのイベントをフックする場合は、
WH_KEYBOARD_LL(13)を指定する。

第2引数 フック時の関数のアドレス イベントが発生した時に実行される関数。
第3引数 インスタンスハンドル 現在実行中のハンドルを渡す。
第4引数 スレッドID 0を指定すると、すべてのスレッドでフックされる。

サンプルソースのように指定すると、キーが押される/離される毎にEventKey関数が呼ばれるようになります。

サンプルでは、キーが離された時にコンソールへコメントを表示し、処理をするようにしています。

最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。

このサンプルは、下記のように実行すると、キーが離される毎にKeyEvent関数が実行されます。

※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。