ひよっこ http://hikaruworld.bitbucket.org/ ひだまりのなか、想ふこと。 en-us Tue, 09 Feb 2016 00:00:00 +0900 http://hikaruworld.bitbucket.org/2016/02/09/buri_2016.html http://hikaruworld.bitbucket.org/2016/02/09/buri_2016.html <![CDATA[富山合同勉強会2016をやったよ。]]> 富山合同勉強会2016をやったよ。

というわけで今年もやりました。

毎年この時期はぶりしゃぶの時期です。 当日まではブリが揚がっているか、当日は雪で交通網が麻痺しないか 気が気じゃ有りませんが、なんだかんだでみんな楽しそうにしているのを見れるのは 裏方としてはうれしい限りです。

ところで、懇親会で鰤しゃぶっていつからやってるんです?的な事を聞かれたんですが、 もうおぼえていないので、ふりかえりならぬ ぶりかえり をやってみました。

  1. Hokuriku.NET vol 5

    富山初のHokuriku.NET。ブリしゃぶの店をおさえられず 夜は富山のお酒の美味しいお酒を飲む普通の懇親会に。

  2. Hokuriku.NET vol 8

    またしても失敗。ってか時期的に鰤しゃぶ11月はまだ無理との事。知らんがな。 それではつまらないなという事で、利き鱒の寿司お昼になりました(Facebookのあの画像)。 これはこれですごかった。車の中が酢飯の1週間取れなかったのは懐かしい話。

  3. Hokuriku.NET vol 11

    3度目の正直。全ては鰤しゃぶのために。勉強会の募集よりも店が先。 そして初の鰤しゃぶ。衝撃のうまさ。

  4. Hokuriku.NET vol 13

    仕事でデスマーチ中で私は未参加。げふん。 みなさん段取り出来ずすいません。

  5. 富山合同勉強会

    Hokuriku.NETの大枠は残しつつ、Java勉強会と合流して富山合同勉強会の形に。 どうせみんな県外からもくるし、大人数で鰤しゃぶできるとなると 勉強会も懇親会も宿泊もできて温泉入れたら最高だよねという流れで呉羽ハイツに。

  6. 富山合同勉強会2016

    昨年に引き続き.NET × Java(etc...)の構成に少しずつ色々(Rubyとか)混ぜてみたり。 準備が遅れて呉羽ハイツが押さえられず(氷見でできないか探してた)、 富山大学+扇という構成になりました。 扇は今まで食べた鰤しゃぶの中でも一番すごかったかも。

以上です。 なんだかんだで結構続いています。

私は基本裏方なので当日はお任せなのですが、当日仕切ってくれる皆さまありがとうございます。

鰤しゃぶ来年もやれば5周年ですね。来年は記念に何かしたいなー。

気がつけばHokuriku.NET vol5 と同じ年度に生まれた息子ももう5歳です。

じゃあ、また来年ー。 ぶり!

]]>
Tue, 09 Feb 2016 00:00:00 +0900
http://hikaruworld.bitbucket.org/2013/08/12/jquery_placeholder_contenteditable.html http://hikaruworld.bitbucket.org/2013/08/12/jquery_placeholder_contenteditable.html <![CDATA[jQuery.contenteditable.placeholderプラグイン]]> jQuery.contenteditable.placeholderプラグイン

Qiitaに投稿した記事 のコピーです。

というわけで、表題の様に jQuery.contenteditable.placeholder というjQueryプラグインを作りました。

まだ未完成ですが....。

基本的な使い方はgithubに書いてある通りですが、 以下のような感じで利用できます。

// 一括指定したい場合
$(function() {
  $.setPlaceholder();
});

// 特定のID指定
$(function() {
  $.setPlaceholder("#test");
});

// 色々カスタマイズしたい場合
$(function() {
  $.setPlaceholder("#test", {inativeEvent: 'focus'});
});
]]>
Mon, 12 Aug 2013 00:00:00 +0900
http://hikaruworld.bitbucket.org/2013/04/14/tig_custom_command_on_tigrc.html http://hikaruworld.bitbucket.org/2013/04/14/tig_custom_command_on_tigrc.html <![CDATA[tigでカスタムコマンドを追加する]]> tigでカスタムコマンドを追加する

tig が便利です。

tig はデフォルトでは以下gitに関するコマンドのショートカットが提供されています(ヘルプより)。

'C'   `git commit`
'C'   `git checkout %(branch)`
'R'   `git rebase -i %(commit)`
'C'   `git cherry-pick %(commit)`
'G'   `git gc`

cherry-pickとか使えてかなり便利だったりするのですが、 色々使っているとこれだけだと物足りなくなってきてカスタマイズできるか調べてみました。

tigrc を読んでみると、 ~/.tigrc に任意の設定を記述する事で、カスタマイズ出来るようです。

自分は git rebase -i xxxx をしたいので以下のように設定を行いました。

bind main R !?git rebase -i %(commit)

簡単に説明しておきます...。

bind
任意のコマンドをバインドする事を宣言します。
main
メインウィンドウに対してカスタムコマンドを有効とします
R
ショートカットキーです。ここの設定だと shift+r で発動します。
!
外部コマンドを呼び出す場合
?
実行時にYES/NOで確認させたい場合に設定します。 さすがにrebase -i勝手に発動されると困るので、この設定をつけています。
git rebase -i
コマンドそのまま
$(commit)
tig上で選択している要素に対するCommitHashを表現する変数です。

上記の例では ? を利用して確認を表示する用にしていますが、 同等のフラグとして以下が定義可能です。

コマンド 概要
@ バックグラウンドで実行し、外部出力を行いません。
? コマンドを実行する前にユーザに対して、確認プロンプトを表示します。
< コマンド実行後tigを終了します。

利用できる変数は以下の通りです

変数 概要
%(head) The currently viewed head ID. Defaults to HEAD
%(commit) The currently selected commit ID.
%(blob) The currently selected blob ID.
%(branch) The currently selected branch name.
%(directory) The current directory path in the tree view; empty for the root directory.
%(file) The currently selected file.
%(ref) The reference given to blame or HEAD if undefined.
%(revargs) The revision arguments passed on the command line.
%(fileargs) The file arguments passed on the command line.
%(diffargs) The diff options passed on the command line.
%(prompt) Prompt for the argument value.

以上です。

]]>
Sun, 14 Apr 2013 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/14/cocoapods_framework_used_uikit_setting_error.html http://hikaruworld.bitbucket.org/2012/12/14/cocoapods_framework_used_uikit_setting_error.html <![CDATA[CocoaPodsのpodspecにUIKitを設定したらfile not foundが発生した]]> CocoaPodsのpodspecにUIKitを設定したらfile not foundが発生した

Kal というライブラリがCocoaPods上に登録されていなかったので、podspecを作成していて pod spec lint とかやってみたら

  • ERROR | [OS X] XCODEBUILD > Kal/src/KalMonthView.h:6:9: fatal error: ‘UIKit/UIKit.h’ file not found

で怒られました。

s.framework = 'UIKit'

をやっているんだけどなーと思ってCocoaPodsのissueを探してみると、 XCODEBUILD fatal error UIKit/UIKit.h file not found を発見。

ah got it, i have to set the platform explicit to iOS

ということだったので、

s.platform = :ios, '5.0'

を設定した問題なく実行されました。

以上です。

]]>
Fri, 14 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/12/kal_calender_setting_storyboardc.html http://hikaruworld.bitbucket.org/2012/12/12/kal_calender_setting_storyboardc.html <![CDATA[KalCalenderをStoryboard上の環境に適用させる]]> KalCalenderをStoryboard上の環境に適用させる

Kal というiOSのネィティブそっくりのカレンダーを提供してくれるライブラリがあります。しかもライセンスはMITという。このライブラリは便利なんですが、XCode4.5 / iOS6系の環境でstoryboard上に展開しようとしてちょっと考えたで、やり方をメモしておきます。

Kalをプロジェクトに連携させる

Kalのサイトではプロジェクト連携を以下の様に行うようにリファレンスが提示されています。

  1. Clone the Kal git repository: git clone git://github.com/klazuka/Kal.git. Make sure you store the repository in a permanent place because Xcode will need to reference the files every time you compile your project.
  2. Locate the “Kal.xcodeproj” file under “Kal/src/”. Drag Kal.xcodeproj and drop it onto the root of your Xcode project’s “Groups and Files” sidebar. A dialog will appear – make sure “Copy items” is unchecked and “Reference Type” is “Relative to Project” before clicking “Add”.
  3. Now you need to link the Kal static library to your project. Select the Kal.xcodeproj file that you just added to the sidebar. Under the “Details” table, you will see libKal.a. Check the checkbox on the far right for this file. This will tell Xcode to link against Kal when building your app.
  4. Now you need to add Kal as a dependency of your project so that Xcode will compile it whenever you compile your project. Expand the “Targets” section of the sidebar and double-click your application’s target. Under the “General” tab you will see a “Direct Dependencies” section. Click the “+” button, select “Kal” and click “Add Target”.
  5. Now you need to add the bundle of image resources internally used by Kal’s UI. Locate “Kal.bundle” under “Kal/src” and drag and drop it into your project. A dialog will appear – make sure “Create Folder References” is selected, “Copy items” is unchecked, and “Reference Type” is “Relative to Project” before clicking “Add”.
  6. Finally, we need to tell your project where to find the Kal headers. Open your “Project Settings” and go to the “Build” tab. Look for “Header Search Paths” and double-click it. Add the relative path from your project’s directory to the “Kal/src” directory.
  7. While you are in Project Settings, go to “Other Linker Flags” under the “Linker” section, and add “-all_load” to the list of flags.
  8. You’re ready to go. Just #import “Kal.h” anywhere you want to use KalViewController in your project.

えー、面倒ですねw。面倒なのでpodspecを書いてCocoaPodsで入れる事にします。

Kalにパッチを当てる(storyboard対応)

masterのKalにはstoryboard用の初期化処理が設定されていないため、storyboard上のUIViewControllerに KalViewController を設定しても以下のエラーで落ちてしまいます。

Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Failed to find corresponding tile for date 0/0/0’

これはstoryboard用の初期化処理が行われていない事が原因なので initWithCoder の実装を行うように設定します。ありがたい事にその修正を行っている人がいたのでマージさせてもらいます。

$ git clone https://github.com/klazuka/Kal
$ cd Kal
$ git remote add timle8n1 https://github.com/timle8n1/Kal.git
$ git fetch timle8n1
$ git cherry-pick 9cc6099e2866746f481a95b792a699267e9c5865

これでOKです。一応diffはこんな感じになります。

diff --git src/KalViewController.m src/KalViewController.m
index 62245b8..90b21c7 100644
--- src/KalViewController.m
+++ src/KalViewController.m
@@ -40,18 +40,31 @@ NSString *const KalDataSourceChangedNotification = @"KalDataSourceChangedNotific

 @synthesize dataSource, delegate, initialDate, selectedDate;

-- (id)initWithSelectedDate:(NSDate *)date
+- (void)setupWithDate:(NSDate *)date
 {
-  if ((self = [super init])) {
     logic = [[KalLogic alloc] initForDate:date];
     self.initialDate = date;
     self.selectedDate = date;
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(significantTimeChangeOccurred) name:UIApplicationSignificantTimeChangeNotification object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name:KalDataSourceChangedNotification object:nil];
+}
+
+- (id)initWithSelectedDate:(NSDate *)date
+{
+  if ((self = [super init])) {
+      [self setupWithDate:date];
   }
   return self;
 }

+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    if ([super initWithCoder:aDecoder]) {
+        [self setupWithDate:[NSDate date]];
+    }
+    return self;
+}
+
 - (id)init
 {
   return [self initWithSelectedDate:[NSDate date]];

Kalにローカライズ対応を行う(日付のフォーマット)

Kalはとても素敵なライブラリなのですが、日付のフォーマットが日本語ロケールで表示されない問題があります。システムロケールでカレンダーが表示されるように修正します。これもForkされた方が修正されているので、ありがたく拝借させて頂きます。

$ cd Kal
$ git remote add biohazardffm https://github.com/biohazardffm/Kal.git
$ git fetch biohazardffm
$ git cherry-pick 4bd66c948b16cd17863ca06e6dfc7a22cc964fac

ただし、これだけだと、タイトル部分しか変更されず、かつフォーマットが固定されてしまいます。そこで曜日に関してもシステムロケールで表示されるようにする設定を行います。

# 日付のフォーマットが `LLLL yyyy` に固定されてしまっていますがこの変更はいったん行いません。

上記の ‘4bd66c948b16cd17863ca06e6dfc7a22cc964fac’ をマージした結果に追加して KalView 側で曜日設定のフォーマットを定義している箇所を修正します。修正結果はこんな感じです。

diff --git src/KalLogic.m src/KalLogic.m
index c15e161..adc8981 100644
--- src/KalLogic.m
+++ src/KalLogic.m
@@ -34,6 +34,8 @@
 {
   if ((self = [super init])) {
     monthAndYearFormatter = [[NSDateFormatter alloc] init];
+    [monthAndYearFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[NSLocale preferredLanguages][0]]];
+    //TODO: custom format
     [monthAndYearFormatter setDateFormat:@"LLLL yyyy"];
     [self moveToMonthForDate:date];
   }
diff --git src/KalView.m src/KalView.m
index def1dcb..3815830 100644
--- src/KalView.m
+++ src/KalView.m
@@ -126,7 +126,9 @@ static const CGFloat kMonthLabelHeight = 17.f;
   [nextMonthButton release];

   // Add column labels for each weekday (adjusting based on the current locale's first weekday)
-  NSArray *weekdayNames = [[[[NSDateFormatter alloc] init] autorelease] shortWeekdaySymbols];
+  NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
+  [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[NSLocale preferredLanguages][0]]];
+  NSArray *weekdayNames = [formatter shortWeekdaySymbols];
   NSArray *fullWeekdayNames = [[[[NSDateFormatter alloc] init] autorelease] standaloneWeekdaySymbols];
   NSUInteger firstWeekday = [[NSCalendar currentCalendar] firstWeekday];
   NSUInteger i = firstWeekday - 1;

これで日本語で曜日が表示されるようになります(日本語設定ならば)。曜日が日本人的にはすごい微妙ですが、まぁ後ほど修正する方向で。

../../../_images/before.jpeg ../../../_images/after.png

画像がバンドルされずカレンダーがおかしくなる

後述するCocoaPodsで取り込めば大丈夫なのですが、プロジェクト連携した場合に私の設定がおかしかったのか、背景画像が適用されないことがありました。とりあえず kal.bundle をクラス直下においてあげると無事認識されて表示されました。

podspecの作成

Note

12/18 追記 以下に独自に podspec を作成する方法を書いていますが、さっき確認してみたら CocoaPods/Specs に数ヶ月前に追加されていました。そっちを使う方が早いでしょうー(カレンダーやstoryboardのパッチは別途必要ですが)

簡単に導入するためにpodspecを書いてローカルリポジトリに登録しておいて、 pod install でインストール出来るようにpodspecを作成します。こちらは作成したpodspecを張っておきます。リンクが今まで修正した版ではなくオリジナルのKalを見ているので、必要があれば自分でForkして上記対応を行う事をお勧めします。

Pod::Spec.new do |s|
  s.name         = "Kal"
  s.version      = "0.0.1snapshot"
  s.summary      = "A calendar component for the iPhone (the UI is designed to match MobileCal)"
  s.homepage     = "http://www.thepolypeptides.com"
  s.license      = 'MIT (example)'
  s.author       = { "Keith Lazuka" => "klazuka@gmail.com" }
  s.source       = { :git => "https://github.com/klazuka/Kal.git", :commit => "2ebc23a24290f535073ce57ee2a630de8e2b804c" }
  s.platform     = :ios, '5.0'
  s.source_files = 'src/*.{h,m}'
  s.resources = "src/Kal.bundle"
  s.framework  = 'UIKit'
end

以上です。

]]>
Wed, 12 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/07/jenkins_and_xcode_with_cocoapods_how_to_build_rst.html http://hikaruworld.bitbucket.org/2012/12/07/jenkins_and_xcode_with_cocoapods_how_to_build_rst.html <![CDATA[jenkinsでXcode(+cocoapods)向けのビルド環境を構築する(無理矢理な方法)]]> jenkinsでXcode(+cocoapods)向けのビルド環境を構築する(無理矢理な方法)

jenkinsをXcode向けにビルド環境を構築するやり方がいくつかブログにありますが、workspace向けの記事があまりありません。正確には、CocoaPodsを活用したjenkinsのビルド構築の方法が、ですが。

必要に迫られて構築してみたら、微妙にハマったのでやり方をメモしておきます。

基本的な流れとしては、以下の通りです。

  1. CocoaPodsで依存関係をインストール
  2. Xcodeを起動する
  3. Xcode Pluginでビルド実行してIPAファイル化
  4. Xcodeを閉じる
  5. sshプラグインなどで、生成されたIPAファイルをOTA環境にupload

# 但し、5は今回省きます

Xcodeを起動する必要性に関して

CocoaPodsを用いてプロジェクトを構築している場合、workspaceフォルダを起動するまでschemeの設定が書き込まれません。 *.workspaceCocoaPods によって生成される2次ファイルのため、コミットしたくありません。そのため、 pod instlal 後に一旦Xcodeを起動してworkspaceファイルを更新する必要があります。

# 起動時のシーケンスをエミュレートしようとしたんですが、変数色々あって実は楽な方へ逃げました(汗。

なお、Xcodeを起動していない状態で、podによって生成されたworkspace領域に対して試しに xcodebuild -list するとこんな感じに言われます。

$ cd sample
$ xcodebuild -list

Information about project "sample":
    Targets:
        sample

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    This project contains no schemes.

ビルド構成

ビルドの方法を以下に記述します。 既にjenkins(およびxcodeプラグイン)のインストールと起動は済んでいると前提とします。

0. バージョン対象外ファイル

プロジェクトルートの * Pods/ * Podfile.lock * <<application>>.xcworkspace は先ほども述べたようにPodsによって生成される2次ファイルのため、バージョン管理対象としません。

1. CocoaPodsによる依存関係のクリーンインストール

Pods / Podfile.lock / <<application>>.workspaceCocoaPods で生成を行います。

$ cd sample
$ pod install
# 上記の理由によりXcodeを一度起動させる必要がある
$ pod install

2. Xcodeの起動

アプリケーションを起動して、xcworkspaceの設定を反映させます。

# (但しXcodeが起動していると手動でXcodeの再読み込みを行うかのチェックが走るので、いったん強制的にXcodeをを落とす)
$ pgrep -f "/Applications/Xcode.app" | xargs kill
$ open sample.xcworkspace
$ sleep 5

2. Xcodeビルドの実行

基本的にはProject指定と同じですが xcodebuild の以下の書式に従うように設定をいじります。

xcodebuild -workspace <workspacename> -scheme <schemeName> [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...

Jenkins上のxcodeのビルド設定のうち Xcode Schema FileXcode Workspace FileXcode Project Directory 辺りの設定が必要になると思います。

1. Xcodeを終了

Xcodeを終了します。

$ pgrep -f "/Applications/Xcode.app" | xargs kill

これでCocoaPodsで構築しているXcodeプロジェクトをJenkinsでも行うことが可能です(とても微妙ーな方法ですが...。)

以上です。

]]>
Fri, 07 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/06/dcroundswitch_of_exc_bad_access.html http://hikaruworld.bitbucket.org/2012/12/06/dcroundswitch_of_exc_bad_access.html <![CDATA[DCRoundSwitchでEXC_BAD_ACCESSが発生する]]> DCRoundSwitchでEXC_BAD_ACCESSが発生する

DCRoundSwitch というUISwitchに表示される オン/オフ の表示をカスタマイズ出来る便利なライブラリがあります。このライブラリは非常に簡単に表示の制御と値監視を行うことが出来るのですが、

DCRoundSwitch *roundSwitch = [[DCRoundSwitch alloc] init];
roundSwitch.on = YES;
[roundSwitch addTarget:self action:@selector(hoge:) forControlEvents:UIControlEventValueChanged]

というような感じで実装を行うと、 EXC_BAD_ACCESS でさくっと落ちてしまいます。

一瞬参照保持していないためかなーと思ったのですが、実際はそうではなく、githubのissueに Crash in ARC project when adding a target after setting .on property というチケットがあがっていました。

I solved it by setting the value AFTER the addTarget call. So

ということなので、

DCRoundSwitch *roundSwitch = [[DCRoundSwitch alloc] init];
[roundSwitch addTarget:self action:@selector(hoge:) forControlEvents:UIControlEventValueChanged]
roundSwitch.on = YES;

で問題なく動作するようになりました。

以上です。

]]>
Thu, 06 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/04/sublime_text2_custom_split_config.html http://hikaruworld.bitbucket.org/2012/12/04/sublime_text2_custom_split_config.html <![CDATA[sublime text2のViewLayoutをカスタマイズする方法]]> sublime text2のViewLayoutをカスタマイズする方法

Sublime text2はViewのLayoutを任意にカスタマイズできます。この設定は好きに分割できますが、こういうウィンドウ構成や

../../../_images/layout_view_1.png

こういうウィンドウ構成は、

../../../_images/layout_view_2.png

メニューからは設定できません(少なくと自分はやり方分かりませんでした)。

設定方法

このような画面構成をしたい場合は、カスタムメニューを構成する必要があるようです。詳しくは、この辺りのエントリ( how to create a custom layout in sublime text 2? ) が参考になります。

具体的には、 Main.sublime-menu の設定を弄る必要があります。

# Sublime text2のデフォルト設定を弄るのはイヤなんですがこれってPackageSettingのUserみたいにユーザ単位で上書きできないんですかね?。

Main.sublime-menu の表示方法は command+Shift+P で起動するランチャーで Preferences: Browse Packages 辺りを入力すると Packages をFinderで開けるので、 Packages/Default/Main.sublime-menu を開きます。

ファイル内を set_layout 辺りで検索すると、390行目あたりにLayoutの設定があるので、こんな感じに付け加えます。

{
    "caption": "Custom",
    "command": "set_layout",
    "args":
    {
        "cols": [0.0, 0.33, 0.66, 1.0],
        "rows": [0.0, 0.5, 1.0],
        "cells":
        [
            [0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1],
            [0, 1, 3, 2]
        ]
    }
}

これで、ViewにCustomというLayoutが追加されます。

../../../_images/layout_config.png

実際に選択してみるとこんな感じになります。

../../../_images/grid_view.png

args の設定が微妙に分かりづらいので簡単にメモしておきます。 図示するとこんな感じです。

../../../_images/grid_view_annotate.png
  • cols はどのように横幅を分割するかを 0〜1 で設定を行います。上の例ですとほぼ等間隔に3分割する設定を行っています。
  • rows はどのように縦幅を分割するかを同様に 0〜1 で設定をします。上の例ですと縦に等間隔で2分割しています。
  • cellscolsrows で定義した分割をどのように割り当てるかを [開始colのインデックス, 開始rowのインデックス, 終了colのインデックス, 終了rowのインデックス] の形式で指定します。

以上です。

]]>
Tue, 04 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/04/objcetive_c_underlying.html http://hikaruworld.bitbucket.org/2012/12/04/objcetive_c_underlying.html <![CDATA[iOSのUILabelにアンダーラインを引く方法]]> iOSのUILabelにアンダーラインを引く方法

iOS6以上の場合、 UILabel#attributedText で簡単にアンダーラインを引くことが出来ます。 プログラムだけではなく、storyboardでも UILabelTextplain から attributed に設定することで、表示されている文字1文字単位で Fontsパネル から簡単に変更可能です。

../../../_images/attributed_text_config.png

iOS5以下(iOS5でしか確認していませんが)の場合は、 UIView#drawRectCG* 系のライブラリを使ってガリガリ書く必要があります。

static const CGFloat kPaddingWidth = 10.0;
static const CGFloat kPaddingHeight = 5.0;
static const CGFloat kLineWidth = 1.0;
static const CGFloat kRGBRed = 0.5;
static const CGFloat kRGBGreen = 0.5;
static const CGFloat kRGBBlue = 0.5;
static const CGFloat kRGBAlpha = 1.0;

-(void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    //drawing underline
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, kRGBRed, kRGBGreen, kRGBBlue, kRGBAlpha);
    CGContextSetLineWidth(context, kLineWidth);
    CGContextMoveToPoint(context, rect.origin.x + kPaddingWidth, rect.origin.y+rect.size.height - kPaddingHeight);
    CGContextAddLineToPoint(context, rect.origin.x+rect.size.width - kPaddingWidth, rect.origin.y+rect.size.height - kPaddingHeight);
    CGContextStrokePath(context);
}

最初 drawRect でがんばって書いてその後 attributedText に気づいたのは私ですが何か(涙)?

]]>
Tue, 04 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/03/tigrc_datetime_locale.html http://hikaruworld.bitbucket.org/2012/12/03/tigrc_datetime_locale.html <![CDATA[tigrcのログで時間にロケールを加味された時間が表示されるようにする]]> tigrcのログで時間にロケールを加味された時間が表示されるようにする

tig 便利ですね。愛用させて頂いています。

ところで、便利なtigなのですがコミットログを確認していると時間の表示にロケールが考慮されておらずタイムラインの時間が前後して見えるケースがあります。

たとえば、あるコミットログはこうなっていて

commit hogepiyo
Refs: drafts
Author:     user1
AuthorDate: Mon Dec 3 11:20:55 2012 +0900
Commit:     user1
CommitDate: Mon Dec 3 11:20:55 2012 +0900

別のコミットログはこうなっています。

commit hoge
Refs: drafts
Author:     user2
AuthorDate: Mon Dec 3 11:30:55 2012 +0000
Commit:     user2
CommitDate: Mon Dec 3 11:20:55 2012 +0000

これはタイムラインで確認すると、

2012-11-30 11:20 user1            │ o user1のコミット
2012-11-30 02:40 user2            │ o user2のコミット

という風に見えてしまいます。

解決方法

これを回避してローカル時間で表示を行う為には、 ~/.tigrc というファイルを作成した上でで以下の設定を書く必要があります。 .tigrc はtigの設定ファイルですね。

set show-date = local

こうすることでローカル時間で統一されて表示されます。

なお、この説明は man tigrc で確認出来ます(man tig だと欲しい説明が全然なくて焦りました(汗))。

以上です。

]]>
Mon, 03 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/12/03/xcode_open_class_name.html http://hikaruworld.bitbucket.org/2012/12/03/xcode_open_class_name.html <![CDATA[Xcodeでクラス名を指定して開く方法]]> Xcodeでクラス名を指定して開く方法

いわゆる、Eclipseのショートカットにある command + shift + T ですよ。これがないと、めちゃくちゃ面倒な操作が必要になるのです。ずっとないのかなーと悶々としてたら、最近 こんなスライド を見つけました。

というわけで、Xcodeでやりたい場合は、 command + Shift + O で行けるようです。

感謝!。

]]>
Mon, 03 Dec 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/30/uitableviewcell_not_apper_detail_text.html http://hikaruworld.bitbucket.org/2012/11/30/uitableviewcell_not_apper_detail_text.html <![CDATA[UITableViewCellのdetailTextLabelに値を設定しても反映されない]]> UITableViewCellのdetailTextLabelに値を設定しても反映されない

結論から言うとstoryboardの設定が間違っていたからorz....。 カスタム設定にしていた場合は、 UITableViewCell#detailTextLabel 自体は設定出来るけど有効にならないようです。

結局、Customから RightDetailに変更したら解決しましたorz...。

../../../_images/tableViewCellStyle.png

プログラムでUITableViewCellを生成している場合は、

が参考になります。たぶん。

]]>
Fri, 30 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/30/howto_uitableviewcell_resize_width.html http://hikaruworld.bitbucket.org/2012/11/30/howto_uitableviewcell_resize_width.html <![CDATA[UITableViewCellの横幅を調整する]]> UITableViewCellの横幅を調整する

UITableViewCellの縦幅は簡単に調整可能ですが、横幅は少し工夫して行う必要があります。 というか、 UITableViewDelegate#cellForRowAtIndexPath や、 UITableViewDelegate#willDisplayCell でframe辺りをいじって色々試してみたのですが、ちょっとうまく行かず困っていました。

色々検索していたら、 How to set the width of a cell in a UITableView in grouped style という投稿を発見しました。 その中の この返信 がまさに一番欲しいものだったので、とても参考になります。 補足で書かれている、Why is it better? Because the other two are worse. のくだりが興味深いですね。

ちなみにこんなクラスを定義して

// InsetCell.h
/**
 * マージン調整が可能なUITableViewCellの拡張クラスを提供します
 */
@interface InsetableTableCell : UITableViewCell
@property (nonatomic) CGFloat inset;
@end

メインクラスは、

// InsetCell.m
@implementation InsetableTableCell
(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
                // Initialization code
        }
        return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
        [super setSelected:selected animated:animated];

        // Configure the view for the selected state
}
- (void)setFrame:(CGRect)frame
{
        frame.origin.x += self.inset;
        frame.size.width -= 2 * self.inset;
        [super setFrame:frame];
}

@end

こんな感じで利用します(ほぼコピーです)。

// XXXController.mから抜粋
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        InsetableTableCell *cell = [tableView dequeueReusableCellWithIdentifier:"cell"];
        return cell;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
        InsetableTableCell *iCell = (InsetableTableCell *) cell;
        iCell.inset = 9.0;
}

以上です。

]]>
Fri, 30 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/29/objective_c_cgrect_cast_to_id.html http://hikaruworld.bitbucket.org/2012/11/29/objective_c_cgrect_cast_to_id.html <![CDATA[Objective-CでCGRectをid型へキャストする]]> Objective-CでCGRectをid型へキャストする

前回 の方法で値を設定しようとしたところ、 引数がCGRect型でそのまま設定したらエラーになってしまいました。

他のクラスと同じようにキャストする方法あるんだろうなーと思って探していたら、 stackoverflowに 『Xcode - cast CGRect to ID? 』というまんまの質問がありました。

というわけで、

// CGRect => NSValue
NSValue *rectValue = [NSValue valueWithCGRect:rect];
// NSValue => CGRect
CGRect rect = [someNSValue CGRectValue];

でいけました。

参考ページ

]]>
Thu, 29 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/29/objective_c_category_add_property.html http://hikaruworld.bitbucket.org/2012/11/29/objective_c_category_add_property.html <![CDATA[Objective-Cでカテゴリにプロパティを持たせる]]> Objective-Cでカテゴリにプロパティを持たせる

<objc/runtime.h>objc_getAssociatedObject を使えば出来ますよとのこと。

// Sample.h
@interface Sample (SampleCategory).
    @property (nonatomic) NSString *value;
@end
// Sample.m
@implementation Sample (SampleCategory)
// 無名カテゴリで宣言すればdynamic宣言は不要みたい
//@dynamic value
-(NSString*)value {
    return objc_getAssociatedObject(self, @selector(setValue:));
}
-(void)setValue:(NSString*)val {
    objc_setAssociatedObject(self, _cmd, val, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end

ネットで検索していたら、objc_setAssociatedObjectのd第二引数が文字列じゃなくて、 const void *key になっていて焦ったりしました。

今は文字列ではなくて、 _cmd で設定するみたいですね。 ちなみに当然同一のキーを利用する必要がある訳ですが、そこは @selector で。

]]>
Thu, 29 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/27/appledoc_export_html.html http://hikaruworld.bitbucket.org/2012/11/27/appledoc_export_html.html <![CDATA[appledocでHTML出力がなぜかされなくなっていた]]> appledocでHTML出力がなぜかされなくなっていた

いつも appledoc でDocSetを作ってXcodeのオーガナイザから利用しているのですが、 業務上で納品する場合にHTMLにする必要出てきて、ちょっとはまったのでメモしておきます。

$ appledoc --help

でヘルプを見ると --create-html と言うオプションパラメーターが存在していて、このパラメータを指定すればHTML出力されるようです。 ...と思って実行してみたのですが、うまく行きません。

githubのissueを見てみると、 HTML Documentation is moved, when docset is generated というチケットを発見。

ということですので、 --keep-intermediate-files (–keep-intermediateは間違い)を指定して再度実行してみたらうまく行きました。

以上です。

]]>
Tue, 27 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/27/pushd_log_silent.html http://hikaruworld.bitbucket.org/2012/11/27/pushd_log_silent.html <![CDATA[pushdで移動した場合の標準出力が邪魔なので表示されないようにする]]> pushdで移動した場合の標準出力が邪魔なので表示されないようにする

自分は cd のエイリアスにしているのでこんな感じで。

alias cd="pushd$1 > /dev/null"

スタックを辿りたいときは dirs -v で確認するので不要なのです。

]]>
Tue, 27 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/27/source_tree_from_cui.html http://hikaruworld.bitbucket.org/2012/11/27/source_tree_from_cui.html <![CDATA[SourceTreeをCUIから起動する]]> SourceTreeをCUIから起動する

SourceTree はMac上からGitを操作するのにとても便利です。 自分はCUIばっかりだったのですが、社内に普及させる必要もあったのでSourceTreeを最近使うようになりました。

まぁ自分は基本Terminal上で操作する場合が多いので、必要に応じてSourceTreeを起動したい訳です。 SourceTree自体はterminalから起動することも想定されているらしく stree というコマンドをメニューからインストールすると可能になるようです。 (参考: How to use from terminal? )

早速インストールしようとしてみたんですが、なぜかメニューに見つかりません。 色々探していると SourceTree1.3のリリースノート にこんなコメントが。

Note: This feature won’t appear in the App Store version as Apple does not allow helper installs. You’ll need to download an additional installer direct from the SourceTree website to get this cool feature.

あー、AppleStoreからのものには含まれていないみたいです。 というわけで、 上記のリンク からパッケージをダウンロードしてからインストールしました。

# 証明書が切れてるのがビミョーにきになりますが。

使い方

streeに起動したいpathを指定してやると、そのパス以下をSourceTreeで開いてくれます。

stree ~/git/path

おまけ

ところで、 SourceTreeAppStoreCmdLineToolInstaller.pkg を利用してインストールすると/usr/local/bin上に自分の環境だとインストールされてしまいました。 自分の場合/usr/local/bin以下は基本homebrewの実行ファイルに限定しているつもりなので、出来るだけ余計なものを配置したくありません。

pkgutilで確認してみたところ、インストールされたのは/usr/local/bin以下のバイナリファイル stree のみだったので、~/bin以下にコピーしてインストーラーでインストールされたファイルを削除しておきました。

$ pkgutil --pkgs | grep -i SourceTree
com.atlassian.sourcetreeCommandLineTools.stree.pkg
com.torusknot.SourceTree
$ pkgutil --files com.atlassian.sourcetreeCommandLineTools.stree.pkg
$ stree
$ cp /usr/local/bin/stree ~/bin/stree
$ sudo pkgutil --unlink com.atlassian.sourcetreeCommandLineTools.stree.pkg
$ sudo pkgutil --forget com.atlassian.sourcetreeCommandLineTools.stree.pkg
]]>
Tue, 27 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/21/confluence_codeblock_cannot_multibyte.html http://hikaruworld.bitbucket.org/2012/11/21/confluence_codeblock_cannot_multibyte.html <![CDATA[ConfluenceでPDFエクスポートする際に日本語フォントを設定していてもcodeblockマクロの日本語が表示されない]]> ConfluenceでPDFエクスポートする際に日本語フォントを設定していてもcodeblockマクロの日本語が表示されない

ConfluenceでPDF出力する場合は、個別に日本語フォントをインストールする必要があります。そうすることで基本的には日本語が正しく出力されるようになるのですが、表題にあるように codeblockマクロ などの部分はPDF出力時に日本語が表示されません。

対応方法は、下記参考サイトにあるように

pre, .panel .panelContent pre {
font-family: ConfluenceInstalledFont,monospace;
}

を設定すればよいようです(ver4.2以降)

ちょっとわかんなくてサポートの リックソフト さんに問い合わせたんですが、さくっと回答して頂けました。

ありがとうございます。

]]>
Wed, 21 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/11/13/quicksilver_to_alfred_on_keybind_error.html http://hikaruworld.bitbucket.org/2012/11/13/quicksilver_to_alfred_on_keybind_error.html <![CDATA[QuickSilverからAlfredに乗り換えたらキーバインドがうまく動かなくてはまるなど]]> QuickSilverからAlfredに乗り換えたらキーバインドがうまく動かなくてはまるなど

MacをSnowLeopardからMountainLionへ変更したタイミングで、 QuickSliver から、 Alfred に乗り換えました。

基本的にはAppStoreからダウンロードして、簡単な初期設定をして終わりだったのですが、 hotKeyの設定で command キーをHotkeyに指定出来ずにはまったので、メモしておきます。

自分の場合は command + Space をHotKeyに割り当てているんですが、 Alfredの場合、HotKeyが競合されている場合は設定出来ないようです。

../../../_images/alfred_pref.png

というわけで...。

  • Spootright検索のホットキーを削除
  • システム環境設定からキーボードショートカットの前の入力ソースを選択を無効化

で、正しく設定出来るようになりました。 以上です。

]]>
Tue, 13 Nov 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/10/09/office365_napa.html http://hikaruworld.bitbucket.org/2012/10/09/office365_napa.html <![CDATA[Office365のNapaをインストールする]]> Office365のNapaをインストールする

2か月ほど前に InfoQでNapa. について紹介されており、心の琴線に触れたので試しに利用してみました。

Napaとはなにか

簡単に言うとExcelで使うスクリプト言語をVBAではなく、 Javascript+HTML で書けます。

IInfoQでは、以下のように言及されています。

JavaScriptをそのまま使うのは問題になるかもしれない。JavaScriptは理想的な環境下でも経験のない開発者にとってはVisual Basicより馴染みやすい言語ではない。一貫性のない構文や大文字と小文字の区別、キーワードの代わりに文字列を使う点などは経験のない開発者を混乱させるだろう。これらは克服できないかもしれないが、どのようにJavaScriptを使えばいいのかは明確になるだろう。

なじみのある構文も、大文字と小文字が適切に区別されることも、なんとうれしいことでしょう。

環境構築

Office365のデベロッパプレビューに参加した上でSharePointServer上で、アプリをビルドするという激しく面倒な手順を踏みます。

詳しくは以下の手順になります。

Office365デベロッパープレビューに参加

  1. Sign up for an Office 365 Developer Site へ遷移します。

    ../../../_images/Signup.png
  2. サインアップをクリックします

  3. 必要な情報を入力して登録します。

    ../../../_images/preview_start.png
  4. しばらく待ちましょう...

    ../../../_images/signing.png
  5. パスワード忘却時のリカバリ情報の入力を促されるので、入力。

    ../../../_images/04.png
  6. Office 365 Preview 管理センター なるところに遷移するので、プロビジョニングが終わるのを待ちます。 今回はSharePointの機能を使いたいので、暫く待つ必要があります....

    ../../../_images/05.png

アプリのビルド

  1. プロビジョニングが終わってから、 開発者サイトでアプリをビルドできます を選択します。

    ../../../_images/06.png
  2. Office365Previewのチームサイトへ遷移します。

    ../../../_images/07.png
  3. アプリケーションを構築するツールを取得するを選択します。 ...何時の間に日本語に...

    ../../../_images/08.png
  4. 日本語だと処理が続行できなくなるので、言語選択からEnglishを選択します

    ../../../_images/09.png
  5. インストールします

    ../../../_images/10.png
  6. なぜか認証を求められるので、入力します。

    しかも今回作成したアカウントだとエラーになるので、outlook.com側のメールアドレスとパスワードを入力します。

    ../../../_images/11.png
  7. ライセンスの管理をクリックします

    信頼しますか?と言われるので『はい』で(キャプチャ取り忘れた)

    ../../../_images/12.png
  8. 最近使った項目にNapaがあるので選択します。

    ../../../_images/13.png
  9. Content app for Excel を選択します。

    ../../../_images/14.png
  10. Excelの編集が画面がWEBで立ち上がります。

    ../../../_images/15.png
  11. これで実装可能なテンプレートが起動しました。

アプリの実行

前述のように環境を構築すると、簡単なサンプルアプリが提供されます。

機能的には、選択しているセルに対してコピー&ペーストを行うサンプルです。

このアプリを実行してみます。

  1. アプリの実行を左下の Run Project から実行します。

    ../../../_images/16.png
  2. デプロイが完了後ポップアップで、Office365のExcelが起動します。 Set data で選択したセルのデータが設定されることが、 Get data でTextInputの値がセルにコピーされることがわかります。

    ../../../_images/17.png

以上です。

次回以降は、実際に office.js を利用して簡単なアプリを作ってみます。

はまったこと

Office365にNapaをインストールする際などにえらい落ちます。Chromeだと特に。

IEだと多少安定しているようですが、まだまだ不安定な感じです。

]]>
Tue, 09 Oct 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/10/07/kanazawa_developer_meetup.html http://hikaruworld.bitbucket.org/2012/10/07/kanazawa_developer_meetup.html <![CDATA[kanazawa developers meetup]]> kanazawa developers meetup

行ってきました。 KANAZAWA Developer Meetup

../../../_images/kdm3.png

via: beta.

朝メール見たら18:30開催が18:00開催になって焦ったり、
現地ついたら場所が分からなくて困ったり、
ビル見つけたのに入り口が分からなくて迷ったり、

...しましたが無事STARTまでにつけたのでOK。

今回Evernote本社からディレクターの方やデベロッパーが来られるという豪華布陣。 楽しく聞く事が出来ました。

以下、気になってメモしたことを箇条書きでつらつらと。

佐藤さんの『ムダを恐れるな、失敗せよ』

The Evenote Devcup.の話。 こんなイベントがあったんですね、知りませんでした。

基本的にはDEVCUPで応募してくるアプリの話なんですが、サービス全般の話としてとらえる事も出来るなーと印象的でした。

  • 日本人の特長として、製品の説明を1,2分でプレゼンできる技術がないものが多くとても残念で致命的な問題。
  • あと、複雑で高機能にする傾向があるとのこと。
  • 本当に必要な機能のみを実装すべきで、それ以外は捨てる必要がある。
  • DEVCUPではオリジナリティは必要だけど、人が驚くようなアイディアである必要はない。

めっちゃ印象に残った言葉があったのですが、印象に残ったのに忘れてしまいましたorz...

Alex Pachikovさんの話

英語を佐藤さんが意訳して頂きました。 英語は苦手だったので助かります。

全般にアプリを開発する場合のプラットフォームや、視点の捉え方の話だったと思います。

  • アプリを作る際は『何が』問題で解決した事は何か考える必要がある。 そして『誰』が使うのか、どのような『場』で利用されるのかを考える。
  • モバイルは特にPCに比べて 限定的 なため、やる事やらないことをはっきりさせる必要がある。 昔はごちゃごちゃしてる物が多かったけど、今はシンプルに。

プラットフォームに関して

  • まず『誰』からプラットフォームを選択し、そこのネイティブの技術(iPhoneならObjective-Cなど)をフルに使い切って実装する事が必要。
  • HTML5は便利だけど、性能を100%発揮できる訳ではない。Facebookとかね。

Free vs Pairs

無料アプリではなく有料アプリの方がユーザの生の声(本当の声)を聞くことが出来る。 よくも悪くも。無料アプリで使うユーザは本当のユーザとはならない(ヘビーに使わないため)

アプリのリリース時期に関して

プロモーター(たとえばApple)にあわせてリリースを考える。

たとえば、学校が始まる時期などはそれにあわせてプロモーターがプロモーションをするので、 それに乗っかるような感じ。

  • プラットフォームが提供する側にマッチする物を提供する事が大切。
  • プラットフォームは別にアプリにあわせている訳ではない。
  • ただ、実際にプロモーターにあわせるのは難しいので、噂で動く事が多い。
  • iPadMiniとかEvernoteは既に考えて動いてる。
  • 乗っかかるなら素早く! その価値はある。
  • ただし、それでもユーザにウケるかは分からない。
  • アプリの制作者が、AppStoreにならぶ状態のアプリに対して出来る事はごくわずか。
  • ロゴ大事。
  • 名前分かりやすく。
  • カテゴリーによってはコンテンツが多すぎて埋もれる事が多いので注意。

↑×4これらを全てやるのはすごく大変。

  • 大変だと諦めて決断してやるしかない。
  • iPhoneのMapに関しても今色々言われているが、Googleにデータを送り続けるよりかは、 怒られながら修正していった方が、今後の事を考えれば良いだろう。
  • 『本当に』使ってくれるユーザしか意味がない。
  • 口コミは本当に大きなサービスにならないと意味を持たない。

おまけ?

  • みんなが使える => 焦点が化けるということ。
  • みんなが使える => みんなが使わないということ。
  • 自分が使う物を、自分が欲しい機能を。

最後に

とりあえず、帰ってからアカウント取ったりしました(ー。

API良さげでちょっと今作りたい物があるので試しに作成中です。

]]>
Sun, 07 Oct 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/10/07/hokuriku_net_vol10.html http://hikaruworld.bitbucket.org/2012/10/07/hokuriku_net_vol10.html <![CDATA[Hokuriku.NET vol10に行ってきた]]> Hokuriku.NET vol10に行ってきた

久々に Hokuriku.NET vol10.に行ってきました。

今回は、西脇さんの エバンジェリスト養成講座 に興味があったので、 久々に福井まで出かけたのですが、それだけではなくどれも面白いセッションでした。

詳細な内容は他のブログにゆずるとして、気になった事をいくつか。

勇さんの『Windows Azureの話』

最近Azure全然使っていなかったので知らなかったんですが、 WindowsAzureの Webサイト.は無料で使えるんですね。

あと、 デプロイをgitリポジトリ(github)から簡単に出来る との事。 これはうれしいです。

その上ASP.NET/PHP(はあまり興味ないですが)が使えて、なんと Node.js (WebSocketもOK)もサポートしているとの事!。

npm関連モジュールは?と思って質問してみましたが、インストールしたnpm関連のモジュールごとUPすればOKらしいです。

package.jsonを読んでnpmモジュールをサーバー側でインストールしてくれないのは 多少残念仕様ですが、ASP.NETだと外部モジュールのインストールもやってくれているので、 Node.jsも今後対応されるかも...とのことで期待したいところ。

これが出来るようになると、githubから簡単push出来るので素敵ですなー。 やっぱ、npmの関連モジュールはgithub側にコミットしたくないですし。

井上さんの『楽しい “モダン” Web 開発のちょっとディープなお話』

HTML5とjavascriptの話が多くて、本当のMSの話か!?と思ったりしたり(笑)

SilkとLiikeのモダンHTMLの話がとても興味が惹かれます。 Chapter 13: Unit Testing Web Applications とか面白そうで頑張って英語読んでいたんですが、疲れました。ただいま翻訳中との事で、早く公開されないかなーと。

終わった後に、個人的にはかなり気になっている Napa.について質問していました。 そこまで詳しい話は聞けなかったのですが、この辺に詳しい方がいるそうで是非話を聞きたいところです。

Office2013やそれ以前でもこの機能が乗るととてもうれしいのですが、 今後のフィードバック次第らしいのでここはすごくプッシュしていきたいです。ほんとに。

バイバイVBAしたい。

最後に

次は来年1月頃に富山でやる予定ですので、MS系とかブリとかに興味あればどうぞー。

2012/10/09追記

ATND立てました。興味ある方は是非

]]>
Sun, 07 Oct 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/09/21/sublime_text2_with_tinkerer.html http://hikaruworld.bitbucket.org/2012/09/21/sublime_text2_with_tinkerer.html <![CDATA[Sublime text2でtinkerのビルドを行う]]> Sublime text2でtinkerのビルドを行う

今回、 bitbucket へブログをホスティングするにあたって、 Tinkerer を使ってreST形式でこの投稿を書いています。

その際最近話題の sublime text2 を使っています。 このsublime text2には Build System(英語) という物があって、 いわゆる make を簡単に実行する事が可能です。

Tinkererの場合も同じように出来るようにビルドシステムをカスタマイズしてみました。

tinkererの問題点

当初は以下のように指定すれば良いと考えていました。

{
    "cmd": ["tinker", "-b"],
    "selector":  "text.restructuredtext"
}

しかしながら、この方法だと編集したファイルの階層で tinker -b が実行されるため、 カレントディレクトリが見つからずエラーになります。

そもそも、tinkererのビルド自体は tinker -b で可能ですが、任意の rootとなるパス を指定する事が出来ません。 tinker -b をカレントディレクトリに conf.py がない状態で実行すると以下の酔うなエラーが発生します。

Tinkerer must be run from your blog root (directory containing ‘conf.py’)

Sublime text2のビルドシステムに追加

そこで簡単なスクリプトを設定して、実行するようにします。

まず、tinkerのビルドを実行するスクリプトを準備しておきます。

ビルドスクリプトを準備

tinkerがtinkerのルートで実行する必要があるので、3つだけ上の階層に上がって tinker -b するだけのスクリプトですが...。

#!/bin/bash

# TINKER_PROJECT_BASE/2012/10/11/content.rst
cd ../../../
/usr/local/bin/tinker -b

これを適当なフォルダにおいておきます。 自分は ~/st2/bin/ 以下に置いて実行権を設定しておきます

sublime text2のパスを修正

そのままの設定だと、SublimeText2からは ~/st2/bin``が参照できないので、 環境設定に ``build_env を定義して上記 ~/st2/bin にパスを通しておきます。

{
    "build_env":
        {
        "PATH": "~/st2/bin"
    }
}

ビルドスクリプトを設定

Tools => Build System => New Build System を選択します。

{
    "cmd": ["tinker-build.sh", "-b"],
    "selector":  "text.restructuredtext"
}

selector に関しては 参考サイト を参照してください。 あとは任意のタイミングで ctr+B で勝手にビルドされます。

以上です。

]]>
Fri, 21 Sep 2012 00:00:00 +0900
http://hikaruworld.bitbucket.org/2012/09/20/hello.html http://hikaruworld.bitbucket.org/2012/09/20/hello.html <![CDATA[hello]]> hello

ひよっこ から引っ越して、 ここでも暫く書いてみようかと思います。

]]>
Thu, 20 Sep 2012 00:00:00 +0900