SlideShare une entreprise Scribd logo
1  sur  16
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
ありがとうございました

Contenu connexe

Tendances

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.
 
RUPC2014_Day3_G
RUPC2014_Day3_GRUPC2014_Day3_G
RUPC2014_Day3_G
Yuma Inoue
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
manaten
 

Tendances (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
 

En vedette

Debate De Consultoria
Debate De ConsultoriaDebate De Consultoria
Debate De Consultoria
agca12
 
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
Sammo_644
 
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
Frank Hatzack
 
Revolver February 2013
Revolver February 2013Revolver February 2013
Revolver February 2013
Kam Gerohimos
 
Amey mahant's presentation
Amey mahant's presentationAmey mahant's presentation
Amey mahant's presentation
abciindia
 

En vedette (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
 

Similaire à Hokkaido.pm.casual #03 slide

20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
Tatsuhiko Kubo
 
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化するメディア芸術基礎 Ⅰ 第4回:CSS入門  情報の形を視覚化する
メディア芸術基礎 Ⅰ 第4回:CSS入門 情報の形を視覚化する
Atsushi Tadokoro
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)
Shintaro Fukushima
 
20150909卒研進捗LT
20150909卒研進捗LT20150909卒研進捗LT
20150909卒研進捗LT
mohemohe
 
2012 kanemotolablecture3
2012 kanemotolablecture32012 kanemotolablecture3
2012 kanemotolablecture3
ytanno
 

Similaire à 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
 

Dernier

Dernier (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

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