SlideShare a Scribd company logo
バッチリネーマーの制作




   2011/11/26
   @eighttails




                 1
アジェンダ

●   自己紹介
●   ツール概要
●   動機・要件
●   設計
●   実装
●   ユニットテスト
●   まとめ
                    2
自己紹介

●   TwitterID:@eighttails
●   メーカー系 SIer 勤務
●   業務では C++ でのアプリ開発が主
●   GUI アプリの開発経験はあまりなし
●   自宅での普段使い OS は Linux(Debian Sid)
●   Qt プログラミング歴は半年程


                                      3
ツール概要

●   BRenamer( 仮称 )
●   GUI でファイル名を
     一括置換
●   はじめての Qt アプリ




                        4
使い方

1.ツリービューでフォルダを指定
2.検索文字列、置換文字列を入力
3.検索条件(フォルダ or ファイル、サブフォル
   ダ探索、大文字小文字区別)を入力
4.プレビュー
5.実行
6.取り消し

                            5
動機・要件

●   当初の目的はデジカメで撮影した写真、動画
     の整理
●   Linux で動かしたい (Windows でも )
●   GUI で操作したい
●   結果をプレビューしたい
●   ファイル名の変更を Undo したい
●   一般的な正規表現で記述したい
      –   これさえ出来れば pyRenamer でよかった…
                                      6
設計

●   まずはロジック部の設計から




                    7
実装

●   QDir (ディレクトリ、ファイル操作)
     –   QFileInfoList QDir::entryInfoList()
             ●   フォルダ内のファイル・フォルダを列挙
             ●   QFileInfo からはファイル / フォルダの区別、不可
                  視属性、パーミッション等の各種属性が取得で
                  きる
     –   bool QDir::rename()
             ●   ファイル、フォルダ名の変更



                                               8
実装

●   QRegExp( 正規表現 )
      –   ファイル名の検索、置換に使用。
      –   RegExp と言いつつ、ワイルドカードもサポー
           ト。
      –   コンストラクタ :QRegExp( クエリ文字列 , 大文
           字小文字を区別 , パターンシンタックス )
      –   QRegExp::exactMatch() でフォルダ内のファイル
           名にマッチするかチェック。


                                              9
実装(ファイルの検索部)

                       クエリの作成


                     ファイル・フォルダ
                          の列挙
      QList に対しては    NoDotAndDotDot が
     foreach でループが         重要
           書ける
                     QFileInfo を確認。
                     ディレクトリの場合
                        は再帰処理

                     クエリにマッチした
                      ファイルは、各
                     RenameMethod の
                      実装に置換を依頼


                                  10
ユニットテスト

●   ファイル名を一括変更するというツールの性
     質上、一歩間違えば大惨事
●   GUI 作る前に、ロジック部のユニットテスト
     を作成




                             11
ユニットテスト

●   テストフレームワー
     クは QTest を使
     用。
●   テストプロジェクト
     は QtCreator 上で作
     成可能




                       12
ユニットテスト
             テストクラスを作成

   テスト用関数を private スロットとして作成
   すると、それらが自動的に順次実行される。

   cleanup() は全テストケース終了後に自動的
    に呼ばれる。ここではテスト用に作成した
           ファイル、フォルダを削除。
         前準備、後始末には他に init(),  
   initTestCase(),   cleanupTestCase() が用意
                   されている。

   QDir::tempPath() で、 OS に応じた一時ファ
             イルパスが取得できる

   実際にファイルを作成して検索・置換機能の
          テストを実行
                                         13
GUI の作成

    ●   … 割愛。
    ●   ( 数時間ででき
          ちゃった )




                   14
さあ、動いた!




          15
とはいえ
       まだ Ver0.1
( 正規表現による置換ができるだけ )




                      16
今後の予定

●   連番付加
●   親フォルダ名をファイルに追加
●   EXIF 、 ID3 情報からファイル名に
●   コマンドライン版




                            17
まとめ・所感

●   ファイルシステム、正規表現など、 Qt は非
     GUI ライブラリも充実。
     –   Qt or Boost?
●   テストフレームワークもあるよ!
     –   CPPUnit の代替候補?
●   勉強と設計に時間かけすぎた…
     –   でも Qt で何が用意されているか知っておかない
          と自分で作ってしまう

                                18
とはいえ




       19
もう C++ でアプリ書く時代じゃないよね…
  ( QML か PySide でもやるか…)




                           20
最後に

●   ソースファイルはこちら
     –   https://git.gitorious.org/brenamer/brenamer.git
●   BSD ライセンス




                                                           21

More Related Content

What's hot

仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
bsdhack
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
icchy
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
Yikei Lu
 
Linux kernelのbspとupstream
Linux kernelのbspとupstreamLinux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
bsdhack
 
Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話
Misao X
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
Jun Fukaya
 
Mercurial入門(後半)解説版
Mercurial入門(後半)解説版Mercurial入門(後半)解説版
Mercurial入門(後半)解説版
You&I
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
 
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
Yuto Takei
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
Masaru Oki
 
Git リモートへの道
Git リモートへの道Git リモートへの道
Git リモートへの道
Koudai Takahasi
 
関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側Gosuke Miyashita
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
AromaBlack
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール弘毅 露崎
 
Git 初心者講座 by forkwell
Git 初心者講座 by forkwellGit 初心者講座 by forkwell
Git 初心者講座 by forkwell
sinsoku listy
 

What's hot (20)

仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
 
Linux kernelのbspとupstream
Linux kernelのbspとupstreamLinux kernelのbspとupstream
Linux kernelのbspとupstream
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
 
Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話
 
Bazaar
BazaarBazaar
Bazaar
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
 
Mercurial入門(後半)解説版
Mercurial入門(後半)解説版Mercurial入門(後半)解説版
Mercurial入門(後半)解説版
 
チートシート
チートシートチートシート
チートシート
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
Git
GitGit
Git
 
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
Git リモートへの道
Git リモートへの道Git リモートへの道
Git リモートへの道
 
関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール
 
Git 初心者講座 by forkwell
Git 初心者講座 by forkwellGit 初心者講座 by forkwell
Git 初心者講座 by forkwell
 

Viewers also liked

Aprendizaje colaborativo
Aprendizaje colaborativoAprendizaje colaborativo
Aprendizaje colaborativoJudith
 
Educ y TIC
Educ y TICEduc y TIC
Educ y TICSisita B
 
Web 2.0. Redes y comunidades de aprendizaje. Congreso Esap
Web 2.0. Redes y comunidades de aprendizaje. Congreso EsapWeb 2.0. Redes y comunidades de aprendizaje. Congreso Esap
Web 2.0. Redes y comunidades de aprendizaje. Congreso Esap
Miguel Alós
 
Aprendizaje
AprendizajeAprendizaje
Aprendizajeerubio64
 
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVOMEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
Elda Fernanda García Pérez
 
Medios tecnológicos innovadores en entornos virtuales
Medios tecnológicos innovadores en entornos virtualesMedios tecnológicos innovadores en entornos virtuales
Medios tecnológicos innovadores en entornos virtuales
Alma595
 
Aprender haciendo
Aprender haciendoAprender haciendo
Aprender haciendo
Fundación Forem Galicia
 
Act.1 Medios Tecnológicos Innovadores en Entornos Virtuales
Act.1 Medios Tecnológicos Innovadores en Entornos VirtualesAct.1 Medios Tecnológicos Innovadores en Entornos Virtuales
Act.1 Medios Tecnológicos Innovadores en Entornos Virtuales
Gilbertopotenciano
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
Candelario Ríos Becerra
 
Cuadro comparativo YouTube, Dropbox y SlideShare
Cuadro comparativo YouTube, Dropbox y SlideShareCuadro comparativo YouTube, Dropbox y SlideShare
Cuadro comparativo YouTube, Dropbox y SlideShare
Felicia Zentella
 
Neurociencia y aprendizaje
Neurociencia y aprendizajeNeurociencia y aprendizaje
Neurociencia y aprendizaje
Carlos Díaz
 

Viewers also liked (13)

Aprendizaje colaborativo
Aprendizaje colaborativoAprendizaje colaborativo
Aprendizaje colaborativo
 
Educ y TIC
Educ y TICEduc y TIC
Educ y TIC
 
Web 2.0. Redes y comunidades de aprendizaje. Congreso Esap
Web 2.0. Redes y comunidades de aprendizaje. Congreso EsapWeb 2.0. Redes y comunidades de aprendizaje. Congreso Esap
Web 2.0. Redes y comunidades de aprendizaje. Congreso Esap
 
Aprendizaje
AprendizajeAprendizaje
Aprendizaje
 
Presentación1
Presentación1Presentación1
Presentación1
 
Herramientas 2.0 Y Aplicaciones Digitales
Herramientas 2.0 Y Aplicaciones DigitalesHerramientas 2.0 Y Aplicaciones Digitales
Herramientas 2.0 Y Aplicaciones Digitales
 
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVOMEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
MEDIOS TECNOLÓGICOS INNOVADORES, CUADRO COMPARATIVO
 
Medios tecnológicos innovadores en entornos virtuales
Medios tecnológicos innovadores en entornos virtualesMedios tecnológicos innovadores en entornos virtuales
Medios tecnológicos innovadores en entornos virtuales
 
Aprender haciendo
Aprender haciendoAprender haciendo
Aprender haciendo
 
Act.1 Medios Tecnológicos Innovadores en Entornos Virtuales
Act.1 Medios Tecnológicos Innovadores en Entornos VirtualesAct.1 Medios Tecnológicos Innovadores en Entornos Virtuales
Act.1 Medios Tecnológicos Innovadores en Entornos Virtuales
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Cuadro comparativo YouTube, Dropbox y SlideShare
Cuadro comparativo YouTube, Dropbox y SlideShareCuadro comparativo YouTube, Dropbox y SlideShare
Cuadro comparativo YouTube, Dropbox y SlideShare
 
Neurociencia y aprendizaje
Neurociencia y aprendizajeNeurociencia y aprendizaje
Neurociencia y aprendizaje
 

Similar to バッチリネーマーの制作

JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
l_b__
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
 
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
Ryuichi Ueda
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
maebashi
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
Toru Tamaki
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Preferred Networks
 
20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuronekoKohki Nakashima
 
20170124 linux basic_1
20170124 linux basic_120170124 linux basic_1
20170124 linux basic_1
YUSUKE MORIZUMI
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
KokiMakita1
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
shigeya
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
Etsuji Nakai
 
Linux Namespaces
Linux NamespacesLinux Namespaces
Linux Namespaces
Masami Ichikawa
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
 
Linux kernelsourcearchaeologywithgit public_20120130
Linux kernelsourcearchaeologywithgit public_20120130Linux kernelsourcearchaeologywithgit public_20120130
Linux kernelsourcearchaeologywithgit public_20120130Etsuji Nakai
 

Similar to バッチリネーマーの制作 (20)

JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko
 
20170124 linux basic_1
20170124 linux basic_120170124 linux basic_1
20170124 linux basic_1
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
Linux Namespaces
Linux NamespacesLinux Namespaces
Linux Namespaces
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
 
Linux kernelsourcearchaeologywithgit public_20120130
Linux kernelsourcearchaeologywithgit public_20120130Linux kernelsourcearchaeologywithgit public_20120130
Linux kernelsourcearchaeologywithgit public_20120130
 

Recently uploaded

CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 

Recently uploaded (16)

CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 

バッチリネーマーの制作

  • 1. バッチリネーマーの制作 2011/11/26 @eighttails 1
  • 2. アジェンダ ● 自己紹介 ● ツール概要 ● 動機・要件 ● 設計 ● 実装 ● ユニットテスト ● まとめ 2
  • 3. 自己紹介 ● TwitterID:@eighttails ● メーカー系 SIer 勤務 ● 業務では C++ でのアプリ開発が主 ● GUI アプリの開発経験はあまりなし ● 自宅での普段使い OS は Linux(Debian Sid) ● Qt プログラミング歴は半年程 3
  • 4. ツール概要 ● BRenamer( 仮称 ) ● GUI でファイル名を 一括置換 ● はじめての Qt アプリ 4
  • 6. 動機・要件 ● 当初の目的はデジカメで撮影した写真、動画 の整理 ● Linux で動かしたい (Windows でも ) ● GUI で操作したい ● 結果をプレビューしたい ● ファイル名の変更を Undo したい ● 一般的な正規表現で記述したい – これさえ出来れば pyRenamer でよかった… 6
  • 7. 設計 ● まずはロジック部の設計から 7
  • 8. 実装 ● QDir (ディレクトリ、ファイル操作) – QFileInfoList QDir::entryInfoList() ● フォルダ内のファイル・フォルダを列挙 ● QFileInfo からはファイル / フォルダの区別、不可 視属性、パーミッション等の各種属性が取得で きる – bool QDir::rename() ● ファイル、フォルダ名の変更 8
  • 9. 実装 ● QRegExp( 正規表現 ) – ファイル名の検索、置換に使用。 – RegExp と言いつつ、ワイルドカードもサポー ト。 – コンストラクタ :QRegExp( クエリ文字列 , 大文 字小文字を区別 , パターンシンタックス ) – QRegExp::exactMatch() でフォルダ内のファイル 名にマッチするかチェック。 9
  • 10. 実装(ファイルの検索部) クエリの作成 ファイル・フォルダ の列挙 QList に対しては NoDotAndDotDot が foreach でループが 重要 書ける QFileInfo を確認。 ディレクトリの場合 は再帰処理 クエリにマッチした ファイルは、各 RenameMethod の 実装に置換を依頼 10
  • 11. ユニットテスト ● ファイル名を一括変更するというツールの性 質上、一歩間違えば大惨事 ● GUI 作る前に、ロジック部のユニットテスト を作成 11
  • 12. ユニットテスト ● テストフレームワー クは QTest を使 用。 ● テストプロジェクト は QtCreator 上で作 成可能 12
  • 13. ユニットテスト テストクラスを作成 テスト用関数を private スロットとして作成 すると、それらが自動的に順次実行される。 cleanup() は全テストケース終了後に自動的 に呼ばれる。ここではテスト用に作成した ファイル、フォルダを削除。 前準備、後始末には他に init(),   initTestCase(),   cleanupTestCase() が用意 されている。 QDir::tempPath() で、 OS に応じた一時ファ イルパスが取得できる 実際にファイルを作成して検索・置換機能の テストを実行 13
  • 14. GUI の作成 ● … 割愛。 ● ( 数時間ででき ちゃった ) 14
  • 16. とはいえ まだ Ver0.1 ( 正規表現による置換ができるだけ ) 16
  • 17. 今後の予定 ● 連番付加 ● 親フォルダ名をファイルに追加 ● EXIF 、 ID3 情報からファイル名に ● コマンドライン版 17
  • 18. まとめ・所感 ● ファイルシステム、正規表現など、 Qt は非 GUI ライブラリも充実。 – Qt or Boost? ● テストフレームワークもあるよ! – CPPUnit の代替候補? ● 勉強と設計に時間かけすぎた… – でも Qt で何が用意されているか知っておかない と自分で作ってしまう 18
  • 20. もう C++ でアプリ書く時代じゃないよね… ( QML か PySide でもやるか…) 20
  • 21. 最後に ● ソースファイルはこちら – https://git.gitorious.org/brenamer/brenamer.git ● BSD ライセンス 21