技術書典4にサークル側で参加した

技術書典4に参加してきたのでまた感想とかをダラダラと書きます。今回は「Skype Botで遊ぼう」という本を書きました

 

今回の販売結果

被チェック数:52

販売数:99/99 16時過ぎくらい

販売価格:500円

後払いアプリ:14件

 

よかったこと
  • 晴れてた
  • 完売した(後述)
  • 前回は会社でやったことを本に起こしたのですが、今回は自分でこれから使うために調べて本にしたので勉強になり達成感があった
  • 前回よりも買ってくれた方々とお話できてうれしかった。手渡しで売れる一番の良いところ

 

よくなかったこと
  • 入稿ギリギリで5%アップ料金だった
  • 入門とはいえもう少し実用的なサンプルとか気の利いたサンプルを思いつけるとよかった(アイデアを出すのは難しい。。)
  • お客さんに対してのアピールがクソみたいに下手だった
  • 混みすぎてて、奥の方の人が見本誌とりたそうにしてるけど届かなくて流れてっちゃうことが何度かあった。まあしょうがないけれどもね

 

完売

これはお隣のブースの方が完売した後お手伝いしてくださり、15時くらいから鬼のように売ってくださったおかげです。本当に心の中で30回くらい感謝の土下座していました。本当にありがとうございます、、!!!!

見本誌だけでも見てくれると嬉しいです!と仰っていたのが素敵でした。見習わなければ、、

 

感想とか

今回の技術書典で一番思ったのは「タイトル間違えたな」ということ

 

わたしが導入したことがあるのがSkypeだけで、かつ弊社で使ってるのがSkypeだったりでこのタイトルにしてしまったけれどもSlackとかでも使えるので「Bot作って遊ぼう」とかでよかった気がしました、、

 

そしてわたしが思っていた以上にエンジニア界からSkypeの人気は無くなってたみたいです。今更なんでSkype?みたいなコメントも結構ありました。SlackとかDiscordとかがメインなのかな。Slackの導入方法も調べていつかどこかに書いておきたいです。

 

あとね、私知らなかったのですがBotBuilder SDK3で本は書いてるのですが4あるみたいなこと聞いたんですよ、Pythonだけなのかな、、ちょっとまだ買った本眺めたり自分の本の入ってるツイートをイイネしまくってたりモンハン買っt…調べられてないんですがちょっと頑張って調べたいです、、うぅ、、

 

↑今出てるの SDK4アルファ版みたいなので、まだ3で大丈夫そうでした_(:3」z)_

 

今回もとても楽しかったです。手に取っていただいた方、お隣のブースだった方、運営してくださった方ありがとうございました。

 

次回

あれば出たいですがまだネタがないです。技術書典出るためだけにはじめてのことを勉強しても楽しいかもしれない

 

 

技術書典3にサークル側で参加した

10月22日、技術書典3にサークル参加したので
サークル参加で良かったこととか大変だったこととかダラダラ思い出残しておきます。


わたしが出したのはOpenLayers4の入門本。
ちょうど会社のプロジェクトでiOS/AndroidのWebView上で
OpenLayersを動かすということをしていて、
OpenLayers3の記事はたくさんあるけれど4のは少なめだったり、
公式ドキュメントがわかりにくかったり(私がアホなので)したので
書いてみようかなと思いました。


開催日の被チェック数 44
印刷した数      100冊(チャレンジしすぎた、、)
購入してくださった方 72名(ありがとうございます!!1!)
販売価格       300円

良かったこと

  • 1冊本を完成させることができて嬉しい
  • 基礎の振り返りになった
  • OpenLayersのこと知ってる人と色々お話できた
  • 表紙も描けた
  • 日光企画の方、技術書典のスタッフの方みんな優しい。親切
  • 両隣のブースの方も親切。嬉しい
  • お客さんも優しい

ダメだったこと

  • 台風
  • 表紙を左綴じ右綴じ逆で入稿してた
  • Re:View使いこなせなかった(改ページ的なことってどうしたらいいの、、)
  • ↑もあってコードのページがかなり見辛い
  • 仕事が忙しくて書いてる余裕が足りなかった

もうとにかく忙しくて平日はまず進まないし、休日は休出してるか死んでるか平日ほぼ顔を合わせることのできない夫くんとお出かけしたりで全く進まなかった、、
もっと早くからコツコツやってれば とも思ったけど割と今年はずっと多忙だから無理だな!

なもんで頑張って書いてはいたけれどクオリティも自信なくて
オンデマンドで安く印刷して価格下げました。(でも十分印刷きれいだった)
小銭多いのに電子決済のやつ何も用意してなくてすみません、、!


ブースに座ってると人の流れがすごく気になって
ドキドキが止まらなかったです。

中身を見ずに買っていただくと「OpenLayersでお仕事してるのかな」とか
めくってもらった後に買っていただくと「頑張って書いた甲斐あったな!」とか
めくってもらった後に立ち去る方を見ると「何が悪かったのかな」とか
人が来るたびに一喜一憂してしまって非常に疲れた(もちろん良い疲労感)


ぼっち参戦だったし完売しなかったので他のブース見れなかったですが
一生懸命書いたものを自分の手で渡したいなって思っていたので
夫くんお手伝いしようか聞いてくれたけれどもこれはこれで良かったと思いました。まる。


お手に取ってくださった方、
購入してくださった方ありがとうございました。

弊社の方も遊びにきてくれてとても嬉しかったです。
内容についてもちょっと褒めていただいてすごーく嬉しくて本当に書いて良かったなと思いました。


またこの達成感を味わいたいけど書くネタが、、
OpenLayers続編あったら、、ということを言っていただいたりもしたので
もっと踏み込んだこと調べて書いたりとかも良いのかなあ。

ローカライズで日本語を追加したのに日本語が表示されずにBaseの文字が表示された(Xcode7)

<問題>
以下の条件でローカライズをして日本語が表示されずにBaseの英語が表示されてしまった。

iPhoneの設定>言語と地域 = iPhoneの使用言語・日本語のみ
・project>localization>Japaneseを追加
・Baseは英語でEnglishのlocalization.stringsは作ってない


<解決方法>
Info.PlistのLocalization native development regionがJapanとなっていたのを
United Statesにしたら正しく動くようになった。

<謎>
ググると優先順位の話とか出てくるけれども
今回は言語設定が日本語のみになっていて
且つJapaneseのlocalizable.stringsが存在しているのに
Baseが選択されて表示される意味がよくわからない、、

プッシュ通知の許可確認

アプリのプッシュ通知の許可をユーザさんがしなかった時、
「プッシュ通知届くように設定してほしいな」というアラートを出したかったので、
設定の通知がオフになっていることを調べる処理を入れようと思ったらハマった(?)


isRegisteredForRemoteNotifications で確認してくださいって書いてあるところが多いけど
これだとregisterNotifications()呼び出した後だとオフラインとかでない限り
設定にかかわらずtrueが返ってきている、、気がする、、
(ここ違うかもしれないので要調査、、)


なので
UIApplication.sharedApplication(). currentUserNotificationSettings() == .None
を使用して判定するのが良い気がする。
http://stackoverflow.com/questions/25111644/detect-allow-notifications-is-on-off-for-ios8


そもそもregisterForRemoteNotifications()を起動毎呼び出すのがまずいのかとも思ったけれど
deviceTokenは変わるものだからregisterForRemoteNotifications()は起動時毎回呼び出すのが一般的なのかと思っていたがそこから間違っているのかしら、、

iOS7でenterprise版アプリをDLできなかった話

【現象】
enterprise版でアプリをダウンロードすると、iOS8ではインストールできるのにiOS7だとインストールできなかった。
以下のメッセージが出てしまう。

「Appをダウンロードできません」”{アプリ名}”は現在インストールできません。

調べてみるとアプリ再起動や一旦放置してみるとかで直ると書いてあったがやはりインストールできず。。

XcodeのDeviceで端末のログをだしてみたら以下のようなエラーが出ていた。

Aug 31 10:44:45 Procyon installd[63] : 0x1d3000 do_preflight_verification: Incorrect architecture at /var/tmp/install_staging.qJquYZ/foo_extracted/Payload/{applicationName}.app


アーキテクチャが正しくありませんと言われている。。
調べてみると、ビルド時の設定が間違っているらしい。

【解決方法】
プロジェクト>BuildSetting>BuildActiveArchitectureOnly
がデフォルトYESになっているけれどもNOにする

【参考】
http://samwize.com/2015/01/14/what-is-build-active-architecture-only/
http://koexuka.blogspot.jp/2014/11/xcode-no-architectures-to-compile-for.html

Build Actice Architecture Only をYESにしてあると現在選択してある端末に合わせたビルドしかしてくれないらしい。

UITableViewでsectionのヘッダーに英字を設定すると大文字になってしまう

題名の通り。↓のようになってしまった、、!
f:id:dakaradame:20150802152725p:plain:w260

iPhoneの設定画面とかは大文字になっているので
こういうものなのかなーと思いつつもそれではだめな時があるので修正しました

コード

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    /// ヘッダに設定するタイトル
    let headers:[String] = [
        "Twitter",
        "Facebook",
        "mixi"
    ]
    
    var tableView:UITableView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let width = self.view.bounds.width
        let height = self.view.bounds.height
        
        self.tableView = UITableView(frame: CGRect(x: 0, y: 0, width: width, height: height), style: .Grouped)
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        self.view.addSubview(self.tableView!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    /** セクション数 */
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.headers.count
    }
    /** セクション内のセル数 */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }
    /** セル */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
   
    /** ①ヘッダの高さを指定 */
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return 60
        }
        // -1を返すとデフォルト値が設定される
        return -1
    }
    /** ②ヘッダセクションに設定するviewを作成 */
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        var headerView = UITableViewHeaderFooterView()
        headerView.textLabel.text = self.headers[section]
        headerView.contentView.backgroundColor = UIColor.redColor()
        return headerView
    }

躓いたところとか

最初②のviewForHeaderInSectionのみでやろうと思っていたのですが
一番目のセクションだけ表示されない問題が、、
f:id:dakaradame:20150802152701p:plain:w260


そこで①heightForSectionで高さを指定しています
これと一緒に使わないとうまく動作しないらしい、、
上記のコードでは毎回60返してしまうと一つ目のセクションヘッダ以外も
広がってしまうんで初回だけ60返すようにしてみました。
ちなみにデフォルトの-1は一番最初のセクションには効かないみたい、、です?
というかデフォルトが0なんだろか、、まだそこまで見ていない

willDisplayHeaderView

メモ書き。
最初willDisplayHeaderViewを使ってやろうと思っていたら
このメソッドが呼ばれない!という事態、、
調べてみたらwillDisplayHeaderViewはUITableViewを継承していないと呼ばれないメソッドだった。
ただ個人的にはUITableViewを継承したくないので却下。
あと継承しなくても、viewForHeaderInSectionを使うと呼ばれた。

出来上がったのがこちら

やったね!
f:id:dakaradame:20150802152708p:plain:w260