月別アーカイブ 9月 2018

takahashi 著者:takahashi

“純正Android端末”なGoogle Pixelシリーズ、ついに日本での発売が決定!!!

今朝、突然のビッグニュースが飛び込んできました!!!

Google PixelシリーズはGoogle社が直接設計・販売する正真正銘の純正ブランドで、今回発売が予告されたAndroidスマートフォンはPixelシリーズの新モデルのスマートフォンであるPixel 3である可能性が高いとのこと。

Googleの「Pixel 3」日本発売が濃厚に。ティザーサイト公開 – 価格.com

Pixel 3はAndroid OSの最新バージョン”Android 9 Pie”が搭載される予定となっており、また、Google公式ビルドのAndroid OSがインストールされるため、OSのアップデートも継続的に入手できる可能性が高いと思われます。

さらにPixelではGoogleの最新の成果(“Google Lens”や”Google アシスタント”のような)もいち早く試すことができるのも大きな特徴で、Google・Androidのファンにとってはまさに夢のような端末になっています。

Pixelシリーズのスマートフォンは、今まで第二世代まで出ていましたが、いずれも日本国内での販売はありませんでした。
そればかりか、発展途上国向けとされる(Wikipedia)純正Android OSを搭載したブランド、”Android One“が日本国内で発売されており、一部では、現状iPhone一強となっている日本国内向けにGoogleがPixelシリーズの端末を発売すること自体が絶望視されてきました。

Google Pixel 3は日本発売されないだろう……と考える3つの理由 – naenote.net

そういった経緯もあり、今回の発表にはガジェット界隈全体で大きな話題となっています。

現状日本で発売されているAndroid端末はAndroid Oneを除き、新発売の機種に最新のAndroid OSが搭載されなかったり、発売から1、2年ほどでメーカーやキャリアがアップデートを打ち切ってしまったりする問題があり、Androidへの待遇はあまりいいものではありませんでした。
スマートフォンのスペックも一定のラインまで達してしまった現在、Androidを搭載する端末もどこか陳腐化してしまっているような印象だったので、今回のGoogle Pixelの発売がそういったAndroidスマートフォンの現状に風穴を開けてくれるのではないかと密かに期待をしています。

ただ、以前から指摘されていたように、端末を”買わせる”ことで収益を上げようとしてきた国内の大手キャリアが、Pixelのように比較的”長く使える”端末をどのように受け入れていくのかはとても気になるところです。

なお、今回発表された”日本版 Pixel”に、おサイフケータイの搭載があるのではないか、と予測する記事もあり、Pixelの”日本仕様”への対応の可否も気になる点となっています。

グーグルスマホ「Pixel」日本上陸が確定 ── iPhone対抗の肝は「おサイフ」対応である理由 – Business Insider Japan

Googleは米国時間の10月9日に、Made by Googleというイベントを計画しているとのこと。
Pixelの日本発売が予告されて初のイベントとなるので、どんな発表がされるのか是非チェックしたいですね。

また、Google公式のティザーサイトでは、最新情報のメールマガジンの登録ができるようになっているので、Pixelの情報が気になる方は是非登録してみてはいかがでしょうか。

Google Pixel

  • この記事いいね! (0)
村上 著者:村上

【Excel】特定の列や行を固定しスクロールできる範囲を制限する方法

超初心者向けではありますが、便利なのでご紹介。
横もしくは縦スクロールが発生するような長いシートを扱うとき、シートの先頭辺りに配置した、日付や項目名が書かれているセルはスクロールしたくない!というときがあるかと思います。
そういったときは、「ウィンドウ枠の固定」という操作を行い、指定したセルのスクロールをできないようにし、スクロールできる範囲を指定しましょう。

 

指定方法はいたって簡単で、まずスクロールをしたい範囲の一番左上のセルを選択します。
例えば、下記のようなシートがあり、列Aと、行1~2をスクロールできないようにしたい場合、セルB3を選択します。

そうしたら、上のリボンメニューから「表示」を選択し、「ウィンドウ」から「ウィンドウ枠の固定」をクリックします。
するとメニューが表示されるので、一番上の選択肢の「ウィンドウ枠の固定」をクリックします。
なお、上の画像は既にウィンドウ枠の固定を指定済みなので、解除の項目が選べるようになっています。

ちなみに、スクロールを固定したい範囲が列Aのみの場合は「先頭列の固定」を、行1のみの場合は「先頭行の固定」を選んでも同じことができます。

 

以上、Excelシートで、特定のセルを固定し、スクロール範囲を指定する方法でした。
かなり初歩的なことではありますが、これを行うと、横や縦に長いグラフをスクロールしたときに項目名が隠れてしまう!ということが無くなるので、かなり便利です。
ちょっとしたことではありますが、こういった操作をして便利に使ってください。

  • この記事いいね! (0)
著者:杉浦

assertで想定外の動作のみを検知する

 デバッグを行う際、プログラム中の変数、式を追うことになります。この変数や式を全て画面に出力すると読む対象が多すぎてとても分かりにくいです。また徐々に異常な結果を辿って、変数や式をその都度画面に出力する場合、実行回数がかさみ時間がかかってしまいます。assert文は異常を発見した時にのみ知りたい変数や式を出力させるための文です。またこのassert文はユーザに見せる本番環境の際には消えている必要があります。assert文の実行は実行速度の低下であり、assert文の出力は脆弱性の発見のきっかけにもなります。
 大体のassert文はassert(条件文,出力定義の色々)という呼び出され方をします。条件文の評価結果がtrueの場合、出力はされず、falseの場合、出力がされます。assert(想定の動作の際の条件文, Errorの際に知ると役に立つであろう値)と書くと想定外の動作を整った情報と共に検出し、早く修正できます。かくあるべし、と意味を書く際のコメントの代わりにもなります。
Console.assert() – Web API インターフェイス | MDN
 javascriptのassetは次の様に使えます。

console.assert(条件式,出力したいものA,出力したいものB,出力したいものC,...)

 出力は次の画像のconsole.log(出力したいもの)と同じ様に表示されます。  javascritptでは外部でどうにかすることでassertを見せないようにします。一つは力技の様な気がしますが

Object.keys(console).forEach(key => {console[key] = () => {}})

の実行です。これによってブラウザの持つconsoleオブジェクトの持つ要素を全て空の関数で埋めます。これならば結果は表示せず、実行速度の面でもconsoleなしより少々遅いぐらいで済みます。ただしユーザはconsoleを使うためにconsoleの再定義が必要になり、また再定義された場合、consoleの中身が表示されてしまいます。もう一つはbabel-plugin-transform-remove-console – npmをつけたbabelのようなconsoleを除去するコンパイラを通すことによってコード内からassert文を消すことです。javascriptの実行コードはユーザがダウンロードするファイルです。そのため高速化を目的にソースコードを結合、圧縮します。その時にまとめてassertの除去を実行することで手間を意識せずassertを消せます。

PHP: assert – Manual
 PHPのassertは7前後で異なっています。PHP7では次のように簡単に書けます。

<?php
$a = 2;
$b = 1;
// assertionを作成
assert($a < $b);
assert($b < $a, '$b is less than $a.$a:'.$a.' $b:'.$b);
assert($a < $b, '$a is less than $b.$a:'.$a.' $b:'.$b);

実行結果

<br />
<b>Warning</b>:  assert(): assert($a &lt; $b) failed in <b>[...][...]</b> on line <b>5</b><br />
<br />
<b>Warning</b>:  assert(): $a is less than $b.$a:2 $b:1 failed in <b>[...][...]</b> on line <b>7</b><br />

 assert(条件式,出力文字列)とするだけです。出力文字列とassert文を記述した行数を出力してくれます。出力文字列を指定しない場合はfalseを出力した条件文を出力します。
 PHP7より前のバージョンではコールバックの指定が必要であり少々面倒です。

<?php
// assertを有効にし、出力を抑制する
assert_options(ASSERT_ACTIVE, 1);//assert()による評価を有効にする。0でassert()を読み飛ばす。
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);

// ハンドラ関数を作成する
function my_assert_handler($file, $line, $code, $desc = null)
{
    echo "Assertion failed at $file:$line: $code";
    if ($desc) {
        echo ": $desc";
    }
    echo "\n";
}

// コールバックを設定する
assert_options(ASSERT_CALLBACK, 'my_assert_handler');

// 失敗するassertionを作成
assert('2 < 1');
assert('2 < 1', 'Two is less than one');

実行結果

Assertion failed at [...][...]:21: 2 < 1
Assertion failed at [...][...]:22: 2 < 1: Two is less than one

 PHP7より前では必ず評価を行った状態を引数にしたコールバックを呼び出します。これが手間で昔のassert文はあまり使われなかったらしいです。PHP7はコールバック呼び出しも可能なまま、容易に使えるasset文になりました。
 PHPはオプションで宣言することによってassert文を読み飛ばします。PHP7ではphp.ini中にzend.assertions=-1とすることでassert文を読み飛ばせます。PHP7より前ではassert_options(ASSERT_ACTIVE, 0);とすることでassertによる評価を無効にします。

  • この記事いいね! (0)
asaba 著者:asaba

【Cordova&react】cpコマンドが使えないときの対処法

reactを使ったcordovaアプリの開発環境を作っている時の話です。

reactのチュートリアルで開発環境を作っていて、config.xmlを違うフォルダにコピーする必要があったので

コマンドプロンプトでcp tutorial-cordova/config.xml tutorial/でコピーをしようとしたところ、おなじみのエラーが出ました。

ディレクトリのパスが間違っている若しくは環境変数にパスが設定されていないので実行できないよというエラーです。

しかし、筆者はどちらも正規の手順で設定済みで特に間違いはありませんでした。解決方法が分からないので、仕方なくcpコマンドを使わずにそのままコピーをしました。手動です。

このconfig.xmlを

このtutorialフォルダにコピーします。↓

考えてみたらただコピーするだけのコマンドなので手で直接コピーしてしまっても何の支障もなかったのです。

環境変数の設定ミスなどがなければ、これでも全然コピーできるので同じエラーで悩んでいる方はやってみてください。

 

 

 

  • この記事いいね! (0)
著者:ym

GDPR違反になった場合

ZDNET のニュースで取り上げられていた記事。

ブラウザ新興企業Brave、グーグルなどによるGDPR違反を申し立て

どうやら EU 圏の GDPR に違反しているとして Google が Brave の GDPR 違反を申し立てた様なのです。この申立により違反が認められると最低でも2000万ユーロ(26億円)の罰金が科せられることになります。

この情報を探そうと調べていた所、日本でも先日、ホテル関連の情報漏えいから、日本で初のGDPR違反の可能性があるとニュースで取り上げられていた様です。

日本企業初の「GDPR」違反の可能性、プリンスホテルなど

実際、どうなったかはわかりませんが、いずれにしても日本企業も対策は必須です。

 

  • この記事いいね! (0)
村上 著者:村上

Webサイトやアプリのモックアップ作成には「Adobe XD CC」が便利

タイトルにある通り、今回は無料で使用できるようになったAdobeのサービス「Adobe XD CC」のご紹介です。
最近利用し始めましたが、アプリなどのモックアップ作成にとにかく便利!

公式サイトはこちらから。

Adobe XD CCの購入|UI/UXデザイン、プロトタイプ、共同作業ツール
https://www.adobe.com/jp/products/xd.html

インストールもこのページからできます。

 

起動すると、まずこのウィンドウが立ち上がります。

iPhoneやiPad、Webなど、ベースとなるサイズはここから選ぶことができます。
チュートリアルもあるので、初心者さんはここから始めましょう。

チュートリアルはこんな感じ。

基本操作の仕方から、画像の配置方法などが説明されています。

また、左上のタブを「デザイン」から「プロトタイプ」に変更すると、画面遷移の指定ができます。

上記では、左のページの「ブログ」をクリックすると、右のページに遷移する、という動きを指定しています。

さらに、右上の三角をクリックすると、プレビューが表示され、実際の画面に近いデザインで動作を確認できます。

特にこの機能が便利ですね!
実際に動かすことで、ページの不足等が分かりやすいです。

が、こちらの機能ですが…何が悪いのか、ページ遷移のアニメーションが変更できない時が何度かありました。
例えば、iOSらしく、左にスワイプするアニメーションを指定したいのに、何故か変更できなかったり…。
原因は分からないので、現在調査中です。
まあ、画面遷移自体は問題なく行えるので、些事ではありますね。

 

以上、Adobe XD CCについてでした。
操作が直感的で分かりやすいし、チュートリアルもあるので、初心者にも安心してお使いいただけるかと思います。
なにより無料ですし、気になった方は是非使ってみてはいかがでしょうか。

  • この記事いいね! (1)
asaba 著者:asaba

【javascript】特定の配列の値を削除する方法

少し前にjavascriptで配列の操作について勉強しました。実用性はあまりないですが、今回はそのためになったことを備忘録に残します。

配列の値を削除したいと思ったときにsplice()という関数の使い方を覚えました。下の例に沿って説明します。


<script>
var i = 0;

var arr = [85, 78, 92, 62, 69];

for(i=0;i<5;i++){

console.log(arr);

arr.splice(0, 1);

}
</script

コードを見ると、arr[]で5つの値を設定して配列文だけ出力しています。

その後にsplice()を使っていますが、引数を二つ取っています。一つ目の引数で、何番目の値を、二つ目の引数で削除する数を示しています。

つまり、0番目の値「85」を一つ消すという意味になります。

for文で5回回しているので、回を追うごとに値は減っていき最終的には値がない配列が出力されることになります。

使い方は分かるのですが、やはり実用性があまりないです。なのでこのページを見た方は配列の勉強程度に思っていただくと幸いです。

 

 

  • この記事いいね! (0)
著者:杉浦

高速化のために一度の小さな問い合わせで済むSQL文を作る

 プログラムを扱っているとDB(データベース)に接続する必要のある場面がいくつもあります。DBへのアクセスにかかる時間、実行にかかる時間は無視出来ず、実行速度のボトルネックになることがあります。DBの内部をチューニングする事でも速度の向上はできますが、問い合わせの回数、DBから引っ張ってくるデータの大きさといった部分を問い合わせ文の工夫によって少なく、小さくすることによっても高速化はできます。
 よくある場面は、必要なデータが複数のテーブルに分散している、あるテーブル中に格納されたデータを基にした条件に合致するデータのみを取得したい、といったものです。こういった時、それぞれのテーブルをそのまま扱うようなことをすると次の様なコードが生まれます。

$arr = query('SELECT * FROM master_table');
foreach($arr as $v){
	$hoge_addr = query("SELECT * FROM hoge_table WHERE addr = '${arr['addr']}'");
	...
	...
}

 こういった何度も問い合わせをDBに送る様なコードは実行にかかる時間が長くなりがちです。DBへの問い合わせは少ない回数で少ないデータをとれるようにした方がプログラムは高速になります。必要最小限のデータの取得は*を使わずに細かく指定することでできます。問い合わせを少ない回数で行うためにはAS、JOIN、入れ子内部のSELECTが便利です。

SELECT * FROM(
	SELECT
		master_table.id,
		master_table.name,
		hoge_addr.name AS name1,
		hoge_addr2.name AS name2,
		fuga_table.name
	FROM
		master_table
		INNER JOIN
			hoge_table AS hoge_addr
		ON  master_table.addr = hoge_addr.addr
		INNER JOIN
			hoge_table AS hoge_addr2
		ON  master_table.addr2 = hoge_addr.addr
		INNER JOIN
			fuga_table
		ON  master_table.branch = fuga_table.id
) AS tmptable
WHERE
	name1 = 'hogehoge'

 SELECTの結果はそのままテーブルとして扱うことが出来ます。ここではそうまとめの様に扱っていますがWHERE句中に使うこともできます。

WHERE id IN (SELECT hoge_id FROM hoge_table WHERE hogehoge = 'fugafuga')

とすればINにより()内の結果であるhoge_idのいずれかと一致するIDという条件を作れます。
 JOINは表の結合です。オプションは様々でINNER以外も多く使われます。ASはそのままA as BでAをBとして扱うという句です。JOINとASを組み合わせることで同じ表から違う条件で汲み上げた結果を一つの表にまとめられます。

master_table
INNER JOIN
	hoge_table AS hoge_addr
ON  master_table.addr = hoge_addr.addr
INNER JOIN
	hoge_table AS hoge_addr2
ON  master_table.addr2 = hoge_addr.addr
  • この記事いいね! (0)
takahashi 著者:takahashi

PWA版Twitterが思ったよりも便利だった件

サードパーティクライアントが実質使用不可となった最近のTwitterですが、Twirter運営側も流石に代替え策を全く用意しない…というわけにはいかなかったようで、最近のブラウザで続々サポートが始まっている”PWA”をベースとしたWebアプリケーションをリリースしています。

Twitter Liteのご紹介 – Twitter Blog

PWAとは簡単に説明するとWebサイトをあたかもネイティブのアプリのように利用することができる新技術です。
例えば、通常のWebサイトの場合、ブラウザを閉じてしまうとサイトからの通知を受け取ることができませんが、PWAに対応しているWebサイトの場合は、ブラウザを閉じていても(ブラウザのプロセスが動作している限り)通知を受け取ることができますし、オフラインの状態であってもWebアプリを表示したりもできます。

そんなPWAでつくられたのがTwitter Liteで、対応するブラウザでアプリとして登録することで、各プラットフォームのアプリケーションとしてTwitter Liteを利用することができるようになります。

今回は、実際にAndroidにインストールしてみました。

まず、Twitter Liteにブラウザでアクセスします。
まだTwitter Liteをインストールしていなければ、下記のように”ホーム画面にTwtterを追加”が出てきます。

タップすると、Twitter Liteの追加を確認するダイアログが出てきますので、”追加”を選択。

通知エリアには”Twitterを追加しています…”の表示が。

暫く待つと

”ホーム画面に追加されました”と表示されました。

この状態でホーム画面を見ると

ちゃんとアプリとして追加されています。

OSからもアプリとして認識されており、アプリ一覧からアンインストールすることも可能です。

起動してみます。

まずログイン画面が出てくるので、通常通りログインします。

表示されたホームTL画面は、ファンクションボタンの位置を除きほぼAndroidアプリ版Twitterと同じUIになっています。

ただしプロフィールアイコンから呼び出せるメニューがスライドではなくプルダウンメニューになっています。

夜間モードとTwitter Liteの目玉機能であるデータセーブ機能はこのプルダウンメニューから利用できます。
設定を見てみます。

設定の内容もほぼAndroidアプリ版と同様の設定ができるようです。

通知設定。

プッシュ通知の設定。

プッシュ通知はデフォルトでOFFになっており、自分でONにしないと有効になりません。

ONにした際、Chromeが通知の許可を確認するので、”許可”を選択します。

通知を許可すると、プッシュ通知の細かい設定が行えるようになります。
こちらの内容もほぼアプリ版Twitterと変わらないようです。

投稿画面はこんな感じ。

写真のアップロードや、

アンケートを設定することができます。

ただし、アプリ版と違い、PWA版ではTwitter上で写真の編集ができないため。あらかじめ編集したものを端末側に保存しておく必要がありそうです。
また、ツイートの下書き保存機能も、今のところPWA版にはついていません。

他に、アカウントの切り替え機能もPWA版は未実装となっており、アカウントを切り替える際はTwitter Liteからログアウトしないといけないようです。(ログアウトしてしまうので、Twitter Lite経由での通知もログインしている1つのアカウントからのみしか受信できない可能性があります。)
ただ、Google Smart Lockが利用できるので、Chromeを使用している方は、ログアウト後にワンタップで別のアカウントに切り替えることができます。

使用感としては、Androidアプリ版Twitterと比較してかなり軽い印象です。
とくに、メディアを表示した状態でTLをスクロールした際、アプリ版はしばらく使っているとどんどん遅くなっていき、アプリ本体が応答すらしなくなってしまうこともしばしばあったのですが、PWA版の場合はそれがなく、描画の遅延こそあるもののかなりスムーズにTLをスクロールすることができます。

Liteを謳いつつも、アプリ版の殆どの機能も備えていますし、個人的にはアプリ版よりも”使いやすい”と感じました。
ただ、まだアプリ版と比較して搭載されていない機能もあるため、本格的に使えるようになるのは、もう少し先になりそうだな、という印象でした。

Twitter公式のアプリが重くて困る…という方は、是非一度Twitter Liteを試してみてはいかがでしょうか。

Twitter Lite

  • この記事いいね! (0)
村上 著者:村上

【Android】Intentを使ってカメラを起動する方法

今回は、タイトルにもある通り、Androidアプリでカメラを起動する方法についてです。
なお、カメラの起動には、画面遷移の際に用いられる、Intent を利用します。

参考にさせていただいたサイトはこちらから。

Take photos|Android Developers
https://developer.android.com/training/camera/photobasics

 

さて、カメラを起動する機能の実装方法ですが、必要なコードは実は下記の2行くらいで済みます。

static final int REQUEST_IMAGE_CAPTURE = 1;

// カメラを起動
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

あとは、AndroidManifest.xmlタグ内に、下記を指定します。

<uses-feature android:name="android.hardware.camera" android:required="true" />

こちらはカメラを起動する際に必要なので、お忘れなく。

で、写真が無事に撮影できると、onActivityResult() が呼び出されるので、そこで行わせたい処理を記述します。
今回は、ImageView に撮影した写真を表示するように指定しています。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap bitmap;
        ImageView imageView = findViewById([ImageViewのID]);

        if( data.getExtras() != null){
            bitmap = (Bitmap) data.getExtras().get("data");
            if(bitmap != null){
               imageView.setImageBitmap(bitmap);
            }
        }
    }
}

ここまでを実行すれば、カメラの起動から、撮影した画像の表示までは問題なく動作します。

 

以上、Androidアプリで Intent を使ってカメラを起動する方法でした。
あとは、画像の保存機能の実装ですが、そこまではまだできていません。
原因としては、ストレージの権限あたりかと。
実装出来たら、その方法についても改めてまとめたいと思います。

  • この記事いいね! (0)