futabooo blog

色々手をつけすぎてすぐに忘れるので備忘録

AndroidManifestのapplicationタグにクラスを2つ指定したくなった時にやったこと

もともとActiveAndroidを使っていたので下記のようなManifestでした。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nilab.dribbbleviewer" >

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    
    <application
        android:name="com.activeandroid.app.Application"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <meta-data android:name="AA_DB_NAME" android:value="sqlite.db" />
        <meta-data android:name="AA_DB_VERSION" android:value="1" />

        <activity
            android:name="com.nilab.dribbbleviewer.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


ここからVolleyのシングルトンクラスを追加しようと下記クラスを追加(参Android working with Volley Library

package com.nilab.dribbbleviewer;


import android.app.Application;
import android.text.TextUtils;

import com.activeandroid.ActiveAndroid;
import com.activeandroid.Configuration;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

public class AppController extends Application {

    public static final String TAG = AppController.class.getSimpleName();

    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;

    private static AppController mInstance;

    @Override
    public void onCreate(){
        super.onCreate();
        mInstance = this;
    }

    public static synchronized AppController getInstance(){
        return mInstance;
    }

    public RequestQueue getRequestQueue(){
        if(mRequestQueue == null){
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }
        return mRequestQueue;
    }

    public ImageLoader getImageLoader(){
        getRequestQueue();
        if(mImageLoader == null){
            mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache());
        }
        return mImageLoader;
    }

    public <T> void addToRequestQueue(Request<T> req, String tag){
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
}

ここから結局ManifestとApplicationクラスを継承したクラスを下記のように書き換えて動きました。
Manifestはapplicationタグの中を書き換え。

    <application
        android:name="com.nilab.dribbbleviewer.AppController"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">

        <activity
            android:name="com.nilab.dribbbleviewer.MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

AppControllerはonCreateの中と新たにメソッドを一つ追加。

public class AppController extends Application {

    @Override
    public void onCreate(){
        super.onCreate();
        Configuration.Builder builder = new Configuration.Builder(getBaseContext());
        builder.setCacheSize(1024*1024*4);
        builder.setDatabaseName("sqlite.db");
        builder.setDatabaseVersion(1);
        ActiveAndroid.initialize(builder.create(), true);

        mInstance = this;
    }

    @Override
    public void onTerminate(){
        super.onTerminate();
        ActiveAndroid.dispose();
    }

以上。
美しくないですね。。。

homebrewとhomebrew-caskとBrewfileでmacの環境構築を楽にする

追記:2014/10/26
Google日本語入力が入らなかったのは僕がミスをしていたからでしたorz
修正しました。

追記:2014/06/11
この内容だとGoogle日本語入力がインストールされませんでした。
あとkeepassxが最新版っぽく、windowsとdbを共有で使っていた自分には合わなかったです。
バージョン指定とかをできるのかな?


参考
homebrew-caskを使って簡単にMacの環境構築をしよう! | nanapi TechBlog


mac買い替えたとかでアプリケーションをネットから探してhogehogeとか
めんどいなーと思っていたら、homebrew-caskというのがあるのを偶然知った。


homebrewでGoogleCromeとかがインストールできちゃうやつ。
homebrewのコマンドを書いておいて一括インストールとかできるBrewfile。
この2つを使って環境構築をある程度自動化。


今の時点でははこんな感じになりました。
必要なモノが増えたら適宜増やしていこうかと。

# HomeBrewを最新版にアップデート
update
# Fomulaを更新
upgrade
# リポジトリーの追加
tap phinze/homebrew-cask
# パッケージのインストール
install git
install ricty
install brew-cask
# アプリケーションのインストール
cask install android-studio
cask install bettertouchtool
cask install caffeine
cask install clipmenu
cask install dropbox
cask install evernote
cask install filezilla
cask install genymotion
cask install google-chrome
cask installl google-japanese-ime
cask install iterm2
cask install keepassx
cask install keyremap4macbook
cask install pckeyboardhack
cask install skitch
cask install skype
cask install sophos-anti-virus-home-edition
cask install startninja
cask install sublime-text
cask install virtualbox
cask install xtrafinder
cask install yorufukurou
# 不要なファイル削除
cleanup
cask cleanup

まだ一回も使ってないのでちゃんと動くのかはわかりません(´・ω・`)

neobundleをgithubで管理するときにハマったこと

最初に自分が作った環境をgithubにあげて、別の環境で下記コマンド実行

$ git clone https://github.com/futabooo/dotfiles.git --recursive
Initialized empty Git repository in /home/futabooo/dotfiles/.git/
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 22 (delta 7), reused 19 (delta 4)
Unpacking objects: 100% (22/22), done.
Submodule '.vim/bundle/neobundle.vim' (https://github.com/Shougo/neobundle.vim.git) registered for path '.vim/bundle/neobundle.vim'
Initialized empty Git repository in /home/futabooo/dotfiles/.vim/bundle/neobundle.vim/.git/

ここでずーと先に進まない。
原因は.gitmodule内のURLの書き方でした。

修正前

[submodule ".vim/bundle/neobundle.vim"]
     path = .vim/bundle/neobundle.vim
     url = http://github.com/Shougo/neobundle.vim.git

urlをhttpsに変更するだけで解決

[submodule ".vim/bundle/neobundle.vim"]
     path = .vim/bundle/neobundle.vim
     url = https://github.com/Shougo/neobundle.vim.git


参考
git clone コマンドが何故か進まない。 - よしだのブログ

AndroidStudioでaidlファイルを追加する方法

mainのjavaと同じ階層にaidlフォルダを作って、javaと同じようにパッケージを作った下にファイル作成
f:id:futabooo:20140420190620p:plain


app/build.gradleを編集、androidのブロックの中に下記を追加

    sourceSets{
        main{
            aidl.srcDirs = ['src/main/aidl']
        }
    }

AndroidStudio0.5.4でFacebookSDKを追加する方法

環境
OSX 10.9.2
AndroidStudio 0.5.4
FacebookSDK 3.8.0


FacebookSDKにかかわらず、ライブラリーを追加する場合は大抵この方法でしょう。

1.FacebookSDKを設置

FinderでコピペでAndroidStudioにも反映されます。
追加後は下記のようなフォルダ構成です。
/Users/futabooo/AndroidStudioProjects/Iwaeme/libraries/facebook
f:id:futabooo:20140406202645p:plain

2.settings.gradleを編集

settings.gradleを編集します。
f:id:futabooo:20140406203428p:plain


後半部分を追加。

include ':app', ':libraries:facebook'

3.build.gradleを編集

開発するプロジェクトの方のbuild.gradelを編集します。
f:id:futabooo:20140406202653p:plain


最後の1行を追加。

dependencies {
    compile 'com.android.support:support-v4:19.+'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':libraries:facebook')
}

4.確認

Sync Project with Gradle Filesを押下して設定を反映させたのち、
下記のように補完が聞けば追加に成功しています。
f:id:futabooo:20140406203749p:plain


iTerm2のカラースキーマまとめ

最近ターミナルの作業をすることが増えてきまして、iTermの画面とにらめっこすることが増えてきました。
そこで色を変えたいなーと思い、方法を調べるついでにすでに用意されてるiTerm用のカラースキーマまとめてみました。

iTermのカラースキーマ設定方法

すでに用意されたカラースキーマからimportしちゃいます。

1.preferences>Profiles>なんか適当に新規作成>Colors>LoadPresets>import
f:id:futabooo:20140311015235p:plain


2.適当にネットでDLしてきたカラースキーマを指定する
.itermcolorsファイルをimport
f:id:futabooo:20140311015716p:plain


3.importした設定を有効にする
f:id:futabooo:20140311015819p:plain


完了。一枚目のキャプチャとはColorsが変わっています。
f:id:futabooo:20140311015839p:plain

別の方法

書いてる途中でこんなサイト発見
Iterm Themes - Color Schemes and Themes for Iterm2

さくらのVPSを借りた時にとりあえずここまではやっておくって事

参考
VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 | dogmap.jp


基本的には参考URLの焼き直し。
#はrootで実行。$は最初に作成した一般ユーザで実行。

作業用ユーザーの作成

rootユーザのパスワード漏れたりしたら\(^o^)/なので普段の作業はこいつでする。

# useradd futabooo
# passwd futabooo

rootになれるようにwheelグループに追加

$ usermod -G wheel futabooo
$ visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

ssh公開鍵方式でログインできるようにする

ssh公開鍵自体は自分のローカルマシンで作成しておく
パーミッションも変更してセキュリティ向上

$ scp -P 22 sakuraVPS_id_rsa.pub futabooo@割り当てられてるIPアドレス:
$ mkdir .ssh
$ chmod 700 .ssh
$ mv sakuraVPS_id_rsa.pub .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

rootでのログイン、パスワードでのログインをできなくする

# vi /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

sshポートの変更を変更してsshd再起動

hogeはデフォで2だけど、変更しておく。22だと簡単にアタックされる。
他にもよくあるのは1022とか。

$ vi /etc/ssh/sshd_config
Port hoge
$ /etc/rc.d/init.d/sshd restart

iptablesの設定をする

hogeはさっきsshの時に設定したPort番号と合わせる

# vi /etc/sysconfig/iptables
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport hoge -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

# /etc/rc.d/init.d/iptables restart
# /sbin/chkconfig iptables on

yumのアップデート

# yum update

denyhostsを導入する

ssh規定回数以上ログインに失敗したアクセス元の IP アドレスをアクセスできないようにするやつ

# yum install -y denyhosts
# /etc/init.d/denyhosts start
# /sbin/chkconfig denyhosts on

logwatchを導入する

サーバー監視ツール。一日一回設定したメアドにメールで内容を送ってくれる。

# yum install -y logwatch
# vi /etc/logwatch/conf/logwatch.conf
MailTo = example@co.j@

コンソールの日本語化

# vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

ここまでは決まった作業として行う。
最低限の設定。