Windowsから送られてきたzipファイルを解凍する(日本語ファイル名が含まれている場合)
概要
Windowsサーバでzip圧縮したファイルをLinuxサーバで解凍することが何度かあったので備忘録として記しておきます。
原因
CP932とは: Microsoftコードページ932
Mac,Linuxでのzip圧縮のエンコードはUTF-8。Macでのunzipコマンドでの解凍では文字コードを自動判別してくれるので、問題ないが、linuxでのunzipコマンドでは文字化けしてしまうので、パッチをあてて修正版unzipつくる必要がある。ディストリビューションによって対処方法がまちまちなので、ここではその対処法はとりません。
対処法
使用方法
上記perlスクリプトをファイル名unzip-cp932
にてパスのあたっている/usr/bin
以下に作成 そして実行モードに変更
chmod +x unzip-cp932
unzip-cp932 hoge.zip
注意
CP932(Shift_JIS)以外のエンコードは化けるので注意。Mac,Linuxで作成したzip圧縮のフォルダやファイル名のエンコードはUTF-8なので、
unzip-cp932
は使えません。 あくまでWindowsで作成されたzipファイルを解凍する際に使用。
他の例
windowsから送られてきたzipファイルを解凍するとファイル名が大変なことになっている時上記の
unzip -Ocp932
のOcp932オプションを使用できず、解凍できない場合があった。WinからLinuxへzipファイルなど持ってきた時の文字化け対処方法
上記、convmvを使用する場合
【WatchKit】How to make an animated background Interface in Apple WatchKit
Watchkitで背景画像をアニメーションさせる方法
まずWatchKitではSubview的にinterfaceを重ねられません。
どうするかというと、WKInterfaceGroupを利用します。
WKInterfaceGroupのsetBackgroundImageメソッドにて画像を割り当てて、
その画像でUIImage型の配列を指定(animatedImageWithImages)にてアニメーションが可能となります。
Watchkit Splashアニメーション実装方法
Watchkitにて、アプリケーション起動時のスプラッシュ画面を設定する方法が見当たらないので、 Initial Controllerに設定したクラス内のwillActivateメソッド内でanimatedImageを設定することによって、擬似的に毎回スプラッシュアニメーションさせます。
これで毎回起動時(画面表示時)にアニメーションさせることが可能です。
use with Gist Search
これで毎回起動時(画面表示時)にアニメーションさせることが可能です。
use with Gist Search
SwiftでNSUserDefaults の内容を全削除する方法
保存データを初期化したい際に、 NSUserDefaultsを全削除する方法です。
ひとつのキーの値を削除するコードも念の為に追記。
use with Gist Search
Objective-Cの場合 use with Gist Search
ひとつのキーの値を削除するコードも念の為に追記。
use with Gist Search
Objective-Cの場合 use with Gist Search
AngularJs ✕ Firebaseで爆速リアルタイムアプリケーションの作成
AngularJs ✕ Firebaseで爆速リアルタイムアプリケーションの作成
Firebaseとは
いわゆるモバイルBassでWebアプリケーション、モバイル・アプリケーションの開発者向けにリアルタイムにスケーラブルなバックエンドサービスを提供しています。つい最近(今年10月)、Googleに買収されています。
一定の転送量、接続数、容量は無料で、クレジットなしで使用できます。
Baasとして有名なParseは、Facebookに買収されていますし、
FirebaseもGoogleがつい先日買収と、もはやBaasの2大巨塔ですね、この2つは。
AngularFire
そして、AngularJsからFirebaseを利用できる、AngularFireというAPIも公開されていますので、
バックエンドのコードを書く必要も、サーバも必要なく、
必要な作業に集中できます。
AngularFireのAPIを利用することで、
Angularjsのモデルが自動的に同期され、Firebase上でリアルタイムにデータバインディングされます。
これでhtml側でのview, Angularjsでのmodel, firebaseでストアされたjsonのデータの3wayデータバインディングが可能となります。
サンプル:チャットアプリ
100行以内で簡単チャットアプリが作成できます。
var ref = new Firebase("https://.firebaseio.com/");
上記の箇所をfirebaseにサインアップして、URLを書き換えてください。
Firebaseにストアされたデータにindexをはる方法
設定で、json形式でkey,rulesの中に.indexOnを記述するだけ詳細はこちら
https://www.firebase.com/docs/security/guide/indexing-data.html
Firebaseにストアされたデータのセキュリティに関して
jsonでのセキュリティルールの設定が可能。認証されたユーザがどのようにデータを変更できるかを決める。
データの転送はSSL経由。
さらなる詳細はこちら
https://www.firebase.com/docs/security/
AngularFireの使用アプリ
好きなアーティストの音楽をランキング順の聴くことができるサービスです。Recentの箇所をfirebaseでストアしています。
Lamusica
http://manchan.github.io/lamusica/
githubはこちら
https://github.com/manchan/lamusica
AngularFireのドキュメントはこちら
https://www.firebase.com/docs/web/libraries/angular/index.htmliOS 8 todays widgetの作成
iOS 8 今日のウィジェットの作成
iOS8 からの新機能、 Today ウィジェット、通知センターの左側に表示されます。
既存のアプリにエクステンションを追加するイメージ
あくまで、アプリに内包されて配布するものです。
以下、簡素化したステップ
1. 新規アプリ開発、Single View Applicationで言語はObjective-cを選択。
2. File > New > Target にて Application ExtensionにてToday Extensionを選択
4. TargetのWidgetを確認すると、Link Binary With LibrariesにNotificationCenter.frameworkが入っていることを確認。
5. デフォルトでビルド実行すると、ノティフィケーションセンター左の今日のウィジェットを確認すると、アプリ名の中に"Hello World”を確認。
6. ウィジェットで表示されるアプリ名の変更はinfo.plistのBundle display nameを変更
7. MainInterface.storyboardにて、label, progress viewを追加
8. Constraintsを追加。それぞれの制約を設定、詳細は以下github。
9. ビルドして実行、確認。※ビルドターゲットはエクステンションの方を選択
10. リアルなデータを結びつける。
11. labelとprogress viewをアウトレット接続する,propertyの追加
12. システムサイズとフリー、ユーズドのサイズを測定するメソッドを定義
13. それらをnsuserdefaultでキャッシュする。
14. そしてそれらをUIに表示、更新する
16. もっと情報を表示させる。まずUIの変更、それぞれの高さを設定。
17. 詳細ラベルの更新。
18. タッチの検出と値の更新。
19. アニメーションの追加。
20. ビルド実行で確認
ソースはこちら
AppleWatch Tutorial
AppleWatch
https://www.apple.com/jp/watch/features/
ついに最近、デベロッパー向けにwatchkitが発表されました。
AppleWatchアプリのチュートリアルで、
今回は絵文字を拡大表示させるサンプルをやります。
以下、簡素化した20のステップ。
ソースはこちらです。
https://gist.github.com/manchan/1e9cfae322f87583a2f7
http://vimeo.com/112249657
上記動画を参考にしています。
以下ソースです。
次回はglanceやnotificationのサンプルを作りたいと思います。
AppleWatchのお仕事お待ちしております!
https://www.apple.com/jp/watch/features/
ついに最近、デベロッパー向けにwatchkitが発表されました。
AppleWatchアプリのチュートリアルで、
今回は絵文字を拡大表示させるサンプルをやります。
以下、簡素化した20のステップ。
ソースはこちらです。
https://gist.github.com/manchan/1e9cfae322f87583a2f7
- 新規プロジェクトのシングルページアプリケーションで作成。言語はswift
- プロジェクトパネル、General > Targets > Add Targetにより、iOS > Apple Watch > Watch Appを選択
- Watchkit extensionとWatch appが追加される
- watchのデフォルトの画面をシミュレーターで確認する際は、「~Watch App」にターゲットを変更。デバイスはなんでもよい。
- ビルド実行でシミュレータが立ち上がるが、無視。
- シミュレータメニューのHardware > External Displays > Apple Watch - 38mm またはApple Watch - 42mmを選択し、再度ビルド実行、watch画面が立ち上がり確認可能。
- はじめにInterface.storyboardのInterface Controller Sceneにて, tableを追加、table内にlabelを追加
- tableをInterfaceController.swiftにnameをtableとしてoutlet接続
- 新規ファイルを追加より、EmojiRow.swiftを追加
- Interface.storyboard, Interface Controller SceneにてtableのクラスをEmojiRowに設定
- table内のlabelをEmojiRow.swiftにemojiRowLabelとしてoutlet接続
- ここまででtableのラベルの内容を定義してforループを回せば同じ内容が表示される。
詳細はInterfaceController.swiftを確認 - tableの要素をひとつ押した際に、詳細の画面に遷移させたいので、
新規ファイル,ZoomEmojiController.swiftを追加する。 - Storyboardにて、新規画面の追加をする、右サイドパネルよりInterface Controllerを追加する
- ClassをZoomEmojiControllerとし、ModuleはEmojiWatch_WatchKit_Extensionとする
- IdentifierをZoomEmojiControllerとする, これによりtableのひとつの要素を押した際に遷移するcontrollerの識別が可能となる。
- labelをふたつ追加し、それぞれ、zoomEmojiLabel、definitionLabelをZoomEmojiController.swiftにoutlet接続する
- tableの一要素押下の処理をdidSelectRowAtIndexより指定、
詳細はInterfaceController.swiftを確認 - ZoomEmojiController.swiftのコンストラクターメソッド内にて、
contextを受け取り、fontサイズなどを指定後、それぞれのlabelに代入する。 - ビルドして実行、シミュレーターにて、配列に定義した絵文字が拡大表示、テキストが表示されていればOK
Finish!
http://vimeo.com/112249657
上記動画を参考にしています。
以下ソースです。
次回はglanceやnotificationのサンプルを作りたいと思います。
AppleWatchのお仕事お待ちしております!