2022年11月4日金曜日

PlayStation5導入

ヤマダ電気の抽選販売で当たったので、買ってきました。 まだ恩恵はそんなに無いんですけどね…

2021年6月1日火曜日

Corne Cherry 破損と修理

自作キーボードのCorneCherryのキットを購入し、組み立てて利用して、早4ヶ月。そろそろ、慣れてきた頃ですが、そんな折、右側のキーボードが認識しなくなりました。

TRPSケーブルを抜いて個別に確認すると、どうやら左側は正常動作、右側は、起動せずのトラブルです。

困りましたが、仕事が押していたためその日はすぐ調査を開始せず、一旦取り外して、普通のキーボードで仕事。

時間ができたので次の日調査を開始するため、テスターを当てます。TRPSケーブルを繋いでいると、右側の正常の方が赤点滅していたので、何かなと思っていたんですが、左側のVccとGNDがショートしていました。

この時点で大体絞り込めてて、Pro Microの破損か、LEDの破損です。*回路図見るとわかる。 切り分けのため、Pro Microを外すと、まだVcc -GNDで導通していたため、LEDの破損で確定です。

LEDの破損の場合、場所の特定が困難です。そのため、一個一個外して、Vcc-GND間の導通を確認、という手法を取ったところ、運良く、4つ目のWS2812を外したところで、導通がなくなりました。

チェックしたところ、Pro Microも動いたみたいなので、修理完了です。シリアルLEDってこんな壊れ方するんですね。静電破壊でしょうか。勉強になりました。 所要時間1時間程度でしたが、勘所がないと結構ハマるところかと思います。この辺は昔取った杵柄なのです。

ちょっとネット漁ってみたけど、同様の情報がなかったので共有しました。お役に立てれば幸いです。

2017年12月15日金曜日

Swift4 utf-8をshift-jisに変換

本来であれば、サーバ側のインターフェースはUTF-8にして欲しいところですが、諸事情によりshift-jisの文字列をクライアント側で作成しなければいけない場合があって、変換しました。あとで絶対忘れるので、備忘として。

let str = "ほげ"
let sjisStr = str.cString(using: String.Encoding.shiftJIS)

ここでそのまま表示できない形になります。
こんな感じ
[-126, -39, -126, -80, 0]

これはCのcString型になります。実態は[CChar]型です。

これを逆変換でString型に持ってくるのは

let result:String = String.init(cString: sjisStr!)

Swiftの文字列操作周りは未だにコロコロと表記が変わるのでSwift3まで使えた記法がSwift4から全然使えなかったりします。
特にsubStringがなくなってしまったので、文字列操作は結構戸惑います。慣れれば表記が統一されているので使いやすいんじゃないかと思うんですが。。。

なかなか、追っかけるのが大変な言語ですね。

2017年11月21日火曜日

Swiftの数値型と文字列変換のメモ

Swiftで16進数をゴニョゴニョする需要があって、ちょっと調べました。

まず、Swiftでの16進数(n進数)の最もお手軽な扱いは、
Stringで定義する
だそうです。

具体例を挙げると
String(11, radix:16)  // a
とか。

ちなみに
Int("a", radix: 16)  //10
はイケますが、Intなので全て10進になります。マジかよ。

なので、計算は10進で行って表示など必要な時に、n進数に変換して表示するのがお手軽です。

で、メモなんですが、この"radix"とやら、2とか8とか16とか区切りのいい数字以外にも、17とか、7とか変な数字を17進数とか7進数にしてくれます。
で出てきた疑問。
何進数まで変換できるの?
試して見た所、36進数まで変換できました。36進数?32じゃなくて?
なんだろうとしばし考えたんですが、

0-9とA-Zで表現できる文字の合計が36文字なので、36進数になってるみたいです。
それ以上のn進数が欲しい場合は、素直に割り算の余りを使いましょう、ということみたいです。

つーか
n進数とかでバリバリ計算したいという向きの方は、素直にObjective-Cで書いた方がいいっぽいですね。

2017年1月23日月曜日

近況

ご無沙汰です。
あけましておめでとうございます。
本年もよろしくお願いします。

近況ですが、実は結婚しまして、神奈川に引っ越しました。

そんなですが、今後ともよろしくお願いします。

2015年10月25日日曜日

Macに新幹線のアナウンスを喋らせる。

気がついてみれば、ほぼ1年越しの投稿になります。
忙しさにかまけて、アウトプットするのをサボっていましたが、まあまたボチボチ更新していきたいと考えています。

最近、JXAというJavascriptでMacを動かす、AppleScriptの亜種みたいなものを覚えたので、何かに使えないかなーと思ったんですが、案外情報が少ないので、暇を見て色々試しつつ、勉強しています。

シェルでいいじゃんとか、そういう意見もあるかと思うんですが、shellScriptだとちょっと面倒な処理、例えばファイル名で判定して処理を変えるとか、出来ないわけじゃないけどちょっと面倒とか、そういうケースに対してサクッとできたらいいかも的な。あと、アプリケーションの対応次第なんですが、アプリケーション自体もJXAから弄れるらしいので、その辺で差異が存在理由なんじゃないかなと思います。

ドキュメント等を見ていると、Macのシステムの読み上げ音声で任意のテキストを喋らせる事が出来るようなので、一発目として試してみます。

最近、新幹線通勤になってしまったので、なんとなくうろ覚えの新幹線のアナウンスを喋らせることにしましょう。

まず、アプリケーション>ユーティリティ>スクリプトエディタを開きます。

 
function talkToMe(args){
 var app = Application.currentApplication(); // 現在のアプリケーションオブジェクトを取得する
 app.includeStandardAdditions = true; // 標準コマンドを使用可能にする
 app.say(args);
}

talkToMe("We will soon make breaf stop at ODAWARA.");
これで、スクリプトエディタで実行するととりあえず喋ります。 でもイントネーションがなんとなくおかしい。これ、システムの設定で、読み上げが日本語になっているのが原因です。なので、英語の読み上げ設定に変更します。
これで、それっぽく喋るようになりました。

JXAはシェルだと直接いじりにくいようなシステムに絡んだ設定項目なんかに対して正規の方法でアクセスできるみたいなので、何かうまい使い方がないか色々考えています。


2014年9月22日月曜日

Swiftでカメラアプリを作る。

最近、暇を見つけてはSwiftを勉強しています。
今日は半日くらいマルッと使えそうだったので、Swiftでカメラアプリなぞ作ってみました。

先人達のコードを参考にしつつ、XCode6.01のSwiftで書き直してあります。

コードはこちら。 Github

どーせ書き方が違うだけだろと思ってたんですが、全然そうでもなく、Obj-Cで書いたプログラムをそのまま書き直せば動くっていう感じでは無さそうです。
また、言語としての抽象度が上がっているので、逆に色々ハマりどころがあります。

以下ハマった所。
なかなかdeviceInputが取得出来なくて苦労しました。サンプルを持って来ると何故かnilが帰ってくるという。とりあえず、こんな感じに修正して動きました。


    var videoDevice:AVCaptureDevice?

~~~~~~~~~~~~~中略~~~~~~~~~~~~~~~~
        var error:NSError?
        videoDevice = CameraViewController.device(AVMediaTypeVideo, position: AVCaptureDevicePosition.Back)
        let videoDeviceInput = AVCaptureDeviceInput.deviceInputWithDevice(videoDevice!, error: &error) as AVCaptureDeviceInput

~~~~~~~~~~~~~中略~~~~~~~~~~~~~~~~
    class func device(mediaType: NSString!, position: AVCaptureDevicePosition) -> AVCaptureDevice? {
        var devices = AVCaptureDevice.devicesWithMediaType(mediaType) as [AVCaptureDevice]
        
        if devices.isEmpty {
            return nil
        }
        
        var captureDevice = devices[0]
        for device in devices {
            if device.position == position {
                captureDevice = device
                break
            }
        }
        return captureDevice
    }


あとイメージをキャプチャして保存するのが結構ハマりました。


 
    func takePict(sender: AnyObject){

        var layer : AVCaptureVideoPreviewLayer = previewLayer! as AVCaptureVideoPreviewLayer
        
        self.stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo).videoOrientation = layer.connection.videoOrientation
        
        var error:NSError
        
        self.stillImageOutput?.captureStillImageAsynchronouslyFromConnection(self.stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo), completionHandler: {
            (imageDataSampleBuffer,error) -> Void in
            if ((imageDataSampleBuffer) != nil) {
                var imageData : NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)
                var image : UIImage = UIImage(data: imageData)
                ALAssetsLibrary().writeImageToSavedPhotosAlbum(image.CGImage, orientation: ALAssetOrientation.fromRaw(image.imageOrientation.toRaw())!, completionBlock: nil)
            }
        })

    }
一応こんな感じで何とか動いてます。(正直まだ良く分からない所が多い。)

なんというか、Obj-Cよりも難しいなと思うのは、書き方のパターンが色々ある所とXcodeがまだ自動補完とか完全で無い感じの所ですね。
構造体とかの使い方が特徴的らしいので、その辺りをマスターすればよりSwiftっぽい書き方になるんじゃないかなーと思います。

参考になれば幸いです。