appcte

アプリ開発のネタのタネblog

面白アプリ情報や、アプリ開発ノウハウなどをお届けします!

2015年02月

13 2月

【PHP】使いこなせると便利な正規表現

アプリ事業部 プログラマーのTKです。

今回は正規表現について、ごく簡単ですが説明します。

正規表現は文字列の集合を一つの形式で表現する方法です。

この表現記法を使用する事で、一定の法則に従った文字列を大量の文書データから検索したり、
特定の文字列にマッチしたデータを一括で置換する等、様々な事に便利な使い方ができます。

具体的にはワープロやテキストエディタでキーワードを入力してデータの検索・置換を
する事が有りますが、その際に威力を発揮しているのがこの正規表現という手法なのです。


今回の例はUUID(Universally Unique Identifier)という技法を用いて、
ユニークな(重複がほぼ起こりえない)データから生成したファイル名を、
正規表現を使用してファイル名の検索を行い、条件を満たしたファイルのみを削除する、
というコードです。

UUIDについては以下のリンクも参照ください。
http://ja.wikipedia.org/wiki/UUID

UUIDは16進数、32byteの値を8byte,4byte,4byte,4byte,12byteずつハイフン区切りにした形式で
構成していますので、正規表現のような規則性を表現する手法にはうってつけです。

<?php

	$aPath = "../Shohin_Kanri/";
	deleteFile($aPath);
	
	////////////////////////////////////////////////////////
	//ディレクトリ内のファイルを取得、ファイル名によって処理を分ける
	////////////////////////////////////////////////////////
	function deleteFile($aPath) {	
		$res_dir = opendir($aPath);		//ディレクトリ・ハンドルをオープン
		
		//ディレクトリ内のファイル名を1つずつ取得
		while( $file_name = readdir($res_dir) ) {	//ファイルのループ
			if ($file_name != "." and $file_name != "..") { 
				if (ereg("[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}.txt$", $file_name)) {
					$fullPath = $aPath . $file_name;
					unlink($fullPath);		//ファイル削除
				}				
			}					
		}	//ファイルのループ	
		
		closedir($res_dir);		//ディレクトリ・ハンドルをクローズ	
	}


?>



このdeleteFileという関数を使う事で、UUIDから生成したファイル名を検索して、
削除するという一連の処理を実行する事ができます。


8 2月

行ってきましたPAGE2015

みなさま、 お疲れ様です。大澤です。

先日、PAGE2015に行ってきました。
池袋のサンシャインシティコンベンションセンターで、2月4日~6日の3日間開催されていました。
PAGE2015

私が来場したのは2月6日(金)の最終日。
入場は10:00からでしたが開場前から入り口付近は人、人、人で大・混・雑!
かなりの熱気、盛り上がりを感じました。

まず、興味を引くもの、そうでないものを一通り見るために一周。

10:40からは『いよいよCSから、CCへCreative Cloudで実現するDTPの業務改善』という「クリエイティブゾーン」で行われたセミナーを拝聴しました。
セミナー後、疑問に思ったことを質問するために隣のADOBEブースを訪れました。

大澤の質問
その1
ADOBE Creative Cloud (2014)から搭載されたIllustrator、Photoshopで共通して使用できるライブラリパネル。
Illustrator、PhotoshopやiOSアプリの「Adobe Brush」「Adobe Shape」「Adobe Color」 で作成したデータをCloud を経由してシームレスに同期が可能とか。
例えば、Photoshopのライブラリパネルに登録してある画像をIllustratorに配置。
その後、画像をレタッチして保存。
当然、Illustratorに配置してある画像の更新が必要になってきます。
「Cloud を経由」というオンライン環境での作業として追加されたこの機能。オフライン環境での動作はどうなるのか?
答:「オンライン、オフライン共々、Illustratorに配置した画像は全て埋め込みになり、更新はできないので再配置が必要」
iPhone画面
▲左から「Adobe Brush」「Adobe Shape」「Adobe Color」

その2
Creative Cloudが利用できるAdobe Typekitフォント。
フォントをダウンロードしwebフォントとしての活用や印刷にも使用できる。
とのことでしたが、Creative Cloudユーザー以外にも配布ができてしまうのでは? ライセンスの問題で大丈夫なの?
答:「ダウンロードとはいってもローカル上では不可視状態なのでユーザーは触れないし、パッケージ機能でも収集されない」
なるほど! 納得!
Typekitフォント
▲Typekitフォント使用図(PhotoshopCC(2014))
 体験版ですが……。

モリサワブースでは「MC Catalog+」の話を伺いました。
カタログ、チラシ、パンフレットなどのコンテンツに、スマホやタブレット向けに多言語のコンテンツを配信できるというもので、 日本語で表示されている文章の部分をタップすると、英語・中国語簡体字・中国語繁体字・韓国語の最大5言語で切り替え表示できるというものでした。
大澤の質問
日本語からの自動翻訳という仕組みですが、翻訳エンジンの精度においてはどれくらいまで正確なのか?
答:「Line」での翻訳でも実績のある機会翻訳を使用している。割合でいうと70~80%くらい正確。外国の方が読んでも意味は通じる」
とのことでした。
なるほど! 納得!

15:45からは『デバイス多様化時代のコンテンツ配信』というカンファレンスセミナーを拝聴してきました。
webやスマホ、タブレットなどといった多様化する情報収集デバイスに向けたコンテンツ配信の仕組みや、webの習得が難易に感じる人向けに、簡単にwebサイトを構築できる方法の一つとしてCMS(content management system)の紹介をしていました。
紹介されてたCMSを列挙します。
※詳細を説明しながらの流れでしたがメモを取りきれませんでした。
 各サイトから情報を収集していただければと思います。

Wix
▲WIX

baserCMS
▲baserCMS

a-blog cms
▲a-blog cms(有料ですが登壇者お勧めしていました)

PowerCMS
▲PowerCMS

WordPress
▲WordPress(海外ベースだけど日本語サイト有。最近大人気)

movabletype
▲Movable Type(日本で最も歴史が長い分、技術者も多い)

perch
▲Perch(海外版のみ)

Jimdo
▲Jimdo

concrete5
▲concrete5
 この2、3年で日本語化され安定してきている。
 現在新バージョンは5.7
 速度が速いとのことです。

cloudcannon
▲cloudcannon(海外版のみ)

と簡単にまとめてみました。
CMSは簡単に作成できるとは言っても、それなりに習得が必要なので勉強は必要ですね……。
常に学ぶ意欲は持ちたいものです。
 
3 2月

[Objective-C]MPMoviePlayerControllerで再生完了時の通知が発生しない

こんにちは、プログラマのLFです。

今回の記事は自分のための備忘録的な意味合いで書いています。 

MPMoviePlayerControllerで動画を再生させたのですが
再生完了時の通知が発生しないという問題に遭遇しました。

結論からいうと、生成したMPMoviePlayerControllerを保持するためにプロパティを宣言して
MPMoviePlayerControllerインスタンスを保持させておかないとダメみたいです。

ViewController.m

@interface ViewController ()
@property (strong, nonatomic) MPMoviePlayerController *movPlayer;
//インスタンスを保持する変数(これがないとdelegateが動作しない)
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

(省略)

self.movPlayer = [[MPMoviePlayerController alloc] initWithContentURL:movURL];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.movPlayer];

}


//再生終了後(MPMoviePlayer delegate)
- (void)moviePlayBackDidFinish:(NSNotification*)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
MPMoviePlayerController* moviePlayerObj = [notification object];
[moviePlayerObj.view removeFromSuperview];
}

MPMoviePlayerControllerは過去に何度も使っているのに、
とってもいまさらなことで悩んでしまう辺り、
まだまだ修行が足りませんね…。 
2 2月

[Objective-C]OpenCVのインストールでハマったお話

こんにちは、プログラマのLFです。

いま調査中のアプリで画像加工をやりたいなーと思い、Google先生に訪ねてみると、
「OpenCVがいいですよ」というサイトをたくさん紹介してくださったので
試しにインストールしてみることにしました。

ここからが苦難の始まりだとは知る由もなく…。

私はiOSのライブラリ管理ツールとして
「CocoaPods」を使い始めています。
 
ちなみにOS XであればHomebrewを使ったり、
Rubyであればrbenv、
Perlであればperlbrew、plenvと
この手の管理ツール大好きな人です。
まぁ上記のものはパッケージ管理ツールといったほうが正しいのかもしれませんが。

とにかく、自分でmakeすることなく、簡単にライブラリを導入したいわけです。
そんなわけでCocoaPodsを使い始めました。

CocoaPodsについては、下記のサイトが参考になるかと。
iOSライブラリ管理の神ツール「CocoaPods」のインストールと使い方 (1/2) 
iOSライブラリ管理ツール「CocoaPods」の使用方法 

OpenCVについて調べてみるとうれしいことにCocoaPodsに対応しているとのこと。
これは簡単にミッションクリアだなーと浮かれつつ、
以下のPodfileを作成して、インストール。

platform :ios, "7.0"
pod 'OpenCV'

おお、できたできた。
インストールされたのは最新版の2.4.10か。
とりあえずビルドしてみるかと試したところ…。

ぎゃー!リンカエラーの雨霰!!!
なんで?なんで?
この時点で結構泣きそうでした。

シミュレータでも実機(iPhone6 8.1.1)でもダメ。
どうやらアーキテクチャが対応してないっぽい。

いろいろ検索してそれっぽい対策をしても結果は変わらず。

CocoaPodsのインストールがだめなのかなーと
本家サイトから最新版の2.4.10をダウンロードして
フレームワークだけインストールしても
結果は変わらず。

なんで?なんでなの?僕なんか悪いことした?
 
そんなとき下記のサイトを見つけました。
iOS OpenCV.frameworkは64bitビルドに対応していました 

ん? 64bit対応?
たしかにiPhone6のアーキテクチャのarm64って64bit対応だよなー。
で、2.4.10はarm64に対応してないよってエラーが表示されている、と…。

え、つまり2.4.10が64bit対応してないってこと?
まさかー、そんなー、最新版でデグレってるのー?
そんなこと……………………

ありました!!!!!!
 
試しに2.4.9のフレームワークをダウンロードしてビルドしたら
あっさりビルドが通りました。

まじかー、まじかー、まじかー(以下脳内でリピート )

じゃあ、CocoaPodsでバージョン指定してインストールしたら
いけるんじゃない?と下記のPodfileを作成してインストール。

platform :ios, "7.0"
pod 'OpenCV', '2.4.9'

はい、成功。
ビルドが通りました!

とりあえずいまのところ2.4.9を使うしかないのかなー。
 
ちなみにOpenCVでやりたかったことは、一瞬で調査が終わりましたとさ…。
切ない…。 
記事検索
ギャラリー
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • 行ってきました「IGAS2015」!
  • ちょっとWEBのお話…。~Emmet編~
  • ちょっとWEBのお話…。~Emmet編~