2015年10月17日土曜日

Swift2でjoinの方法が変わった

今までの書き方

let list = ["a", "b", "c", "d"]
let str  = join(",", list)

上記だと「Cannot invoke `join` with an argument list of type (String, [String])」 というエラーになる

以下のように変更する必要がある

let list = ["a", "b", "c", "d"]
list.joinWithSeparator(",")

なんで変更したんだAppleさん・・・

2015年9月23日水曜日

【Swift】指定された範囲内で乱数を生成する方法

指定した範囲内でランダムな値を生成するには、以下のような関数で実装できます。


func getRandomNumber(Min _Min : Float, Max _Max : Float)->Float {        
    return ( Float(arc4random_uniform(UINT32_MAX)) / Float(UINT32_MAX) ) * (_Max - _Min) + _Min
}

使用例 : - 0.1〜9.9までの範囲で乱数を生成


getRandomNumber(Min: -0.1, Max: 9.9)

2015年9月20日日曜日

【Swift】【Spritekit】 SKSpriteNodeを継承したクラスでinitを宣言する場合

SKSpriteNodeの子クラスでコンストラクタであるinitを普通にオーバーライドしようとしたら、こんなエラーメッセージが表示されてしまった。

「must call a designated initializer of the superclass SKSpriteNode」

init()は子クラスから呼べないみたいです。
対処方法として、init(texture, color, size)を呼ぶことにします


import UIKit
import SpriteKit

class Man: SKSpriteNode {
    

    init() {
        let texture = SKTexture(imageNamed: "man")
        super.init(texture: texture1, color: nil, size: texture.size())
    }
    
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
    
ちなみに、init(coder aDecoder: NSCoder)はrequired initとして指定されているので、こいつもオーバーライドしてあげないとエラーになります。
基本的に呼ばれることはないので、中身はxcodeで自動生成されたエラー処理が入っています。

2015年9月16日水曜日

【Swift】Expected identifier in function declaration

Swiftのコンパイルエラー「Expected identifier in function declaration」
init()にfuncをつけてしまうとエラーになるみたいです。

まだまだswiftに慣れないなー。

2015年4月25日土曜日

【Docker】フロントエンドの開発環境をDockerで構築してみた。

Javascript+PHPのwebアプリの開発環境のDockerfileを書いてみました。

OS                        : CentOS6
セッション           : Redis
言語                      : PHP、Node.js
サーバー               : Apache
パッケージ管理    : composer、bower

PHPは5.4系を使用。
Nodeはnodebrewで入れています。

とりあえずこれでフロントアプリを扱う必要最低限が整うので、ちょっとした検証をしたりする時に使い捨ての環境として使ったりしてます。

Dockerfileはこんな感じです。
https://github.com/fuku2014/docker-php-and-node/blob/master/Dockerfile


2015年4月20日月曜日

【VBAFormatter】ExcelVBAのインデント自動調整ツール

最近のIDEやエディタでは標準装備のフォーマット機能ですが、ExcelVBAのエディタには無いんですよねー。

素人が作ったマクロとかをよくメンテするんですが、インデントがちゃんとしてなくて読みにくいんですよね。
そんな時に、フォーマットを一括でできる機能が欲しいなと思ってアドインを作って見ました。

ロジックはシンプルで、CodeModuleaオブジェクトを使ってVBAコードを参照し、「If」「For」等があればインデントをつけて、「End If」「End For」等でインデントを戻すって感じでやってます。

アドインはgithubで公開してるんで、ソースも載せてあります。
インデントの他に、Asの位置や行末コメントを整形したりするオプションも用意してあります。

よかったらこちらからダウンロード、Cloneして使ってみてください

https://github.com/fuku2014/VBAFormatter

2015年4月18日土曜日

【Swift】overriding method with selector has incompatible type

久々にアプリ作ろうとしたら、コンパイルエラーになってしまった。
オーバーライドしたtouchesBeganイベントの引数が違うようで・・・
 以下のように 対処法しました

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    //anycode
}

    
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    //anycode
}

2015年4月14日火曜日

Excel VBA 設計書自動作成ツール

ExcelVBAのプログラム設計書を自動作成するアドインを作って見ました。 
まあ、設計書といっても大したもんじゃないけど納品用に作るくらいには使えるかな。 

アドインをインストールすると、リボンメニューに「設計書作成支援ツール」が追加されるので、 そこから作成実行を選択すると、開いているExcelのVBA設計書が作られます。 

Excel2010でしか試してないけど多分2013でも動きます。

オプションで色々設定できるので、各自のコーディング規約とかに合わせて使ってください。
あとソースもgithubに上げておくので文言とか適当に修正して使ってもらっても大丈夫です。
 https://github.com/fuku2014/VBA-PSCreater

2015年3月17日火曜日

【swift】spritekitでボタンタップ処理

protocolとdelegateを使って実装できます

・Sprite


import SpriteKit

protocol MyBtnDelegate: class {
    func exec()
}

class MyBtn: SKSpriteNode {
    var delegate: MyBtnDelegate? = nil
    
     override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
          self.delegate?. exec()
    }
}
・Scene

import SpriteKit

class PlayScene: SKScene,MyBtnDelegate {

    let btn : MyBtn = MyBtn(imagenamed:"MyBtn")

    override func didMoveToView(view: SKView) {
        btn.delegate = self
    }

    func exec(){
        //todo
    }
}

2015年3月7日土曜日

【PHP】setcookieで保存できない時の対処法

setcookieを実行してもクッキーが保存されない場合に疑うべき点などをまとめてみました

 1、第3引数の有効期限が短すぎる 

よくありがちなのが「30」とかって指定している場合。
30日のつもりでいたらとんでもない、これだと一瞬で有効期限がきれてしまいます。
 PHPのsetcookie()はUnix タイムスタンプでtime()+3600(1時間)のように設定します。 

2、第4引数のdomainが違う 

本番環境ではdomainに「~~.com」のように指定するのが普通ですが、
開発環境をローカルで構築している場合このdomainに保存しても意味ないですね。
開発環境用のconfigなどを設定して切り分けできるようにしておきましょう。 

3、第5引数のsecureの設定が違う 

これも本番環境ではHTTPSで通信しているが、開発環境はHTTPというようなケースですね。
同じく切り分けできるようにしておきましょう 

普段クライアント側javascript中心のプログラマーででPHPは初心者な人だとクッキーでハマることが多いみたいなので気をつけましょう。

2015年2月25日水曜日

【swift】Stringのnil判定

何故かこれだとコンパイルエラーになる

if !str{ //anycode }

普通にこうしないといけないみたい

if str == nil{ //anycode }

ちなみに空白判定はisEmptyが使える

if str.isEmpty{ //anycode }