読者です 読者をやめる 読者になる 読者になる

UXエンジニアになりたい人のブログ

転職活動はじめてすぐやめた

LINEのタイムラインってなんなの?昔のに戻せないの?

主張/考え

LINEのタイムライン、昔(半年前くらいまで?)は友だちが書いた近況とか、一言メッセージ変えましたとか写真変えましたとかの通知が表示される場所だったと思うんだけど、いつからか急にニュースとかが表示されるようになったんだよね。

で、いま改めてよく見てみたらニュースっていうか、↓みたいなLINEの謎サービスが毎日通知されたり、楽天カードの広告が出てきたりする場所になってたんだわ。

f:id:uxlayman:20161115222544p:plain

LINEのタイムライン表示例

 

これってなんなの?1日に2つも3つもこんなのがタイムラインにプッシュされるから友だちの共有情報みるのがすごい手間になってるんだけど。

いちおう非表示にはできるけど、「RECIPE by LINE」を全ブロックとかはできなくて、1投稿単位でしか非表示にできないんだよね。意味ねえ。

 

それで話戻すけど、これ、ほんとどういうことなの?以前のタイムライン機能を見たければこの謎広告の山をずっとスルーしながら友だちの情報探せってこと?さすがにひどくない?

でもそれにしてはあんまりこれに文句言ってる人見たことない。もしかしてこっそり非表示にする設定があるとかなんだろうか?教えてクレメンス!

 

LINE

LINE

  • LINE Corporation
  • ソーシャルネットワーキング
  • 無料

 

 

AppleはiOS10のメールアプリの戻る/進む表示をいますぐ元に戻せ

デザイン/UX 主張/考え

史上最大の変更があったと言われるiOS10ですが、リリースノートに載ってない範囲でも地味に変更があるようです。

今回はそれ系の話です。

 

純正のメールアプリ、一覧から1つメールをタップすると、右上に戻る/進むボタンが出てきます。以下の画面です。

f:id:uxlayman:20161113192448p:plain

メールアプリの戻る/進む(iOS10)

さて、この<と>の表記、一覧でいう下のメール(古いもの)を表示させたい時、どっちがどっちかわかりますか?

正解は<が下へなんです。

どうでしょう。イメージと逆の人も多かったかもしれません。先に進む=読み進むと判断して、>だと思った人も多いでしょう*1。ここにもひとしきり文句言いたいところですが、とりあえず置いておいて、同じ純正メールアプリのiOS9版を見てみましょう

 

f:id:uxlayman:20161113193406p:plain

メールアプリの戻る/進む(iOS9)

いや、おい・・・なんで変えたん。いままででなんの問題もなかったじゃんか。上ボタンで上のメール、下ボタンで下のメール。これ以上ないほどシンプルかつ明確で、間違えようがない。

 

話はさらに続きます。iOS10では、メールのスレッド表示が改善されて、1画面でスレッドメッセージが全部みれるようになりました。ここにも戻る/進むボタンがあって、「次のメッセージの冒頭」「前のメッセージの冒頭」へジャンプできます。

f:id:uxlayman:20161113190537p:plain

メールのスレッド表示(iOS10)

さて、この<と>、どちらが下へで、どちらが上へでしょう?そんなの非スレッドモードと同じに決まってるだとと思ったみなさん。違います。

スレッドモードでは「>が下へ」で「<が上へ」なんです。非スレッドモードでは「>が上へ」で「<が下へ」なんです。わかるかっつーの!頭おかしいんじゃないの?*2

 

 

いったいなぜこんなことが起きるのか。

  • iOS9の時点でなんの問題もなかったものを「わざわざ」変更した
  • 変更して明らかに改悪になったものにだれも気づかない
  • 機能間で不整合を起こしていることにだれも気づかない

こういう意味不明なことをする会社はやばいと思う。UCDだとかUX中心ではないなんらかのプロセスや意図が幅を利かせて、デザインプロセスが崩壊しかけていることを予見させる。Apple本格的にやばいんでないか。

ていうかなんでもいいけど早くもどせよ。毎日ストレスなんだよ。

 

*1:伝統的には時間軸降順のリストに対する「戻る」「進む」問題というのは存在する。ページは進むけど時間は戻る、どっちのことを指してるねん、と。ソート条件が時間とは限らない場合は諦めて「ページを進める=進む」とすることが多い。ソート条件が時間軸降順しかない場合は、<新しい記事 古い記事>

みたいな表現にして誤解を招かないようにすることが多い。ブログ記事でもそうだよね。

*2:一応フォローしておくと、この挙動に一貫性がないわけではない。一貫して、時間を戻す方が戻る(<)で、時間を進める方が進む(>)なのである。一覧ではメッセージが受信日時の降順に並んでいて、スレッドは起点メッセージから返信メッセージが順に、つまり昇順に並ぶからこうなる

【ポケモンGO】図鑑につっこむ

レビュー/紹介

ポケモンやるのはポケモンGOが初めてなんですけど、図鑑って結構つっこみどころ多くないですか、という内容を徒然に書いていきます。

一応、まだ捕まえてない図鑑が見えてしまうかもという意味でネタバレ注意。

 

ヤドン

図鑑に目覚めたきっかけがこれ。ポケモンたちにはほのおポケモンとかでんきポケモンとかって愛称(?)があるのですが

f:id:uxlayman:20161005220303j:plain

まぬけポケモンってひどすぎるwww

とおもったが

尻尾を川に入れてエサを釣っているが、そのうちなにをしているのか忘れてしまい川べりに寝そべったまま1日を終える。

いやあ。。。これは確かにまぬけかな。。。

 

ヤドラン

そんなヤドンの進化系がヤドラン

f:id:uxlayman:20161005220306j:plain

シェルダーがかみついているので尻尾でエサを釣れなくなったヤドランは渋々水中を泳いでエサを捕まえている。

いや渋々て。進化したのが残念みたいな言い草わろす。

それはそうと、ヤドランの尻尾についているの、シェルダーなんですね。ここでちょっっとシェルダーを見てみましょう。

f:id:uxlayman:20161005220340j:plain

 

・・・?!

いや、ヤドランの尻尾に食いついてる奴と違くない?シェルダーは2枚貝、ヤドランの尻尾は巻貝じゃない?!

f:id:uxlayman:20161011225357j:plain

どうみても別物です本当にありがとうございました。進化とは一体・・・・

 

続きを読む

日本未発売(?)のスマート体組成計Withings Body CardioをApple Storeでゲット!

レビュー/紹介

f:id:uxlayman:20160807123345j:plain

iPhoneで体重が記録できるWithingsの体重計を使っていたのですが、今年1月くらいから体脂肪が測れなくなってしまって、どうしようかと思っていたのです。

そんな中、今年(2016年)6月に、体脂肪に加えて、体⽔分率、⾻量、筋⾁量、⼼拍が測定できる新型が発売されて、こいつが日本で発売されたら速攻で買おうと決めて日々を過ごしていました。

 

しかし、ひょんなことから実はApple Storeですでに発売が開始されていたことが判明!!「限定」ってあるから日本ではApple Store限定発売なのかな?

というわけで公約通り速攻で購入しましたのでレビューしていきます。(文末に詳しく書きましたが、Apple Store経由で買って、保証関係がどうなるかだけはちょっと気になります)

 

 

箱とか

f:id:uxlayman:20160807121202j:plain

はこどーん。この箱とほぼ同サイズの配送用ダンボール箱に入ってきました。

 

 

f:id:uxlayman:20160807121239j:plain

箱裏の注意書き一部。あらゆる表記が英語、中国語、日本語の3ヶ国語表示。

 

 

f:id:uxlayman:20160807121449j:plain

 箱の中にもう一個内箱が入っていて、これが上に開くようになっている

 

 

f:id:uxlayman:20160807121510j:plain

こんな感じ

 

 

f:id:uxlayman:20160807121528j:plain

取り出すと裏に薄いマニュアル。上の方に見えるロゴ入りのちっちゃい箱の中に充電用USBケーブル(ただし充電済みなのでしばらくは使わない)

 

続きを読む

【ポケモンGO】画面を見ずにポケモンをゲットする方法

レビュー/紹介 Ingress

7/31のアップデートでできなくなったようです。

ボールが投げられずに消費した音だけ聞こえるか、投げられるけど先制攻撃っぽくない普通の軌道で投げるだけ、となってしまうようです。残念!

 

ポケモンGO、やってますか。

このゲーム、モンスターボールの操作が割とシビアなので、ポケモンを捕まえるときはちゃんと立ち止まって画面を見ざるをえないと思っている人が大半でしょう*1

が、実は画面を見ずにポケモンをゲットする方法が発見されたのでそれを紹介します。

 

*1:ていうか立ち止まらないで画面を凝視しながら歩くのやめれ

続きを読む

【改良版】コピペで簡単!はてなブログで「文中にアドセンス広告を入れる」を自動化する方法

ブログ/Adsense

uxlayman.hatenablog.com
上記記事は当ブログの密かな人気記事なのですが、どうも最近問題が発見されたようです。



www.toma-g.net
okanewofuyaso.hateblo.jp

要は

記事上下の広告を移動するスクリプト使う
→(2重、もしくは多重カウントされて)アクティブビュー視認可能率が下がる
→(みんなが見ない場所に貼られた広告だと判断されて)広告単価が下がる

という話であるようです。
ということで改良版をつくりました。
今回も、コピペで簡単やで!(けど、ちょっとだけ注意点があるので気をつけてや!あと、いつでも元の状態に戻せるようにメモ帳にでもなんにでもバックアップはとっとっきましょう^^)



設定方法

ダッシュボード→デザイン→カスタマイズ→記事上下のカスタマイズ→「記事ページのプレビュー」を設定→「記事下」または「記事上」

<script>
var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content h3,h4,h5');
    $target.eq(Math.floor($target.size() / 2)).before($('.insentense-adsense'));

    $('.insentense-adsense').html(adsenseCode);
}, false);
</script>
<div class="insentense-adsense"></div>

諸注意など
  • 超重要:上にも書きましたが、アドセンスコードをコピペしたあと、2箇所ある「/script」を「/scrip」に修正してください!これをしないと広告そのものが表示されなかったり、画面がおかしなことになると思います。変えるのは2箇所だけで、4箇所ではないです。ちゃんと出来てない場合ははてなブログのダッシュボードで設定した時点で「緑色の領域」が下の画像のようになってないはずのなので、うまくいかない場合はまずこれを確認してください。

f:id:uxlayman:20160728225540p:plain

  • 本文中で大見出し、中見出し、小見出しの数を数えていって、真ん中に当たる部分の見出しの前に挿入します。

  • 大見出し、中見出し、小見出しのどれもない場合は何もしません(そのまま記事下に表示される)

  • 挿入対象は以下の3〜7行目の部分なので、アドセンスコードの周りのスタイル等適宜調整してください。上記例では、コードの上に「広告」という文字、下に空行を入れています。
<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

  • 「もっと読む」の下に広告入れている例が多いようなのですが、はてなブログは「もっと読む」の位置がソース的に記載されていないようなのでできませんでした。



挿入位置のカスタマイズ

基本的には

    var $target = $('.entry-content  h3,h4,h5');
    $target.eq(Math.floor($target.size() / 2)).before($('.insentense-adsense'));

このコードがカスタマイズ位置を特定しているので、ここの部分を変えることになります。


応用例1:「真ん中」の大見出しの直後に広告を入れる

対象を大見出し(h3)だけに絞り、「直後」を表すafterに変える

<script>
var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content h3');
    $target.eq(Math.floor($target.size() / 2)).after($('.insentense-adsense'));

    $('.insentense-adsense').html(adsenseCode);
}, false);
</script>
<div class="insentense-adsense"></div>

応用例2:最初の大見出しの直後に広告を入れる

応用例1に加え、追加対象見出しの条件を「最初」を表すeq(0)にする。eq(0)の部分をeq(1)とかeq(10)とかにすれば、「n番目の」という意味になる

<script>
var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content h3');
    $target.eq(0).after($('.insentense-adsense'));

    $('.insentense-adsense').html(adsenseCode);
}, false);
</script>
<div class="insentense-adsense"></div>

応用例3:2つのアドセンスコードを別の位置に入れる

ポイントはそれぞれのアドセンスコードの名前を変える(下記insentence-adsenseとinsentence-adsense2)ことと、変数名を変える(下記adsenseCodeとadsenseCode2)ことと、挿入位置を変える(「$target.eq(Math.floor($target.size() *1/ 3))」のところ)です。
下記例は、上から1/3にある見出しの上と、上から2/3にある見出しの上にコードを入れる例。
最初と最後であれば、$target.eq(0)と$target.eq($target.size()-1)でokです。

<script>
var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content  h3,h4,h5');
    $target.eq(Math.floor($target.size() * 1 / 3)).before($('.insentense-adsense'));

    $('.insentense-adsense').html(adsenseCode);
}, false);
</script>
<div class="insentense-adsense"></div>
<script>
var adsenseCode2 = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコード(2つ目)の2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content  h3,h4,h5');
    $target.eq(Math.floor($target.size() * 2 / 3)).before($('.insentense-adsense2'));

    $('.insentense-adsense2').html(adsenseCode2);
}, false);
</script>
<div class="insentense-adsense2"></div>

応用例4:フッターの先頭(ブログパーツの前)に入れる

2016/8/6追記
通常、フッタに指定したアドセンスやその他ブログパーツは、はてなが提供するブログパーツの後ろになりますが、これを前(本文の直後)に持ってくるコードです。
フッター部分はPC、スマホとも共通でentry-footerなので、ここの先頭にコードを入れる"prepend"を利用します。

<script>
var adsenseCodeF = (function () {/*

<p>広告</p>
<!-- 自分のフッタ用アドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    $('.entry-footer').prepend($('.footer-adsense'));

    $('.footer-adsense').html(adsenseCodeF);
}, false);
</script>
<div class="footer-adsense"></div>

応用例5:場所が見つからなかったらともかく文中に入れる

2016/8/6追記
このコードは挿入場所が見つからなかったら、記事上または記事下にそのまま表示します。ただし、特にスマホの場合、フッタ用のアドセンスと文中用のアドセンスを両方「記事下」に設定して、文中用アドセンスが挿入できないと、アドセンスが2つ並ぶことになり、ポリシー違反になる可能性があります。
これを防ぐため、「見つからなかったらともかく真ん中に」を実現するコードが以下です。$target.size() > 0が挿入場所が見つかったことをさします。

実行例は以下の記事などをご覧ください。この記事は見出しが1つもありませんが、レクタングル(大)がちょうど真ん中に挿入されています。
uxlayman.hatenablog.com

<script>
var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content h3,h4');  // 大見出しと中見出し
    if ($target.size() > 0) {
        // 「真ん中」の大見出しと中見出しの直後に入れる
        $target.eq(Math.floor($target.size() / 2)).after($('.insentense-adsense'));
    } else {
        // 大見出しと中見出しがなかったら、ともかく真ん中の段落に入れる
        $target = $('.entry-content p, .entry-content div');
        $target.eq(Math.floor($target.size() / 2)).before($('.insentense-adsense'));
    }

    $('.insentense-adsense').html(adsenseCode);
}, false);
</script>
<div class="insentense-adsense"></div>

技術的なお話

基本的にはadsenseコードをjavascriptの文字列として持っておいて、文中に直接書き出す、という流れになります。前回のコードと違い、移動させていないので、多重カウントされません。


コピペを簡単にするための仕掛けとして、以下のjavascript版ヒアドキュメントの仕組みを使っています。
qiita.com


これがないと延々アドセンスコードのタグをjsの文字列に書きなおさなければならなくなります。
ただ、これを使ってもなお、</script>がスクリプトの終わりだとブラウザに判定されてしまうため、苦肉の策で</scrip>に置換するようにしています。


おわりに

さて、大事なことですが、本スクリプトは自己責任でご利用ください。
スクリプトが突然動作しなくなったり、今回のように単価減の状態になったり、またポリシー違反状態になった場合等も、当ブログならびにブログ主は責任を負いません。

一応、ポリシーに違反したという話は聞きませんし、Adsenseコードをほとんどそのまま利用(ただscriptをscripに変換してるので、厳密にいえば改変は改変なのですが…)しているので、あまり問題にはならないかと思います。javascriptコメントを利用する方法は別記事「はてなブログで特定のキーワードを含む記事にはAdsenseが貼られないようにする方法 - UXエンジニアになりたい人のブログ」で紹介して、実際に運用されている方もいるようなので、ある程度枯れてきているとは思います。

とはいえ今回の話もありましたので、とりあえずしばらくは自分でも運用してみようと思います(機会損失してしまった方々ごめんなさい)*1
この記事にも、真ん中の大見出しの直後にレクダングル大が表示されてると思いますので、見た目を確認してみてくださいませ。
問題があった場合はコメントなり引用なりをしていただければ幸いです。

*1:自分で運用してればすぐ気づいて改良版を出せたんですけどね

「支持政党なし」が犯した2つの戦略ミス

主張/考え

支持政党なし、結局議席取れるんですかね。比例票は特に遅くまで確定しないので、なかなか大変かと思います。

ともあれ、今回の選挙で支持政党なし党は大きな戦略ミスを犯したと思っているので、それについて書いていきます。

 

非拘束名簿式比例代表に立候補した

まあ、これやね。

http://xn--68jubz91pp0oypc1c.com/top/menu-1s.jpg

via 支持政党なし

このバナー見てちょっと勘違いしちゃったんだけど。 

 

こんな事言ったけども、これ言った時は投票用紙のところが

f:id:uxlayman:20160710203936p:plain

だと思ってたんですね。これは行けるだろ、と。普通に「新しい"公的な棄権"的な選択肢」ができたと勘違いするひと出てくるだろ、と。

 

で、実際に選挙いって、投票用紙のところ見たら

f:id:uxlayman:20160710203948p:plain

こうなってた。

 

オワタ\(^o^)/

 

まあ参議院比例代表は非拘束名簿(政党名でも候補者個人名どちらを書いても良い)だから、こうなるのは最初からわかってたとは思うんですが、でもこう書いてあったら、よっぽど勘が悪くない限り「支持政党なし」が「棄権の別名」ではなくて、政党の名前だってわかっちゃうよね。

 

当人たちはもちろん否定するだろうけど、この政党が「勘違い票」も狙ってることは明らかで、その戦略は非拘束名簿方式と相性がとても悪い。

 

続きを読む