SlideShare a Scribd company logo
1 of 66
実録!『すぐわかるPerl』
〜社内ツール悲喜こもごも〜
2017-03-04
YAPC::Kansai
深沢 千尋
自己紹介
• 名前:深沢 千尋
• Twitter: @query1000
• Facebook: Chihiro Fukazawa
• メール: SuguwakaruPerl@gmail.com
• ブログ『イジハピ』で検索
著書
すぐわかるPerl(1999年)
著書
文字コード超研究(2003年)
著書
すぐわかるオブジェクト指向Perl(2008年)
著書
かんたんPerl(2016年)
今日のテーマ
「社内ツール」
• ソフトウェア開発以外の業務をしている
中小企業に勤めていたぼくが
• Perlを使っていかに作業の省力化に努めて
きたか
• Perlを使っていかに「作業の省力化の省力
化」に努めてきたか
要約ゆるふわで生きてきた!
第1章:Perlとの出会い
私の業務経歴:
• 汎用機のプログラマー、SEをやってた
(黒歴史)
• 音楽ライターをちょっとやった
(謎歴史)
• 1995年に某ソフトハウスに入社
• ローカリゼーション、翻訳会社に変貌
• 「社内ツール」を作っていた
最初の作業
Bolandのワープロ「Sprint」の文書を
FrameMaker文書に変換する作業
先輩が作ったツールを流すだけの
簡単なお仕事
の、はずだった。。
最初の作業
先輩のツールは、
文書処理の大枠はawk
文字列置換はsed
それらを接ぎ合わせるのがsh
全部知らない!!!
似たようなものがいっぱい!!!
混乱する!!!
Perlとの出会い
会社の本棚にこの本を見つけた。。
初めてのPerl
Randal L. Schwartz (著), brian d foy (著), Tom Phoenix (著), 近藤 嘉雪 (翻訳)
オライリー・ジャパン刊
Larry Wallさんの序文
awk、sed、shのビーズを糸で繋ぐのをやめて
ビーズをブンゼンバーナーで溶かしてみたら
真珠のように輝き初めた!
感涙!
プログラムの4段階
• 第1段階:自分のために作る
=ワンライナー
• 第2段階:同僚のために作る
=社内ツール
• 第3段階:顧客のために作る
=オーダーウェア
• 第4段階:世界のために作る
=汎用ツール
今日は第1段階と第2段階の話をします👽
第2章:社内ツール進化論
ゆるふわなプログラミングで
自分と、隣の席の人を救うことについて。。
その1
テンライナーのすすめ
ワンライナーはスゴイ!
• こんなの…
$ perl -MFile::Find -MFile::Basename -e
'find sub{$h{(fileparse($_,qw{.[^.]+$}))[2]}++
if -f},@ARGV;END{map{print
"$_:$h{$_}n"}keys %h}' .
• これが「あ、なるほど!」と思う人はこ
れを使いましょう
(ヒストリにためておくといいらしい)
使ってみた…
• 拡張子ごとにファイルを集計してた!
ぼくはスゴくないので
こうします…😅
#! /usr/bin/perl
#
# sumDir.pl -- 任意のディレクトリ配下のファイルを拡張子ごとに集計する
use 5.010;
#use strict;
use warnings;
use File::Find;
use File::Basename;
find sub {$h{(fileparse($_,qw{.[^.]+$}))[2]}++ if -f},@ARGV;
END {
map{
print "$_:$h{$_}n";
}keys %h
}
実際にはこうします…😅
#! /usr/bin/perl
#
# sumDir2.pl -- 任意のディレクトリ配下のファイルを拡張子単位に集計する
use 5.010;
use strict;
use warnings;
use File::Find;
use File::Basename;
my $dir = shift;
my %hash = ();
find &file_proc, $dir; #(つづく)
実際にはこうします…😅
#(つづき)
for (sort keys %hash) {
say "$_:$hash{$_}";
}
sub file_proc {
return unless -f $_;
# http://d.hatena.ne.jp/perlcodesample/20100225/1264257759
my ($basename, $dirname, $ext) = fileparse($_, qr/..*$/);
$hash{$ext} += 1;
}
正規表現もスゴイやつはスゴイ!
• こんなの…
# 正しいクレジットカード番号かどうか
/^((4d{3})|(5[1-5]d{2})|(6011))([- ])?d{4}([-
])?d{4}([- ])?d{4}|3[4,7]d{13}$/
ぼくはスゴくないので
こうします…😅/^
(
(4d{3})| # VISA
(5[1-5]d{2})| # MASTER
(6011) # Discover
)
([- ])? # 空白はエスケープする
d{4}
([- ])?
d{4}
([- ])?
d{4}
|
3[4,7]d{13}$ # AMEX (15桁)
/x # xスイッチを使ってeXpandする
実際にはこうします…😅
#! /usr/bin/perl
#
# crecaCheck.pl – クレジットカードチェックのデモ
use 5.010;
use strict;
use warnings;
while(<DATA>) {
chomp;
if (&is_credit($_)) {
say “Yes credit! : $_”;
} else {
say “No credit! : $_”;
}
} #(つづく!)
実際にはこうします…😅
sub is_credit { #(つづき!)
my $_ = shift;
1 while s/[- ]//;
if (/D/) {
“”;
} elsif (/^3[47]d{13}$/) { # AMEXだけは15桁、他は16桁
"AMEX";
} elsif (/^4d{15}$/) {
"VISA";
} elsif (/^5[1-5]d{14}$/) {
"Master";
} elsif (/^6011[02-4]d{12}$/) {
"Discover";
} else {
“”;
}
} #(つづく!2)
実際にはこうします…😅
#(つづき!2)
__DATA__
3xxx4xxx5xxx6xxx
3xxx-4xxx-5xxx-6xxx
3300-0000-0000-000
3400-0000-0000-000
3500-0000-0000-000
3700-0000-0000-000
3700-0000-0000-0000
4000-0000-0000-000
JCB対応もカンタン!😝
sub is_credit {
my $_ = shift;
1 while s/[- ]//;
if (/D/) {
“”;
} elsif (/^3[47]d{13}$/) { # AMEXだけは全15桁、他は16桁
"AMEX";
} elsif (/^352[89]d{12}$/) {
"JCB";
} elsif (/^4d{15}$/) {
"VISA";
} elsif (/^5[1-5]d{14}$/) {
"Master";
} elsif (/^6011[02-4]d{12}$/) {
"Discover";
} else {
“”;
スゴイ正規表現はどこから来るか
• 正規表現しか使えないツールから来るこ
とがある
– スーパー検索置換プログラム
– オフィスソフト、DTPソフト
• Perlに移植すれば自由自在に書き伸ばせる
ここまでのまとめ
• スゴイ人はワンライナーで脳を生かして
仕事をする
• スゴくないぼくもテンライナーにすれば
Perlが仕事してくれる
• 好きずき(TMTOWTDI)
• テンライナーは可読性が高く、あとあと
メンテしやすい
その2
テンライナーの味噌蔵を作ろう
テンライナーの味噌蔵とは
• ある単一の小さな作業を自動化するか
• ある単一の新しい機能をテストする
• 10行で出来た小プログラム集である!
• 大きなプログラムを書くとき便利!
• 自分用プログラム辞典になる!
テンライナーの味噌蔵とは
• 完動プログラムにしておくと便利!
• データも内蔵しておくと便利!
• テンライナーの味噌蔵を貯めるには。。
• やりたいこと(作業)から攻める!
• できること(技術)から攻める!
例1:漢字かな逆変換
Text::Kakasiを使う
例2:Date::Simple(モジュールの
シノプシスを動かす!)
(例)Date::Simpleモジュール
http://search.cpan.org/~izut/
Date-Simple-3.03/
lib/Date/Simple.pm
例2:Date::Simple(モジュールの
シノプシスを動かす!)
#! /usr/bin/perl
#
# dateSimpleTest.pl --- Date::Simpleのテスト
use 5.010;
use strict;
use warnings;
use Date::Simple ('date', 'today');
# Difference in days between two dates:
my $diff = date('2017-03-04') - date('2017-01-01');
say "今年に入ってから $diff 日が経った";
# Offset $n days from now:
my $date = today() + 100;
say "今日の100日後は $date"; # uses ISO 8601 format (YYYY-MM-DD)
他にも、技術書の
コードスニペットを
動くようにする
というのも考えられる…
例3:正規表現テスター
正規表現をテストしたいときがある。
GUIのツールもあるが、ダサい。
※画像はイメージです
例3:正規表現テスター#! /usr/bin/perl
#
# regTest.pl -- 正規表現テスター
use 5.010;
use strict;
use warnings;
use utf8;
binmode DATA, ":encoding(UTF-8)";
binmode STDOUT, ":encoding(UTF-8)";
while (<DATA>) {
print if /Team-A/; # Team Aの人
}
# 順位 t 苗字 sp 名前 t メールアドレス t チーム名 t グループ名n
# メール アドレスは「ローマ字名_ローマ字苗字@example.com」(※架空のもので
す)
__DATA__ (つづく!)
例3:正規表現テスター(つづき!)
__DATA__
1 指原 莉乃 Rino_Sashihara@example.com Team-H HKT48
2 大島 優子 Yuuko_Ohshima@example.com Team-K AKB48
3 渡辺 麻友 Mayu_Watanabe@example.com Team-B AKB48
4 柏木 由紀 Yuki_Kashiwagi@example.com Team-B AKB48
5 篠田 麻里子 Mariko_Shinoda@example.com Team-A AKB48
6 松井 珠理奈 Jurina_Matsui@example.com Team-E SKE48
7 松井 玲奈 Rena_Matsui@example.com Team-S SKE48
8 高橋 みなみ Minami_Takahashi@example.com Team-A AKB48
9 小嶋 陽菜 Haruna_Kojima@example.com Team-A AKB48
10 宮澤 佐江 Sae_Miyazawa@example.com Team-K AKB48
11 板野 友美 Tomomi_Itano@example.com Team-K AKB48
12 島崎 遥香 Haruka_Shimazaki@example.com Team-B AKB48
13 横山 由依 Yui_Yokoyama@example.com Team-A AKB48
14 山本 彩 Sayaka_Yamamoto@example.com Team-N NMB48
15 渡辺 美優紀 Miyuki_Watanabe@example.com Team-M NMB48
16 須田 亜香里 Akari_Suda@example.com Team-KII SKE48
その3:MS Officeとの共存
MS OfficeとPerlを協調させよう!
Office (Excel、Word、Etc...)は自動化言語
VBAを持っている
なんでも出来る!(したければ!)
でも、可能な限りPerlでやる手もある!
• キセル方式
• お墓方式
MS Officeとの共存(キセル方式)
火皿と吸口だけVBAでやる
羅宇の部分はPerlでやる
MS Officeとの共存(キセル方式)
最初の状態(Word docx5個)
MS Officeとの共存(キセル方式)
Word docxの中身
MS Officeとの共存(キセル方式)
ツール(フォーム付きマニュアル)
MS Officeとの共存(キセル方式)
エクスポートするVBA
Private Sub CommandButton1_Click()
Dim files(100)
mypath = Environ("UserProfile") & "Desktopfoo"
files(1) = Dir(mypath & "*.docx")
i = 1
Do While files(i) <> ""
i = i + 1
files(i) = Dir()
Loop
i = 1
Do While files(i) <> ""
Documents.Open FileName:=mypath & files(i)
‘ここで何かやってもいいが、何もせず保存している
ActiveDocument.SaveAs2 FileName:=mypath & files(i) & ".XML", fileformat:=wdFormatXML
ActiveDocument.Close
i = i + 1
Loop
End Sub
MS Officeとの共存(キセル方式)
エクスポート後(XML5個追加)
MS Officeとの共存(キセル方式)
エクスポート後(XML5個追加)
MS Officeとの共存(キセル方式)
インポートするVBA
Private Sub CommandButton11_Click()
Dim files(100)
mypath = Environ("UserProfile") & "Desktopfoo"
files(1) = Dir(mypath & "*.xml")
i = 1
Do While files(i) <> ""
i = i + 1
files(i) = Dir()
Loop
i = 1
Do While files(i) <> ""
Documents.Open FileName:=mypath & files(i)
‘何もせず保存するだけ
ActiveDocument.SaveAs2 FileName:=mypath & files(i) & ".DOCX", fileformat:=wdFormatXMLDocument
ActiveDocument.Close
i = i + 1
Loop
End Sub
MS Officeとの共存(キセル方式)
インポート後(XML.DOCX5個追加)
MS Officeとの共存(お墓方式)
Word文書から文言を抽出する
抽出した後には「お墓」を残す
(概念だけ説明します。。)
MS Officeとの共存(お墓方式)
英語のdocxファイル
索引が
「XEフィールド」に
入っている
(隠し文字)
MS Officeとの共存(お墓方式)
英文の場合はきちん
と辞書順に索引がで
きる。。
MS Officeとの共存(お墓方式)
「XEフィールド」を
そのまま翻訳する
と。。
MS Officeとの共存(お墓方式)
文字コード順に索引
ができる。。
MS Officeとの共存(お墓方式)
本来は
「y」スイッチで
読みを入れる
これを自動化したい
MS Officeとの共存(お墓方式)
Word VBAで
XEフィールドから
索引を抜く
このとき、跡地に
★n★という形で
お墓を立てておく
MS Officeとの共存(お墓方式)
同じWordVBAで
★n★ → 索引語
というタブ区切りテキストを作る
MS Officeとの共存(お墓方式)
PerlでText::Kakasiを使って
★n★ → 索引語 → よみがな
というテキストを作る
MS Officeとの共存(お墓方式)
先程の
★お墓★ファイルに
索引、
yスイッチ、
読みの形で戻す
MS Officeとの共存(お墓方式)
よみがな順に索引が
できる。。
実は…索引付き文書の翻訳は、
索引から翻訳するとラク!
• 原文を書く人は、内容を書いてから索引を
作ったであろう
• でも翻訳をする人は、まず索引項目を抜いて
しまうとラク!
1. 原文でソートし、同じ言葉を寄せて統一的
に翻訳する
2. 索引項目の対訳用語集になる
3. 索引項目を原文に戻す
4. 原文を翻訳する
5. ページ数が変わるので索引を再生成する
第3章:社内ツールの社会学
開発者、ユーザー、会社全体にとっての
利点と問題点
社内ツールの良さ
(開発者にとって)
• 簡単に書ける
(見た目や汎用性に気を使わない)
• 過去の資産が活かせる
(同じようなパターンを頼まれる)
• 手順を教えるより簡単
(メールで用が済む)
• スキルアップする
(仕事が学びになる。ウマー!)
社内ツールの良さ
(ユーザーにとって)
• 軽い
(汎用ソフトは重くて大げさ)
• 痒いところに手が届く
(社内独自のフローに特化できる)
• 要望がすぐに聞き届けられる
(要望してくれたらな!)
• スキルアップする
(ユーザーからパワーユーザーになれる)
社内ツールの問題点
(開発者にとって)
• なかなかテストしてくれない
(納期の直前に初走行…
忙しいからしょうがないんだけど…)
• 予想外の使い方、裏マニュアルの横行…
「新しいバージョンは動かないから
古いバージョンを使うこと」
「消費税は入れられないから手で入れること」
要望してくれよーーー!!!😂
社内ツールの問題点
(ユーザーにとって)
• しょせん素人が作っているのでバグって
いる
(スミマセン…)
(要望してくれれば直すけど…)
(直したら次回からはバグってないから
手作業でやるよりいいと思うけど…)
• 予算が割けない
(納品しないものを作る予算はない…)
会社の意義
• 決められた手順通りに実直にやる人がエ
ライのか(家康型)
• 常に新しい手順がないか希求する人がエ
ライのか(秀吉型)
• お互いにリスペクトして仲良く協力して
やればいい!
愛は愛を生む💕
ご静聴ありがとうございました。。
2017-03-04
YAPC::Kansai
Chihiro Fukazawa
©All rights reserved.

More Related Content

Viewers also liked

Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Tsunenori Oohara
 
Fondos disponibles para innovación en empresas
Fondos disponibles para innovación en empresas Fondos disponibles para innovación en empresas
Fondos disponibles para innovación en empresas Roberto Vargas Buendía
 
Implications of Hadi Awang's RUU355
Implications of Hadi Awang's RUU355Implications of Hadi Awang's RUU355
Implications of Hadi Awang's RUU355Kevin Koo
 
3Com 1.009.916-01 / 009-3
3Com 1.009.916-01 / 009-33Com 1.009.916-01 / 009-3
3Com 1.009.916-01 / 009-3savomir
 
Libro plantas anatomia y fisiología vegetal
Libro plantas anatomia y fisiología vegetalLibro plantas anatomia y fisiología vegetal
Libro plantas anatomia y fisiología vegetalluzdary123
 
DISEÑO DE REACTORES BIOLÓGICOS
DISEÑO DE REACTORES BIOLÓGICOSDISEÑO DE REACTORES BIOLÓGICOS
DISEÑO DE REACTORES BIOLÓGICOSHéctor Rey
 

Viewers also liked (8)

Java script
Java scriptJava script
Java script
 
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
 
Fondos disponibles para innovación en empresas
Fondos disponibles para innovación en empresas Fondos disponibles para innovación en empresas
Fondos disponibles para innovación en empresas
 
Implications of Hadi Awang's RUU355
Implications of Hadi Awang's RUU355Implications of Hadi Awang's RUU355
Implications of Hadi Awang's RUU355
 
Formato 08
Formato 08Formato 08
Formato 08
 
3Com 1.009.916-01 / 009-3
3Com 1.009.916-01 / 009-33Com 1.009.916-01 / 009-3
3Com 1.009.916-01 / 009-3
 
Libro plantas anatomia y fisiología vegetal
Libro plantas anatomia y fisiología vegetalLibro plantas anatomia y fisiología vegetal
Libro plantas anatomia y fisiología vegetal
 
DISEÑO DE REACTORES BIOLÓGICOS
DISEÑO DE REACTORES BIOLÓGICOSDISEÑO DE REACTORES BIOLÓGICOS
DISEÑO DE REACTORES BIOLÓGICOS
 

Similar to 実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜

今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)syou6162
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたMitsuru Kariya
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験Toshio Ehara
 
辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話s2otsa
 
SPYSEE新検索機能の裏側
SPYSEE新検索機能の裏側SPYSEE新検索機能の裏側
SPYSEE新検索機能の裏側Naoki Orii
 
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!mokudai masayuki
 
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 真乙 九龍
 
Dev lobe20090325v1.0
Dev lobe20090325v1.0Dev lobe20090325v1.0
Dev lobe20090325v1.0walnut210
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)bleis tift
 
今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみたzaru sakuraba
 
PowerApps 初心者の館?
PowerApps 初心者の館?PowerApps 初心者の館?
PowerApps 初心者の館?Teruchika Yamada
 
経理屋がRailsを始めた理由
経理屋がRailsを始めた理由経理屋がRailsを始めた理由
経理屋がRailsを始めた理由Satomi Tsujita
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう知之 朝枝
 
Ojag naha vol13
Ojag naha vol13Ojag naha vol13
Ojag naha vol13Seiei Higa
 
Ojag naha vol13
Ojag naha vol13Ojag naha vol13
Ojag naha vol13hanachin
 
Perl で自然言語処理
Perl で自然言語処理Perl で自然言語処理
Perl で自然言語処理Toshinori Sato
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCESFDG ROOKIES
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 

Similar to 実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜 (20)

今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話
 
SPYSEE新検索機能の裏側
SPYSEE新検索機能の裏側SPYSEE新検索機能の裏側
SPYSEE新検索機能の裏側
 
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!
Microsoft Teams の Teamsのチームとチャネルの構成はこうせい!
 
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
 
Dev lobe20090325v1.0
Dev lobe20090325v1.0Dev lobe20090325v1.0
Dev lobe20090325v1.0
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
 
今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた
 
PowerApps 初心者の館?
PowerApps 初心者の館?PowerApps 初心者の館?
PowerApps 初心者の館?
 
経理屋がRailsを始めた理由
経理屋がRailsを始めた理由経理屋がRailsを始めた理由
経理屋がRailsを始めた理由
 
ガラパゴスExcel
ガラパゴスExcelガラパゴスExcel
ガラパゴスExcel
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう
 
Ojag naha vol13
Ojag naha vol13Ojag naha vol13
Ojag naha vol13
 
Ojag naha vol13
Ojag naha vol13Ojag naha vol13
Ojag naha vol13
 
Perl で自然言語処理
Perl で自然言語処理Perl で自然言語処理
Perl で自然言語処理
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 

実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜