PGメモ

非エンジニアの記録

Mac標準のApache起動と停止

http://www.flickr.com/photos/34145688@N00/118666362
photo by arquera

Macには元よりApacheが入ってる。
その起動と停止について

起動コマンド。rootでないと打てないコマンドなのでsudo

sudo apachectl start

その後パスワードを求められるので打つ。

起動していればhttp://localhost/とブラウザに打てばIt works!の文字が見えるはず。

停止は

sudo apachectl stop

ちなみにドキュメントルートは

/Library/WebServer/Documents/

以上です

データを保存する[iOS 8/X code6]

http://www.flickr.com/photos/44718928@N00/8016192302
photo by justgrimes


swiftでデータを保存したい時にどうすればよいか。
ここでは一番簡単なNSUserDefaultsを使います。

新規プロジェクトをSingleView Applicationで作る

今回は最小の実装にするため、SingleView Applicationにてプロジェクトを作成します。
名前は適当に「saveSample」にでもします。

オブジェクトを配置

次にストーリーボードにオブジェクトを配置していきます
今回必要なものは
1. 保存用テキストフィールド
2. 保存用ボタン
3. 読み込み用ラベル
4. 読み込み用ボタン

オブジェクトの連携

まずはテキストフィールドとラベルをctrlを押しながらドラッグして
コントローラーとひも付けます。ConnectionはOutlet。
名前ですが
保存用テキストフィールドが「textField」
読み込み用ラベルが「label」
とします

次はボタンのアクションです。
こちらも同様にctrlを押しながらドラッグします。
ConnectionはActionにして
保存用ボタンが「save」
読み込み用ボタンが「load」
としてください。

ソースコードは下記のようになっていると思います

class ViewController: UIViewController {
     
    // TextFieldのアウトレット
    @IBOutlet weak var textField: UITextField!
     
    // Labelのアウトレット
    @IBOutlet weak var label: UILabel!
     
     
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
    // saveボタンのアクション
    @IBAction func saveButton(sender: AnyObject) {
    }
 
    // loadボタンのアクション
    @IBAction func loadButton(sender: AnyObject) {
    }
 
}

アクションを追記

あとは保存、読み込みを実装するだけです。
まずは保存

// saveボタンのアクション
@IBAction func saveButton(sender: AnyObject) {
    // データ保存処理
     
    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()
 
    // キー: "saveData" , 値: "<textFieldの入力値>" を格納。(idは任意)
    userDefaults.setObject(textField.text, forKey: "saveData") 
}


NSUserDefaultsとは何か
アプリ固有の設定値を保存することに特化したクラスで
アプリ開発者は NSUserDefaults オブジェクトを通して
Key-Value 形式でデータにアクセスします

データの保存場所の管理は NSUserDefaults オブジェクトがすべて行ってくれます。
実際のデータは ホーム/Library/Preferences 以下にプロパティリスト形式で保存されます。



次に読み込み

// loadボタンのアクション
@IBAction func loadButton(sender: AnyObject) {
    // データ読み込み処理
     
    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()
     
    // キーが"saveText"のStringをとります。
    var loadText : String! = userDefaults.stringForKey("saveData")
     
    // labelに表示
    label.text = loadText
     
}

これで実行し、テキストフィールドに値を入れてsaveを押すと値が保存され
loadを押すと先ほどの値がラベルに表示されるはずです。

意外と簡単ですね。

vimでの前方一致

URLのパラメータから一部を消したい。
http://sample.com/?chome=chome&option=foo&var=123

:%s//option=.\{-}&//g

{-}
を使います。

PHPの複数ファイルアップロードで$_FILESが空

PHP複数ファイルアップロードで$_FILESが空になるときがある。
原因を調べたらphp.iniのmax_post_sizeだった。

これを上回るファイルがアップロードされると
そもそも配列に値が入らない。

言っておくれよ。

【永久保存版】Excelで都道府県、住所、番地、その他を抽出する

いつもいつも悩まされる都道府県、市区町村、番地、その他を抽出する関数を。

前提:
・1行目にはカラム名
・2行目から左から、全住所、都道府県、市区町村、番地+その他、番地、その他

1. 都道府県

=IF(MID(A2,4,1)="県",LEFT(A2,4),LEFT(A2,3))

1. 市区町村(政令指定都市対応)

=IF(
 AND(COUNTIF(A2,"*都*"),COUNTIF(A2,"*区*")),
 MID(A2,4,FIND("区",A2,1)-FIND("都",A2,1)),
  IF(
   AND(COUNTIF(A2,"*都*"),COUNTIF(A2,"*市*")),
   MID(A2,4,FIND("市",A2,1)-FIND("都",A2,1)),
    IF(
     AND(COUNTIF(A2,"*府*"),COUNTIF(A2,"*区*")),
     MID(A2,4,FIND("区",A2,1)-FIND("府",A2,1)),
       IF(
        AND(COUNTIF(A2,"*府*"),COUNTIF(A2,"*市*")),
        MID(A2,4,FIND("市",A2,1)-FIND("府",A2,1)),
          IF(
           AND(COUNTIF(A2,"*県*"),COUNTIF(A2,"*区*")),
           MID(A2,FIND("県",A2,1)+1,FIND("区",A2,1)-FIND("県",A2,1)),
             IF(
              AND(COUNTIF(A2,"*県*"),COUNTIF(A2,"*市*")),
              MID(A2,FIND("県",A2,1)+1,FIND("市",A2,1)-FIND("県",A2,1)),
                IF(
                 AND(COUNTIF(A2,"*道*"),COUNTIF(A2,"*区*")),
                 MID(A2,FIND("道",A2,1)+1,FIND("区",A2,1)-FIND("道",A2,1)),
                   IF(
                    AND(COUNTIF(A2,"*道*"),COUNTIF(A2,"*市*")),
                    MID(A2,FIND("道",A2,1)+1,FIND("市",A2,1)-FIND("道",A2,1)),
                     IF(
                      AND(COUNTIF(A2,"*道*"),COUNTIF(A2,"*郡*")),
                      MID(A2,FIND("道",A2,1)+1,FIND("郡",A2,1)-FIND("道",A2,1)),
                     )
                   )
                 )
              )
           )
        )
     )
  )
)

3. 番地+その他

=SUBSTITUTE(A2,LEFT(A2,FIND( RIGHT(C2,1),A2,1)),"")

4. 番地

=IF(ISERROR(LEFT(D2,FIND(" ",D2)))=TRUE, D2,LEFT(D2,FIND(" ",D2)))

5. その他

=IF(E2="", "",IF(ISERROR(SUBSTITUTE(D2,E2,""))=TRUE,"",SUBSTITUTE(D2,E2,"")))

mecabをphpで使う

本体をインストール

wget http://mecab.googlecode.com/files/mecab-0.98.tar.gz
tar xzf mecab-0.98.tar.gz
cd mecab-0.98
cd src/
vim mecab.h
cd ..
./configure --with-charset=utf-8
make & make install

PHPmecabを使えるようにする

wget -O php_mecab-0.5.zip https://nodeload.github.com/rsky/php-mecab/zip/master --no-check-certificate
unzip php_mecab-0.5.zip 
mv -f php-mecab-master/ php-mecab-0.5
cd php-mecab-0.5/mecab/
phpize
./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
make & make instlal

php.iniを編集

vim /etc/php.ini
extension=mecab.so

サーバ再起動

service httpd restart

vimで複数行末に一気に文字を挿入する方法

「control + v」で矩形選択モードへ

「Shift + G」で一番下まで選択

「$」 で行末まで選択

「A」で挿入モードへ