SlideShare a Scribd company logo
Lightning Talk Script
for hokkaido.pm Casual #3
         in July 18th, 2012
Perl でファイル入出力?
   お、やったことあるぞ。
   というか、実際そればっかりだし。
   しかし、「全部自分で書く派」だから、
    皆さんの役に立つかなぁ?
   でも、ここを逃したら、「自己紹介」し
    かないぞ。

   しょうがない。やってまえ。
TAB 区切りデータから BMP を作
る
   業務でやったこと。
   タックシール印刷アプリの関係。
   寸法データから、見本用の Thumbnail 画
    像を生成する作業。
   年2~3回データを更新する都度、実施
    する。
   タックシールの寸法データは 2000 件を越
    えるので、手で描いていたら終わらない
    。
入力ファイル
入力ファイルの項目
   #0   メーカー名        #10   1 片縦
   #1   メーカーコード      #11   1 片横
   #2   型番           #12   上余白
   #3   用紙サイズ名       #13   下余白
   #4   用紙縦          #14   左余白
   #5   用紙横
                      #15   右余白
   #6   面数
   #7   縦の面数
                      #16   上下間隔
   #8   横の面数
                      #17   左右間隔
   #9   1片のサイズ       #18   登録日
要求仕様
   「タックシール設定」フォルダ以下に、
       メーカー名のフォルダを作成して、その中に
        型番をファイル名とする BMP ファイルを作
        成する。
   ビットマップは縦 78pixel× 横 98pixel とす
    る。
   上記のビットマップの中央部分にフィッ
    トするように、タックシール用紙の模式
    図を描く。
出力ファイル
   Device-Independent Bitmap
    ( Windows )
       いわゆる .bmp 形式( Windows DIB とも)
       24bit Color Depth が単純で使いやすい
         先頭 54bytes のヘッダ
         データ部分は、 pixel の RGB 値が青→緑→赤の順

          に
          3 バイト( 24bit )の配列として並んで格納されて
          いる
       これが出力すればあとは画像変換ソフトで、
        どんな形式でも変換可能( jpeg や png も)
設計コンセプト
   図形を見てみると横線と
    縦線と塗りでできている
   縦線は短い横線で表現で
    きる
   塗りは横線をたくさん引
    けば表現できる
   割と単純に実装できそう
当時の設計
1.   全てが 233 という数値を取る 22932 個
     の要素を持つ配列を作る
        RGB 値 ( 233, 233, 233 )のグレー
        縦 78× 横 98pixel×3byte 分の bytes 列
2.   ここに台紙や各紙片を描けばいい
3.   適切にフィットさせるために、縮尺や座
     標系の変換は必要
当時の設計
4.   横線を描く関数
     sub drawLineHolizontal {
       local($posX,$posY,$length,$color,*bitpattern) = @_;
       local($i) = 0;
       $posX = int($posX / $scale);
       $posY = int($posY / $scale);
       $length = int($length / $scale);
       if($length + $posX > $BMP_width) {$length = $BMP_width - $posX;}
       for($i=0;$i<=$length;$i++) {
          $bitpattern[$posY * $BMP_width + $i+ $posX] = $color;
       }
     }
当時の設計
5.   縦線を描く関数
     sub drawLineVertical {
       local($posX,$posY,$length,$color,*bitpattern) = @_;
       $posX = int($posX / $scale);
       $posY = int($posY / $scale);
       $length = int($length / $scale);
       local($i) = 0;
       if($length + $posY > $BMP_height) {$length = $BMP_height - $posY;}
       for($i=0;$i<=$length;$i++) {
          $bitpattern[($posY + $i) * $BMP_width + $posX] = $color;
       }
     }
当時の設計
6.   矩形を描く
        縦線を 2 本、横線を 2 本描く
            さきほどの drawLineVertical() を 2 回呼ぶ
            さきほどの drawLineHolizontal() を 2 回呼ぶ
6.   矩形で塗りつぶす
        横線をいっぱい描く(笑)
            さきほどの drawLineHolizontal() を高さ分呼ぶ
            逆でもいいけど、計算速度的にアレなので
当時の設計
8.   フォルダを掘る
     mkdir(" タックシール設定 ",0755);
     for($i=0;$i<=$#foldername;$i++) {
        mkdir(" タックシール設定 ".$foldername[$i],0755);
     }

8.   ヘッダをつけてバイナリモードで書き出
     す
        binmode($fh); とか
        $buff .= pack(“C*”,$GValue); とか
実行結果
C:>perl makedata.pl tacklist.dat
アピカ
エイブリィマクセル
エーワン
エレコム
コクヨ
サンワサプライ
ナカバヤシ
ナナクリエイト
ニチバン
パピア・プラッツ
ヒサゴ
プラス
ライオン事務器
その他

C:>
皆さんはどうやる ?
A)   Image::Magick
B)   Imager
C)   Image::Imlib2
ありがとうございました

More Related Content

What's hot

関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
terurou
 
個人制作「球をよけるゲーム」
個人制作「球をよけるゲーム」個人制作「球をよけるゲーム」
個人制作「球をよけるゲーム」
Atelier Frameworks
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」Hiro H.
 
柿と杮
柿と杮柿と杮
柿と杮
xztaityozx
 
フルカラー3Dプリントでキーキャップを作る方法
フルカラー3Dプリントでキーキャップを作る方法フルカラー3Dプリントでキーキャップを作る方法
フルカラー3Dプリントでキーキャップを作る方法
ginjake
 
saiはRに宿るか? -RStudioとggplot2で碁を打つ-
saiはRに宿るか? -RStudioとggplot2で碁を打つ-saiはRに宿るか? -RStudioとggplot2で碁を打つ-
saiはRに宿るか? -RStudioとggplot2で碁を打つ-
nocchi_airport
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
yutannihilation
 
Ultra piet
Ultra pietUltra piet
Rust 超入門
Rust 超入門Rust 超入門
Rust 超入門
Chris Birchall
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
 
RUPC2014_Day3_G
RUPC2014_Day3_GRUPC2014_Day3_G
RUPC2014_Day3_GYuma Inoue
 
Pietソースコード精読
Pietソースコード精読Pietソースコード精読
Pietソースコード精読
Hideaki Nagamine
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのmanaten
 
Not free
Not freeNot free
Not free
makoto tsuyuki
 

What's hot (15)

関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
個人制作「球をよけるゲーム」
個人制作「球をよけるゲーム」個人制作「球をよけるゲーム」
個人制作「球をよけるゲーム」
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
柿と杮
柿と杮柿と杮
柿と杮
 
フルカラー3Dプリントでキーキャップを作る方法
フルカラー3Dプリントでキーキャップを作る方法フルカラー3Dプリントでキーキャップを作る方法
フルカラー3Dプリントでキーキャップを作る方法
 
saiはRに宿るか? -RStudioとggplot2で碁を打つ-
saiはRに宿るか? -RStudioとggplot2で碁を打つ-saiはRに宿るか? -RStudioとggplot2で碁を打つ-
saiはRに宿るか? -RStudioとggplot2で碁を打つ-
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
Ultra piet
Ultra pietUltra piet
Ultra piet
 
Rust 超入門
Rust 超入門Rust 超入門
Rust 超入門
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
RUPC2014_Day3_G
RUPC2014_Day3_GRUPC2014_Day3_G
RUPC2014_Day3_G
 
Pietソースコード精読
Pietソースコード精読Pietソースコード精読
Pietソースコード精読
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
Not free
Not freeNot free
Not free
 

Viewers also liked

Debate De Consultoria
Debate De ConsultoriaDebate De Consultoria
Debate De Consultoriaagca12
 
2. how does your media product represent social groups
2. how does your media product represent social groups2. how does your media product represent social groups
2. how does your media product represent social groupsSammo_644
 
Dominios
DominiosDominios
Dominios
Cancerbero Jp
 
Dentin -kunal parekh..advancd oral biology
Dentin -kunal parekh..advancd oral biologyDentin -kunal parekh..advancd oral biology
Dentin -kunal parekh..advancd oral biology
Kunal Parekh
 
la comunicación
la comunicación la comunicación
la comunicación
nataliaayora
 
Capacitacion antitabaco jefe alex camacho
Capacitacion  antitabaco   jefe alex camachoCapacitacion  antitabaco   jefe alex camacho
Capacitacion antitabaco jefe alex camacho
aLEx cAMacHO gARcÉS
 
6 Actions To Build Your Dream
6 Actions To Build Your Dream6 Actions To Build Your Dream
6 Actions To Build Your Dream
Cindy McAsey
 
Hire iPhone App Developers
Hire iPhone App DevelopersHire iPhone App Developers
Hire iPhone App Developers
Arth I-Soft
 
Innovation and Acceleration through Social Online Collaboration Idea Campaigns
Innovation and Acceleration through Social Online Collaboration Idea CampaignsInnovation and Acceleration through Social Online Collaboration Idea Campaigns
Innovation and Acceleration through Social Online Collaboration Idea CampaignsFrank Hatzack
 
Revolver February 2013
Revolver February 2013Revolver February 2013
Revolver February 2013Kam Gerohimos
 
Bloque ii
Bloque iiBloque ii
Bloque ii
Mary Napu
 
Hail storms - elementary level
Hail storms - elementary levelHail storms - elementary level
Hail storms - elementary level
Kathy Page-Applebee
 
Clouds, storms & the bible
Clouds, storms & the bibleClouds, storms & the bible
Clouds, storms & the bible
Kathy Page-Applebee
 
Jamie Gorski at Landlord WEBCON 2014
Jamie Gorski at Landlord WEBCON 2014Jamie Gorski at Landlord WEBCON 2014
Jamie Gorski at Landlord WEBCON 2014
LandlordWebCon
 
Amey mahant's presentation
Amey mahant's presentationAmey mahant's presentation
Amey mahant's presentationabciindia
 
Ppt -endzone_funcity
Ppt  -endzone_funcityPpt  -endzone_funcity
Ppt -endzone_funcity
Dyna Smith
 
Radio Today FM89.6
Radio Today FM89.6Radio Today FM89.6
Radio Today FM89.6
sk paul
 

Viewers also liked (19)

Debate De Consultoria
Debate De ConsultoriaDebate De Consultoria
Debate De Consultoria
 
2. how does your media product represent social groups
2. how does your media product represent social groups2. how does your media product represent social groups
2. how does your media product represent social groups
 
Dominios
DominiosDominios
Dominios
 
Dentin -kunal parekh..advancd oral biology
Dentin -kunal parekh..advancd oral biologyDentin -kunal parekh..advancd oral biology
Dentin -kunal parekh..advancd oral biology
 
la comunicación
la comunicación la comunicación
la comunicación
 
L'home savi
L'home saviL'home savi
L'home savi
 
Fragance
FraganceFragance
Fragance
 
Capacitacion antitabaco jefe alex camacho
Capacitacion  antitabaco   jefe alex camachoCapacitacion  antitabaco   jefe alex camacho
Capacitacion antitabaco jefe alex camacho
 
6 Actions To Build Your Dream
6 Actions To Build Your Dream6 Actions To Build Your Dream
6 Actions To Build Your Dream
 
Hire iPhone App Developers
Hire iPhone App DevelopersHire iPhone App Developers
Hire iPhone App Developers
 
Innovation and Acceleration through Social Online Collaboration Idea Campaigns
Innovation and Acceleration through Social Online Collaboration Idea CampaignsInnovation and Acceleration through Social Online Collaboration Idea Campaigns
Innovation and Acceleration through Social Online Collaboration Idea Campaigns
 
Revolver February 2013
Revolver February 2013Revolver February 2013
Revolver February 2013
 
Bloque ii
Bloque iiBloque ii
Bloque ii
 
Hail storms - elementary level
Hail storms - elementary levelHail storms - elementary level
Hail storms - elementary level
 
Clouds, storms & the bible
Clouds, storms & the bibleClouds, storms & the bible
Clouds, storms & the bible
 
Jamie Gorski at Landlord WEBCON 2014
Jamie Gorski at Landlord WEBCON 2014Jamie Gorski at Landlord WEBCON 2014
Jamie Gorski at Landlord WEBCON 2014
 
Amey mahant's presentation
Amey mahant's presentationAmey mahant's presentation
Amey mahant's presentation
 
Ppt -endzone_funcity
Ppt  -endzone_funcityPpt  -endzone_funcity
Ppt -endzone_funcity
 
Radio Today FM89.6
Radio Today FM89.6Radio Today FM89.6
Radio Today FM89.6
 

Similar to Hokkaido.pm.casual #03 slide

Linqで画像処理
Linqで画像処理Linqで画像処理
Linqで画像処理
Fumihito Yokoyama
 
IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0
Eiji Kamiya
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
Tatsuhiko Kubo
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
heriet
 
㉗HTML5+jQueryでお絵かき
㉗HTML5+jQueryでお絵かき㉗HTML5+jQueryでお絵かき
㉗HTML5+jQueryでお絵かき
Nishida Kansuke
 
卒研発表
卒研発表卒研発表
卒研発表
yayugu
 
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化するメディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化するAtsushi Tadokoro
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッションarctic_tern265
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtype
takesako
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
php5-gd で画像を弄る話
php5-gd で画像を弄る話php5-gd で画像を弄る話
php5-gd で画像を弄る話
Yo Ya
 
Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)
Takayuki Goto
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Shintaro Fukushima
 
20150909卒研進捗LT
20150909卒研進捗LT20150909卒研進捗LT
20150909卒研進捗LT
mohemohe
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
Koumei Tomida
 
2012 kanemotolablecture3
2012 kanemotolablecture32012 kanemotolablecture3
2012 kanemotolablecture3ytanno
 

Similar to Hokkaido.pm.casual #03 slide (20)

Linqで画像処理
Linqで画像処理Linqで画像処理
Linqで画像処理
 
IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
㉗HTML5+jQueryでお絵かき
㉗HTML5+jQueryでお絵かき㉗HTML5+jQueryでお絵かき
㉗HTML5+jQueryでお絵かき
 
卒研発表
卒研発表卒研発表
卒研発表
 
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化するメディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化する
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtype
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
FOSS4G 2012 Osaka
FOSS4G 2012 OsakaFOSS4G 2012 Osaka
FOSS4G 2012 Osaka
 
php5-gd で画像を弄る話
php5-gd で画像を弄る話php5-gd で画像を弄る話
php5-gd で画像を弄る話
 
CSS3 Design Recipe
CSS3 Design RecipeCSS3 Design Recipe
CSS3 Design Recipe
 
Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)
 
20150909卒研進捗LT
20150909卒研進捗LT20150909卒研進捗LT
20150909卒研進捗LT
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
 
2012 kanemotolablecture3
2012 kanemotolablecture32012 kanemotolablecture3
2012 kanemotolablecture3
 

Recently uploaded

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.
 
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
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
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
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / 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
 
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
 
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: 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
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 
論文紹介: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
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【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
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 

Recently uploaded (15)

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の勉強会で発表されたものです。
 
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
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
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
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / 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...
 
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 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: 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
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 
論文紹介: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...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【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
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 

Hokkaido.pm.casual #03 slide

  • 1. Lightning Talk Script for hokkaido.pm Casual #3 in July 18th, 2012
  • 2. Perl でファイル入出力?  お、やったことあるぞ。  というか、実際そればっかりだし。  しかし、「全部自分で書く派」だから、 皆さんの役に立つかなぁ?  でも、ここを逃したら、「自己紹介」し かないぞ。  しょうがない。やってまえ。
  • 3. TAB 区切りデータから BMP を作 る  業務でやったこと。  タックシール印刷アプリの関係。  寸法データから、見本用の Thumbnail 画 像を生成する作業。  年2~3回データを更新する都度、実施 する。  タックシールの寸法データは 2000 件を越 えるので、手で描いていたら終わらない 。
  • 5. 入力ファイルの項目  #0 メーカー名  #10 1 片縦  #1 メーカーコード  #11 1 片横  #2 型番  #12 上余白  #3 用紙サイズ名  #13 下余白  #4 用紙縦  #14 左余白  #5 用紙横  #15 右余白  #6 面数  #7 縦の面数  #16 上下間隔  #8 横の面数  #17 左右間隔  #9 1片のサイズ  #18 登録日
  • 6. 要求仕様  「タックシール設定」フォルダ以下に、  メーカー名のフォルダを作成して、その中に 型番をファイル名とする BMP ファイルを作 成する。  ビットマップは縦 78pixel× 横 98pixel とす る。  上記のビットマップの中央部分にフィッ トするように、タックシール用紙の模式 図を描く。
  • 7. 出力ファイル  Device-Independent Bitmap ( Windows )  いわゆる .bmp 形式( Windows DIB とも)  24bit Color Depth が単純で使いやすい  先頭 54bytes のヘッダ  データ部分は、 pixel の RGB 値が青→緑→赤の順 に 3 バイト( 24bit )の配列として並んで格納されて いる  これが出力すればあとは画像変換ソフトで、 どんな形式でも変換可能( jpeg や png も)
  • 8. 設計コンセプト  図形を見てみると横線と 縦線と塗りでできている  縦線は短い横線で表現で きる  塗りは横線をたくさん引 けば表現できる  割と単純に実装できそう
  • 9. 当時の設計 1. 全てが 233 という数値を取る 22932 個 の要素を持つ配列を作る  RGB 値 ( 233, 233, 233 )のグレー  縦 78× 横 98pixel×3byte 分の bytes 列 2. ここに台紙や各紙片を描けばいい 3. 適切にフィットさせるために、縮尺や座 標系の変換は必要
  • 10. 当時の設計 4. 横線を描く関数 sub drawLineHolizontal { local($posX,$posY,$length,$color,*bitpattern) = @_; local($i) = 0; $posX = int($posX / $scale); $posY = int($posY / $scale); $length = int($length / $scale); if($length + $posX > $BMP_width) {$length = $BMP_width - $posX;} for($i=0;$i<=$length;$i++) { $bitpattern[$posY * $BMP_width + $i+ $posX] = $color; } }
  • 11. 当時の設計 5. 縦線を描く関数 sub drawLineVertical { local($posX,$posY,$length,$color,*bitpattern) = @_; $posX = int($posX / $scale); $posY = int($posY / $scale); $length = int($length / $scale); local($i) = 0; if($length + $posY > $BMP_height) {$length = $BMP_height - $posY;} for($i=0;$i<=$length;$i++) { $bitpattern[($posY + $i) * $BMP_width + $posX] = $color; } }
  • 12. 当時の設計 6. 矩形を描く  縦線を 2 本、横線を 2 本描く  さきほどの drawLineVertical() を 2 回呼ぶ  さきほどの drawLineHolizontal() を 2 回呼ぶ 6. 矩形で塗りつぶす  横線をいっぱい描く(笑)  さきほどの drawLineHolizontal() を高さ分呼ぶ  逆でもいいけど、計算速度的にアレなので
  • 13. 当時の設計 8. フォルダを掘る mkdir(" タックシール設定 ",0755); for($i=0;$i<=$#foldername;$i++) { mkdir(" タックシール設定 ".$foldername[$i],0755); } 8. ヘッダをつけてバイナリモードで書き出 す  binmode($fh); とか  $buff .= pack(“C*”,$GValue); とか
  • 15. 皆さんはどうやる ? A) Image::Magick B) Imager C) Image::Imlib2