yasuoza diary

web and life

Swift can’t retrieve data from keychain on Release build

With, swift, we can(should) retrive data like

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var keychainQuery: NSMutableDictionary = NSMutableDictionary(
    objects: [
      kSecClassGenericPasswordValue,
      service,
      key,
      kCFBooleanTrue,
      kSecMatchLimitOneValue
    ],
    forKeys: [
      kSecClassValue,
      kSecAttrServiceValue,
      kSecAttrAccountValue,
      kSecReturnDataValue,
      kSecMatchLimitValue
    ]
)

var dataTypeRef :Unmanaged<AnyObject>?

// Search for the keychain items
let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef)

var contentsOfKeychain: NSString?

if status == errSecSuccess {
    let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()

    // Convert the data retrieved from the keychain into a string
    contentsOfKeychain = NSString(data: retrievedData, encoding: NSUTF8StringEncoding)
}

Otherwise, on release build, swift can’t retrieve data from keychain with above code.
This is related to Swift compiler's Optimization Level.

So, first option is changing Optimization Level of Relase to be None [-Onone]. But this drops code optimization, so following code is recommended.

1
2
3
4
5
6
7
8
9
10
var result: AnyObject?
var status = withUnsafeMutablePointer(&result) { SecItemCopyMatching(keychainQuery, UnsafeMutablePointer($0)) }

if status == errSecSeccess {
    if let data = result as NSData? {
        if let contentsOfKeychain = NSString(data: data, encoding: NSUTF8StringEncoding) {
            // ...
        }
    }
}

The point is to use withUnsafeMutablePointer, previous example we used Unmanaged.
This should solve the issue.

refs: http://stackoverflow.com/questions/26355630/swift-keychain-and-provisioning-profiles

DayOne

DayOne.appを使うようになってからブログもtwitterもあんまり更新しないようになったなぁ。

iPhone6 雑感

iPhone6を買った。はじめはAndroid Lを搭載したNexus Xを買う予定だったんだけど、

  • 家中がApple製品であふれていて、iOSを持っていたほうがこれまでの資産を使える
  • iOS8 x mvnoでテザリングが出来る

ことが決め手となって、シムフリーのiPhone6を買った。

これまではiPhone5を使っていたんだけど、iPhone6を使い始めてから2~3日たった今日現在の感想としては

  • 4.7インチは快適
  • 画面上に指が届かないということはない(ホームボタン2回タップして、画面を下に下げる機能は使わない)
  • 指紋認証(Touch ID)がとても便利

なことがとても印象に残っている。

特に画面サイズに関しては、これを理由にiPhone6への以降を躊躇している人もいるレベルなのだが、私としては iPhone6の画面サイズならぎりぎり片手で扱えるサイズであると思っている。
そのため、iPhone6から登場した、ホームボタンを2回タップすることで画面を下に下げるというアクションはほとんどつかっていない。 「ほとんど」な理由は横になりながらの操作では片手だと厳しい場合がたまにあり、その時に使ったりするからだ。

2年前、iPhone5を手に入れた時はその大きさ、軽快さにびっくりしたが、今回はそこまで驚くことはなかった。 逆に「しっくりきた」というほうが合っている。

個人的には2014年買ってよかったものランキングでもかなり上位に入る1品になった。

ホワイトBB契約 つづき

ホワイトBB解約からの再契約の記事を書いてから2週間強、 NTTの工事も無事終わり、ホワイトBBの加入権ありで申し込みを行った。

ソフトバンクショップで加入権なしのホワイトBBを解約するときに、もしかしたら今使っているモデムをそのまま使えるかもしれないから、 加入権ありで契約するときにその旨をオペレータに伝えてみてって言われたので、その旨伝えたら、

モデムにデータを入れて送るので、使い回しは出来ないんです。以前使っていたモデムは返却をお願いします。

ってあっさり言われちゃったorz

まぁそうだよなー。システム的に出来るとしてもイレギュラー過ぎて対応もめんどくさいだろうしなー。

というわけで、前に使っていたモデムは送りました。早くこいインターネット。

Octopress heart Emoji

Do you like Emoji? I do.

If you want to use emoji in octopress, follow the steps.

First, add ‘gemoji’ to development dependencies.

1
2
3
group :development do
  gem 'gemoji', '~> 2.0.0'
end

Then open _config.yml and define emoji_dir.

1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/_config.yml b/_config.yml
index 21b236a..b1136d3 100644
--- a/_config.yml
+++ b/_config.yml
@@ -33,6 +33,7 @@ destination: public
 plugins: plugins
 code_dir: downloads/code
 category_dir: /categories
+emoji_dir: images/emoji
 markdown: rdiscount
 rdiscount:
   extensions:

Create emoji.rb in plugins directory with following content.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Jekyll Emoji
#
# Originally developed by
# Chris Kempson (http://chriskempson.com)
# https://github.com/chriskempson/jekyll-emoji
#
# A jekyll plug-in that provides a Liquid filter for emojifying text with
# https://github.com/github/gemoji. See http://www.emoji-cheat-sheet.com for
# a full listing of emoji codes.
#
# Installation:
#   - Run `gem install gemoji` or add `gem 'gemoji'` to your gemfile and run `bundle install`
#   - Copy this file to your `_plugins` directory
#   - Add a line like `emoji_dir: images/emoji` to your `_config.yml`
#   - If you want to use external source for emoji, set `emoji_dir: http://...` to your `_config.yml`.
#
# Usage:
#   - Apply the filter wherever needed e.g. false
#   - Add some emoji to your article! e.g. "Hello wink"

require 'gemoji'

module Jekyll

  module EmojiFilter

    def emojify(content)
      return false if !content

      config = @context.registers[:site].config
      return if config['emoji_dir'].nil?

      if config['emoji_dir']
        if config['emoji_dir'].start_with?('http')
          emoji_dir = config['emoji_dir']
        else
          emoji_dir = '/' + File.join(config['emoji_dir'])
        end
      end

      content.to_str.gsub(/:([a-z0-9\+\-_]+):/) do |match|
        if emoji_dir && emoji = Emoji.find_by_alias($1) { false }
          %Q(<img alt="#{$1}" src="#{emoji_dir}/#{emoji.image_filename}" class="emoji" />)
        else
          match
        end
      end
    end
  end

  class EmojiGenerator < Generator
    def generate(site)
      config = site.config
      return false if not config['emoji_dir']
      return false if config['emoji_dir'].start_with?('http')
      emoji_dir = File.join(config['source'], config['emoji_dir'])
      return false if File.exist?(emoji_dir + '/smiley.png')

      # Make Emoji directory
      FileUtils.mkdir_p(emoji_dir)

      # Copy Gemoji files
      Dir["#{Emoji.images_path}/emoji/*"].each do |src|
        FileUtils.cp_r src, emoji_dir
      end
    end
  end

end

Liquid::Template.register_filter(Jekyll::EmojiFilter)

Next open sass/custom/_styles.scss and add

1
2
3
4
5
6
7
.emoji {
  box-shadow: none;
  border: 0;
  height: 20px;
  margin-bottom: 5px;
  vertical-align: middle;
}

Finally edit source/_includes/article.html and emojify your content like

1
<div class="entry-content">{{ content | excerpt | emojify }}</div>

Done! You can use emoji now! Enjoy!sunglassessunglassessunglasses

I’m a hub immigrant

I’m using GitHub for job and my code hosting. Especially for co-working project, PullRequest based development is very useful to maintain codes clean.

Using git in terminal, to submit PullRequest,

  • Push remote
  • Open GitHub
  • Write PR’s description
  • Submit

workflow is necessaly. But with hub, you can submit PR within terminal only with

git pull-request

command.

Those days I used Ruby based hub, but changed to use gh Go based hub replacer because of its speed. And now I’m using hub build with Go! Yes, hub is going to be developed with Go in the future!

To start using hub with Go,

1
2
3
4
git clone git@github.com:github/hub.git -b gh
cd hub
./script/bootstrap
./script/build

Then you can see executable hub binary at the root of the project. Copy or symlink the executable to your $PATH.

Have a Happy GitHub life!

ホワイトBB解約からの再契約

ホワイトBBをこれまでは加入権無しで契約していて、引越しを機に固定電話を契約することにしたので、 加入権無しから加入権ありに契約を変更したいとソフトバンクに電話したら、それは一旦契約を 解約しないといけないですね、ってことで今日解約してきた。

解約はサクッとできたんだけど、再契約する際には2週間の空白期間を空けてくれって言われた。

うちはたまたま固定電話の契約が少し先延ばしになったので、別によかったんだけど、もし再契約を 急いでいるときは注意が必要のようですね。

更新月の9月までは携帯のテザリング契約を継続させようと思ってたから、パケットの制限に引っかからないようにつかえば とりあえずはインターネットもなんとかできそうでよかったsweat_smile