カテゴリー別アーカイブ: 技術系記事

Web技術,スマホアプリ開発,プログラミング等、雑多な技術系記事群

自分の開発したAndroidアプリにApp Indexingを導入してみた話

最近”App Indexing(アップインデックシング)”というのが流行っているらしく、仕事でもAppIndexing案件に携わるようになった。
しかし、実のところ、自分でもAppIndexingがなんなのかよく分かっていない。
この度プライベートで開発しているAndroidアプリ「TwitMorse」に導入してその効果を検証してみることにする。

続きを読む 自分の開発したAndroidアプリにApp Indexingを導入してみた話

Node.js Express導入してうごくまで 2016

開発環境:私物MacBookPro

$ npm install express

昔はこれでexpressコマンドが使えたらしいのだが、最近になって別にコマンドを打つ必要が増えたそうだ。
そこで以下を実行。

$ sudo npm install -g express-generator
$ which express
/usr/local/bin/express

参考:http://www.atmarkit.co.jp/ait/articles/1503/04/news047_3.html
続きを読む Node.js Express導入してうごくまで 2016

AndroidならGoogle Playに、iOSならiTunes storeへ飛ばすリンクを作る

iOS、Android両OSで出してるアプリをTwitterなどのSNSでシェアするときに使う文言として

iOSはこちら
http://hogehoge
Androidはこちら
http://fugafuga

などの文言を見かけることがある。
このリンクをひとつにまとめるサービスはないものかと探してみるが、意外に出てこない。
続きを読む AndroidならGoogle Playに、iOSならiTunes storeへ飛ばすリンクを作る

Android 画面回転時にActivityを再起動させない方法

職場で教えてもらったので後学のために残します。

続きを読む Android 画面回転時にActivityを再起動させない方法

アプリにDeeplinkを導入させる ― Android

Androidアプリで話題になっているDeeplink(ディープリンク)をTwitMorseに導入してみたのでその方法をメモします。

続きを読む アプリにDeeplinkを導入させる ― Android

Android ActionBarを画面下に表示する方法

何がしたかったか

Before

Screenshot_2015-09-14-11-46-38

After

Screenshot_2015-09-14-11-45-11
ひとつメニューにアイコンを設置するので、ActionBarを画面の下に表示させたかった。例えばTwiccaのようなUIにしたかったのです。

その方法

方法はプログラムを書くかとおもいきや意外とmanifestファイルの編集で終わりました。

AndroidManifest.xml

<activity
            android:name=".MentionsActivity"
            android:uiOptions="splitActionBarWhenNarrow"/>

アクションバーを下に持って行きたいActivityに

android:uiOptions="splitActionBarWhenNarrow"

を追記するだけです。

多分プログラムから制御する方法もあると思うのですが、この方法が一番早かった。


Android ArrayAdapterからstartActivityする方法

AndroidのListViewでは独自のAdapterを作ってListViewにセットすることができます。
今回、独自のAdapterを作ってその中からあるアイコンをタップした時に別画面へ遷移させる方法がわからなかったので調べてみました。

続きを読む Android ArrayAdapterからstartActivityする方法

swift NavigationBar 背景に画像を設定する

最近故あってswiftの勉強会に参加しております。
その勉強会の課題で「ナビゲーションバーに画像を設定する」という課題があったので1日かけて悩んでいました。
やっとその解決方法を見つけたのでメモします。

続きを読む swift NavigationBar 背景に画像を設定する

androidbootstrap

AndroidBootstrapがアツい!と俺の中で話題に

「アプリのデザイン、誰かやってくれないかなー」と思っている個人開発者は結構多いはず。
私も「デザインができる人と友達になりたい」などと他力本願な思考が頭の中を占めていました。

続きを読む AndroidBootstrapがアツい!と俺の中で話題に

?と思ったJavaでInt型をString変換する方法

あるコードを見ていたら下記のような記法を見かけたことがあったので「??」と思い、調べてみたのでメモします。

if(s.equal(""+i)) {

続きを読む ?と思ったJavaでInt型をString変換する方法

1分でできる公開鍵認証でssh接続する手順@Macターミナル.app

これまでVPSにパスワード認証で入っていたのでダサいと思い、公開鍵認証で入れるようにした。
その際1分くらいでできたのでそのときの手順をここに記す。
続きを読む 1分でできる公開鍵認証でssh接続する手順@Macターミナル.app

phpで標準入力から数値の比較

復職しようとしたら産業医の先生に「まだ駄目!」と怒られてしまったので日々新しいことを勉強しています。
あと2週間仕事を模した生活を続けなければいけないようです。
続きを読む phpで標準入力から数値の比較

scpコマンドの基本的な使い方 ファイル・ディレクトリ転送

ローカル開発環境で書いたコードをVPSにアップしようとしたとき、私は気づいてしまった。

「あれ・・・scpコマンドってどうやって打ったっけ・・・?」
続きを読む scpコマンドの基本的な使い方 ファイル・ディレクトリ転送

Your content must have a ListView whose id attribute is ‘android.R.id.list’ の罠

3連休、日がな一日を個人開発のアプリブラッシュアップに使っている私です。
公開しているAndroidアプリ、TwitMorseにSwipeRefreshLayout(リストを指で引っ張ると更新するやつ)を加えようと、がんばって何度もNullPointerExceptionにはまったりしていました。
今日はエラーログからある問題を解決したのでメモします。 続きを読む Your content must have a ListView whose id attribute is ‘android.R.id.list’ の罠

Java .equalsメソッドの罠

Javaの.equalsメソッドの罠にひっかかって2週間くらいなやんだのでメモります。
開発してるTwitMorseの逆変換機能の実装の時に直面しました。

equalsメソッドは時折同じ文字列の比較をしてもfalseを返すことがあります。

私が引っかかったコード

protected String convertMorseToText(String text) { 
     String[] morse = text.split(" ", 0);
     for (String moji : morse) { 
     if (moji.equals("--・--")) { 
         convertText += moji.replaceAll("--・--", "ア"); 
     } 
     return convertText; 
}

何をしたかったかというと、
textで入ってきたモールス信号を全角空白で分割し、”ーー・ーー”という文字列があった場合に「ア」に変換して返す
というものでした。

if (moji.equals("--・--")) {

しかし、この一文はfalseとなりスルーされてしまいます。何度”ーー・ーー”を入力しても一致しないものとして処理されていました。
これに2、3週間悩みました。

デバッガで調べていたところどこでfalseになっていたかというと、
Stringクラスのequalsメソッドのある部分でfalseが返されていました。

    @Override public boolean equals(Object other) {
        if (other == this) {
          return true;
        }
        if (other instanceof String) {
            String s = (String)other;
            int count = this.count;
            if (s.count != count) {
                return false;
            }
            // TODO: we want to avoid many boundchecks in the loop below
            // for long Strings until we have array equality intrinsic.
            // Bad benchmarks just push .equals without first getting a
            // hashCode hit (unlike real world use in a Hashtable). Filter
            // out these long strings here. When we get the array equality
            // intrinsic then remove this use of hashCode.
            if (hashCode() != s.hashCode()) {// ここにひっかかる
                return false;
            }

どうもhashCodeの違いでequalsを使っても一致しなかったらしい。

そこで以下のように書き換えてみたところうまく機能した。

protected String convertMorseToText(String text) { 
     String[] morse = text.split(" ", 0);
     for (String moji : morse) { 
     String enc = new String(moji);
     if (enc.equals("--・--")) { 
         convertText += enc.replaceAll("--・--", "ア"); 
     } 
     return convertText; 
}

入力されたtextを全角空白で分割する所までは一緒。
違いは、新しくencという文字列をmojiを使って生成して比較するという部分でした。
これでhashCodeの違いを解消できました。

equalsメソッドをオーバーライドしたりhashCodeメソッドをオーバーライドしたりという解決方法もあるにはあったのですが、自分はこの方法でequalsメソッドの罠を回避しました。

後学のためにメモとして残しておきます。