tag:blogger.com,1999:blog-4694346015513059132024-03-13T19:55:46.210+09:00step by stepソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.comBlogger70125tag:blogger.com,1999:blog-469434601551305913.post-37775228901784032512020-01-18T17:22:00.001+09:002020-01-18T17:22:44.925+09:00RedmineプラグインをGitHub Actionsでテストする<a href="https://qiita.com/two_pack/items/31d159b28663b57614c4" target="_blank">Redmine Advent Calendar 2019</a>の<a href="https://qiita.com/two_pack/items/31d159b28663b57614c4" target="_blank">Qiita</a>で書きました。追っかけで<a href="https://qiita.com/two_pack/items/665680e886889f1a2467" target="_blank">もう一つ</a>。<br />
Travis-CIで行っていたRedmineプラグインのCIを、GitHub Actionsに変更したものです。<br />
GitHub Actionsをやってみようというのが動機づけですが、結果的に実行も早かったのでよかったです。<br />
<br />
Qiitaで記事を投稿するのも初だったのですが、ここと棲み分けをどうしたものか・・・ととりあえずリンクしてみました。ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-42799775557439016152018-12-09T22:07:00.000+09:002018-12-09T22:07:07.522+09:00ユーザー登録時に姓名で自動的にグループを割り当てる(Redmine Auto Assign Group Plugin)<a href="https://adventar.org/calendars/3352">Redmine Advent Calendar 2018</a>の9日目に書こうと思っていたやつです。<br />
<br />
<a href="https://github.com/two-pack/redmine_auto_assign_group">Redmine Auto Assign Group Plugin</a>は、ユーザー登録時、自動的にグループを割り当てるプラグインです。<br />
1年ぐらい前に、<a href="http://two-pack-sbs.blogspot.com/2017/10/redmine-auto-assign-group-plugin.html">ここ</a>に書いたような感じでRedmine.orgのフォーラムをきっかけに作ったものです。<br />
<br />
Redmine 4.0.0に向けて直した勢いで、姓名でも割り当てできるようにしました。<br />
メールアドレスと同じで、正規表現で設定を行います。<br />
他の条件とのAND条件で一致した場合にグループを割り当てます。<br />
画面はこんな感じ。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-LakjUEsyKXQ/XAvQgaVsGwI/AAAAAAAAlEU/20nDxrqzGDk5qmsaFO3esghPewq6RpYJACLcBGAs/s1600/groups_rules_tab_input_rule.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="279" data-original-width="595" height="150" src="https://2.bp.blogspot.com/-LakjUEsyKXQ/XAvQgaVsGwI/AAAAAAAAlEU/20nDxrqzGDk5qmsaFO3esghPewq6RpYJACLcBGAs/s320/groups_rules_tab_input_rule.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://3.bp.blogspot.com/-NdLgcmF3uoQ/XAvQgXs0sbI/AAAAAAAAlEQ/1uYzYwOxRdU0Td_c6xveHIygWpWmcfM0QCLcBGAs/s1600/groups_rules_tab_rule_exist.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="646" height="96" src="https://3.bp.blogspot.com/-NdLgcmF3uoQ/XAvQgXs0sbI/AAAAAAAAlEQ/1uYzYwOxRdU0Td_c6xveHIygWpWmcfM0QCLcBGAs/s320/groups_rules_tab_rule_exist.png" width="320" /></a></div>
<br />
前回リリース時点から、姓名に部署などを入れて運用するケースがあるため、メール以外もできるといいという話は上がっていました。<br />
ただ、自分自身がこのプラグインどころか、グループ自体を使っていないので、なかなか手がつきませんでした。自分で使うの大事ですね。<br />
<br />
やるか!と勢いをつけた当初は、そろそろRedmine 4.0.0がでるんじゃね!?<br />
と界隈が盛り上がっていた頃で、リリースに合わせてプラグインもリリースするなら、一緒にやるか、と思いたちました。<br />
本家のリリースは、やっぱり気分が上がりますよね!<br />
<br />
月日は流れて、、、、<br />
<ul>
<li><a href="https://www.redmine.org/projects/redmine/repository/revisions/17698">4.0.0のStable branch</a>のできたし!</li>
<li>Advent Calendarも書かないとだし。。。</li>
</ul>
という感じで、4.0.0を待たずにリリースってことにしました。<br />
リリース楽しみにして年末を過ごしたいと思いますw<br />
<span style="font-size: xx-small;">#書いてる時点でリリースしてないですけどね。。。</span><br />
<br />
と書いてアドベントカレンダー用にあっためて置いたら、12/9にRedmine 4.0.0がリリースされました!!!!!<br />
1日早くリリースしてしまいましたが、リリースされた状態のRedmine 4.0.0でも無事に動いています。<br />
<span style="font-size: xx-small;">#アドベントカレンダーの方は<a href="http://two-pack-sbs.blogspot.com/2018/12/redmine-400.html" target="_blank">別の</a>に変えてしまった。。。</span><br />
<br />
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-56916937886073193102018-12-09T21:52:00.002+09:002018-12-09T21:56:51.310+09:00祝 Redmine 4.0.0リリース!<a href="https://adventar.org/calendars/3352">Redmine Advent Calendar 2018</a>の9日目です!<br />
<br />
ついに<a href="http://www.redmine.org/projects/redmine/wiki/Download" target="_blank">今日、Redmine 4.0.0がリリース</a>されました!<br />
JPLはじめ、コミッタの皆様、コミュニティの皆様、ありがとうございました!<br />
<br />
で、プラグインのことを書こうかと思いましたが、急遽変更で<a href="http://www.redmine.org/news/119" target="_blank">Redmine.orgのニュースに投稿された、JPLのリリース通知</a><span id="goog_593095874"></span><a href="https://www.blogger.com/"></a><span id="goog_593095875"></span>を翻訳したいと思います。<br />
ざっくりな感じですので、誤訳などあればご指摘を。。。<br />
<h3>
<span style="font-size: small;">----------------</span><br />
<span style="font-size: large;">Redmine 4.0.0, 3.4.7, 3.3.9 リリース</span></h3>
昨年、Redmineにコントリビュートしてくれた多くの方に感謝します。Redmine 4.0.0のリリースを報告できて嬉しく思います。Redmine 4.0.0では、200を超える変更が行われました。<br />
<ul>
<li>メール通知での大きな変更: これまで1つのメールですべてのユーザーへ通知していましたが、それぞれのユーザー宛てになりました。</li>
<li>テキストの書式に関する多くの改善</li>
<li><a href="http://coderay.rubychan.de/" target="_blank">Coderay</a>から<a href="http://rouge.jneen.net/" target="_blank">Rouge</a>への変更により、コードハイライトで多くの言語をサポート</li>
</ul>
メールの配信は、現在Rails ActiveJobを使用しています。デフォルトでは非同期で送信されます。しかし、デフォルトではプロダクション環境には適していないインメモリキューが使用されるため、ActiveJobの永続的なバックエンドを設定することを検討する必要があります。<br />
<a href="https://guides.rubyonrails.org/v5.2/active_job_basics.html#job-execution" target="_blank">https://guides.rubyonrails.org/v5.2/active_job_basics.html#job-execution</a><br />
<br />
Redmine 4.0.0は、先日リリースされた最新のRails 5.2.2を使用しています。<br />
<br />
Redmine 3.4.7と3.3.9は、3.4.x、3.3.xのユーザー向けメンテナンスリリースです。詳細はチェンジログを参照してください。それぞれ、2つのRailsの脆弱性が修正されたRails 4.2.11への更新も含んでいます。それらの脆弱性はRedmine3.xには影響しないですが、可能であれば更新すべきです。<br />
----------------<br />
<br />
ついでに、拙作&メンテのプラグインの4.0.0対応状況は以下の通りです。<br />
<ul>
<li><a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter" target="_blank">Redmine XLSX format issue exporter</a><br />
Githubのmasterは4.0.0で動作しますが、4.0.0の最後の最後で直ったCSVエクスポートのバグと同じものがあるため対応中。。。</li>
<li><a href="https://github.com/two-pack/redmine_auto_assign_group" target="_blank">Redmine Auto Assign Group Plugin</a><br />
v0.1.1で対応済み</li>
<li><a href="https://github.com/two-pack/redmine_xls_export" target="_blank">Redmine XLS Export plugin</a><br />
v0.2.1.t11で対応済み</li>
</ul>
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-56922512045014693702018-10-17T23:03:00.002+09:002018-10-17T23:03:26.402+09:00Redmineのリポジトリから特定ソースの修正をGoogle Apps ScriptでメールするRedmineのプラグインを作成していると、関連する本体側の修正に影響を受けることがあります。<br />
また、私の作っている<a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter">Redmine XLSX format issue exporter</a>は、RedmineのCSVエクスポート機能と同等を目指しているので、変更に追随するようにしています。<br />
<br />
Redmine本体へのコミットは、<a href="https://toot.redmine.jp/">Mastodon</a>や<a href="https://discordapp.com/invite/tHgdVSj">Discord</a>のBOTで確認できますが、流してみる感じになるので見逃してしまいがちです。<br />
CIで失敗する場合はいいのですが、スルーしてなんか動きがおかしくなったり、<a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter/issues/63">本体側のバグ修正をプラグイン側にも反映すべき場合があったり</a>が続いたので、対策を考えて見ました、の結果です。<br />
<br />
今回はGoogle Apps Scriptを使って見ました。<a href="https://script.google.com/">Google Apps Script</a>を使うと、cron的なトリガーでスクリプトを動かすことができます。<br />
設定画面はこんな感じ。<br />
<a href="https://2.bp.blogspot.com/-gxggx6xgnMM/W8c9MFvQJLI/AAAAAAAAkxc/owpk8EybhgA2S-Z9FzWvzIHGBYKxskm5gCLcBGAs/s1600/trigger.png" imageanchor="1"><img border="0" data-original-height="136" data-original-width="802" src="https://2.bp.blogspot.com/-gxggx6xgnMM/W8c9MFvQJLI/AAAAAAAAkxc/owpk8EybhgA2S-Z9FzWvzIHGBYKxskm5gCLcBGAs/s1600/trigger.png" /></a><br />
<br />
作成したスクリプトは、<a href="http://www.redmine.org/projects/redmine/repository">redmine.orgのリポジトリページ</a>へアクセスして、今日のコミットがあればメールするというものです。<br />
以下のような感じ。targetsにURLを追加していけば、複数のソースをチェックできます。<br />
<script src="https://gist.github.com/two-pack/2c4164bd5f9eb492c35814ca94a0734b.js"></script><br />
<br />
これでちょっとは見逃しが少なくなるといいんですが。。。ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-11113128942364254122018-07-22T17:50:00.002+09:002018-07-22T17:55:34.616+09:00Redmineのチケットに表示されるSVNのコミット情報に対象ブランチを表示するRedmineのチケットとリポジトリを関連付けすると、そのチケットに該当のコミットが表示されます。<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<img border="0" data-original-height="201" data-original-width="478" height="168" src="https://1.bp.blogspot.com/-VK2j_2oP0iY/W1Q-aF85L6I/AAAAAAAAjnc/sRSK7a5QI2I0JuuogQNi7rg_VjNr5gowwCLcBGAs/s400/revisions1.png" width="400" /></div>
<div class="separator" style="clear: both; text-align: left;">
ここには、どのブランチへのコミットなのかの情報がありません。</div>
これを解決しようと以下のプラグインが存在します。<br />
<a href="http://www.redmine.org/plugins/redmine_revision_branches">Git Revision Branches</a><br />
<br />
名前からGit専用と見せかけて、実はMercurialにも対応していました。<br />
でも、私が欲しいのは<b>Subversion</b>!!!!!<br />
<br />
というわけで、以下のプルリクエストを作成しました。<br />
<a href="https://github.com/tleish/redmine_revision_branches/pull/21">Subversion support.</a><br />
<br />
これを入れるとSubversionでも以下のように表示されます。<br />
Redmineはプロジェクトに複数のリポジトリが設定できるため、そのリポジトリ名と後ろにブランチが表示されます。<br />
<div class="separator" style="clear: both; text-align: left;">
<img border="0" data-original-height="396" data-original-width="477" height="331" src="https://3.bp.blogspot.com/-UJIaNUM0REg/W1RAogWhOnI/AAAAAAAAjno/19SdHZp8Pegh7eLQhUxSo5Bx33Dj-b3vwCLcBGAs/s400/revisions2.png" width="400" /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
認識できるリポジトリは、Subversionの標準的な構成(trunk, branches, tags)を想定しています。<br />
ただ、Redmine本家のリポジトリからして、<a href="http://www.redmine.org/projects/redmine/repository/show/sandbox">sandbox</a>というのがあるので、さすがにRedmineのプラグインだしなと思って、それも認識できるようにしました。<br />
trunk以外はその1階層下まで表示する仕組みにしています。<br />
<br />
また、一つのリポジトリに複数のプロジェクトを突っ込んでいるような構成も見かけます。<br />
各プロジェクトの中に、さらにtrunkやbranchesなどがある、例えば、<br />
http://example.com/svn/projectA<br />
/trunk<br />
/branches<br />
/tags<br />
http://example.com/svn/projectX<br />
/trunk<br />
/branches<br />
/tags<br />
みたいな感じのとき、Redmineのプロジェクト、もしくはリポジトリの設定が分かれていて、リポジトリの設定には、<br />
http://example.com/svn/projectX<br />
と指定すると思われます。<br />
こういった場合にprojectX部分は邪魔なので、それを省く設定を入れました。<br />
複数リポジトリを設定する場合を想定して、カンマ区切りで複数指定できるようにしました。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://1.bp.blogspot.com/-XQgjKcpl0lg/W1RDSNIVSaI/AAAAAAAAjn0/7omIIfA8T1AadaEHv2vcDtW07JixjIwHACLcBGAs/s1600/settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="286" data-original-width="1043" height="172" src="https://1.bp.blogspot.com/-XQgjKcpl0lg/W1RDSNIVSaI/AAAAAAAAjn0/7omIIfA8T1AadaEHv2vcDtW07JixjIwHACLcBGAs/s640/settings.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
とりあえずこれで自分としては用が足りるとこまでいったかなという感じ。</div>
<br />
<br />
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-88128868796467541162018-04-22T21:10:00.001+09:002018-04-22T21:10:06.179+09:00【テスト設計】VSTePのファーストステップ 〜 新潟出張版 〜 に参加してきました<a href="http://www.jasst.jp/symposium/jasst18niigata.html">JaSST'18 Niigata</a>の翌日に行われた、<br />
<a href="https://swanii.connpass.com/event/78903/">【テスト設計】VSTePのファーストステップ 〜 新潟出張版 〜</a><br />
に参加してきました。<br />
JaSST'17 Tokyo のセッション「VSTePのファーストステップ 〜 JaSST'16東北出張おかわり会 〜」にて講演された、 JaSST東北実行委員のお二方を講師に迎えて行われました。<br />
お二方、主催すわにいの<a href="https://twitter.com/kasacchiful">@kasacchiful</a>さん、お疲れ様でした&ありがとうございました!<br />
<br />
内容はワークが中心で、ワークに当たって必要なVSTePのことを、はじめに座学でというものでした。座学は大きく、テスト観点図とテストコンテナについてでした。<br />
具体的な図などは、<a href="https://swanii.connpass.com/event/78903/">connpass</a>に記載のある参考してもらえればと思います。<br />
<br />
<div>
テスト観点図</div>
<ul>
<li>テスト観点は「テストの意図」。</li>
<li><b>チームで納得のいく</b>観点、観点のまとめを行う。</li>
<li>チームで話し合う中での<b>「違和感」を大事</b>にする。<br />
あのとき、なんかひっかかってたんだよな〜、というところでバグが出て後悔しないようにする。</li>
<li>仕様書に書かれていることがすべてではない。</li>
<li>チームの経験なども含めて観点を出していく。</li>
<li>トップダウン、ボトムアップ、ズームイン、ズームアウトを繰り返し考えてみる。</li>
<li>図にしたら、左右、上下の粒度を見ていく。<br />
粒度があっていない箇所から抜け漏れが見えてくることが多い。</li>
</ul>
<div>
テストコンテナ</div>
<div>
<ul>
<li>テストを実施することを考えた、観点のグルーピングを行う。</li>
<li>左から右へ、時系列にコンテナを並べる。<br />
縦方向は並列に行えるもの。<br />
テストの前後関係、実施順序、同時にできることなどが見える。</li>
<li><b>チームとしてしっくりくる、納得できる括りにすることが大事</b>。</li>
</ul>
</div>
<div>
ワーク</div>
<div>
<ul>
<li>+Lhacaの解凍機能について、テスト観点図、テストコンテナを作成するワーク。</li>
<li>今回は6人のチーム。</li>
<li>それぞれで仕様書をざっとみる。</li>
<li><b>仕様書は見ない</b>ようにして観点をみんなで付箋に書き出していった。<br />
仕様書を見ないことで、<b>仕様書に書いていないこと</b>が出やすくなる。</li>
<li>手を止めずにどんどん進めていくのが重要。</li>
<li>出した付箋をツリー構造に整理していく。<br />
整理する中で新しい観点がでてきたり、構造を変えるために加えたりと、いろいろ話しながら進めました。</li>
<li>観点に出ていくる「言葉」を<b>共通の理解で捉えているか</b>、を確認するのも重要。<br />
チームで同じものを見ていることが重要。バックボーンの違いから、ここがなかなか合わなかった感じがしましたが、擦り合わせて行けたかな。<br />
知っている人たちのチームだからこその思い込みもありそうだな、と思いました。</li>
<li>テスト観点図ができたら、テストコンテナを作成していく。</li>
<li>これをやってからでないと、これができない。<br />
これをしてからこれをすべき、といったところからまとめていった。</li>
<li>実際にテストを行うことをイメージしながら進めると、順序や並列でできるかなどが考えやすいと感じた。</li>
<li>機能が追加された場合などの影響範囲なども、関連する観点から属しているコンテナを抽出することで絞り込みやすい。</li>
</ul>
<div>
<br /></div>
</div>
VSTePを用いると、チームで納得したテスト観点図、テストコンテナができるので、振り返りを通した改善が行いやすくなるとの話でした。<br />
実際のワークを通して、顕在化したバグがどこで漏れていたのか、というあたりが明確になりそうだということ、それがチームの中での共通のものさしで語れそうだということを感じました。<br />
<br />
普段は一人でマインドマップで観点を出していくことが多いため、まずはワークでやったようなことを取りいれながら、徐々に周りを巻き込んで行けたらなあ、とか思いました。<br />
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-20401286898054437392017-12-01T12:26:00.000+09:002017-12-01T12:26:49.641+09:00[Redmine Advent Calendar 2017 1日目] shields.ioでredmine.orgのプラグインレイティングのバッヂを表示する<a href="https://qiita.com/advent-calendar/2017/redmine" target="_blank">Redmine Advent Calendar 2017</a>の1日目です!<br />
<br />
<a href="https://www.redmine.org/">Redmineのオフィシャルサイトであるredmine.org</a>には、開発されているプラグインを確認できる<a href="https://www.redmine.org/plugins">Plugins Directory</a>があります。<br />
<img border="0" data-original-height="297" data-original-width="1335" height="140" src="https://4.bp.blogspot.com/-frEfYuU4zQI/Whq1iwSL7tI/AAAAAAAAh-c/4IUWzfo_kzkxdr66MMWLyyIqsIBsv1CMACLcBGAs/s640/redmineorg-pluginsdictionary.png" width="640" /><br />
<div class="separator" style="clear: both; text-align: left;">
Plugins Directoryにプラグインを登録しておくと、Redmine上から最新バージョンのチェックも行えます(管理画面のCheck for updatesから行えます)。</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<img border="0" data-original-height="216" data-original-width="1031" height="134" src="https://2.bp.blogspot.com/-8IJxgxAoNA4/Wh99d3bGP8I/AAAAAAAAh_k/hKnFtlbFn_Y77Hmu-rfQqDHGy6MOupkJgCLcBGAs/s640/admin-plugins.png" width="640" /></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-HSVh6uVeUHI/Whq3AneMuNI/AAAAAAAAh-o/TPlmB41fNl4wVv55l12SweOimil8rWzDwCLcBGAs/s1600/admin-plugins.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br />
</a></div>
しかし、ソースコードは別のリポジトリに登録してある状態になります。<br />
例えばGitHubにソースを登録しておいた場合、READMEやWiki、Issuesなど、そこだけで足りてしまうのが実際のところです。<br />
検索してGitHubに飛んだら、Plugins Directoryを見ることがない場合も多いと思います。<br />
<br />
そこで何か誘導するものがあれば、Plugins Directoryで他のプラグインに巡り会う機械にもつながるな、ということで、Plugins Directoryのレイティングをバッヂとして表示する仕組みを考えました。<br />
バッヂからPlugins Directoryへリンクしてレイティングしてもらう、というモチベーションでプラグイン開発者の方にも入れてもらいやすいかなと考えています。<br />
<br />
<a href="https://shields.io/">shields.io</a>というサービスが、いろいろなサービスのバッヂを提供しています。<br />
これにredmine.orgのプラグインレイティングが載れば、プラグイン開発者の方がみんなで使えるな、ということで<a href="https://github.com/badges/shields/pull/1247">プルリクエストを出したところ、入れてもらえました</a>。<br />
<br />
以下は<a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter">Redmine XLSX format issue exporter</a>の GitHubにバッヂを入れた例です。<br />
星がでるパターンですが、数字で出すパターンもあります。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<img border="0" data-original-height="328" data-original-width="661" height="197" src="https://1.bp.blogspot.com/-ZQePJj9uCIk/Wh99-G3OxzI/AAAAAAAAh_s/dRD7xBn6JYEN9aYqpAQWhg6U1He9g2Q2ACLcBGAs/s400/pluginrating.png" width="400" /></div>
<br />
READMEには、Markdownで以下のように記載してPlugins Directoryへリンクしています。<br />
<pre>[![Stars](https://img.shields.io/redmine/plugin/stars/redmine_xlsx_format_issue_exporter.svg)](https://www.redmine.org/plugins/redmine_xlsx_format_issue_exporter)
</pre>
SVGのファイル名部分は、プラグインのPlugins DirectoryでのURL末端になります。<br />
<br />
<br />
2日目は<a href="https://qiita.com/y503Unavailable">y503Unavailableさん</a>です!<br />
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-6877939250892327402017-10-28T16:28:00.000+09:002017-10-28T16:28:53.122+09:00Redmine Auto Assign Group Pluginを作りました!<a href="https://github.com/two-pack/redmine_auto_assign_group" target="_blank">Redmine Auto Assign Group Plugin</a>を作りました!<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://4.bp.blogspot.com/-uiH0uJDC9nw/WfQwX33S_ZI/AAAAAAAAhzo/E_VzMQICC0g992U8zLQlizZYMNGKgoatACLcBGAs/s1600/groups_rules_tab_input_rule.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="598" height="105" src="https://4.bp.blogspot.com/-uiH0uJDC9nw/WfQwX33S_ZI/AAAAAAAAhzo/E_VzMQICC0g992U8zLQlizZYMNGKgoatACLcBGAs/s320/groups_rules_tab_input_rule.png" width="320" /></a></div>
<br />
<a href="https://twitter.com/akipii" target="_blank">@akipii</a>さんが既に<a href="http://forza.cocolog-nifty.com/blog/2017/10/redmine_auto_as.html" target="_blank">ブログで取り上げてくださっています</a>。ありがたや!<br />
<span style="font-size: xx-small;">で、ブログ書いてないと気づいた。。。</span><br />
<h3>
きっかけ</h3>
<a href="http://redmine.org/">redmine.org</a>のフォーラムに以下の投稿がありました。<br />
<a href="http://www.redmine.org/boards/3/topics/52985" target="_blank">Plugin to automatically assign new users to groups?</a><br />
<br />
ユーザーの登録時に自動的にグループを設定したいという要求は、結構昔からあったようです。<br />
上の投稿から<a href="http://www.redmine.org/boards/2/topics/30039" target="_blank">参照されているスレッド</a>は2012/04に開始されています。<br />
パッチやプラグインの書き込みがありますが、条件によって別のグループを設定したい、というのが今回の投稿でした。<br />
<br />
ユースケースとして挙げられていた、グループごとでアクセス権限を行なうような運用は、規模が大きかったり複数の組織が絡むようなときに、手間が大幅に削減できそうな感じがしました。<br />
他にも思いつかないようなシーンが隠れてそうだなあとも思い、なんか既にありそうな感じ・・・と思ったんでググってもないから、面白そうだし作るか!ということにしました。<br />
<h3>
使い方</h3>
GitHubに<a href="https://github.com/two-pack/redmine_auto_assign_group" target="_blank">インストール方法</a>と<a href="https://github.com/two-pack/redmine_auto_assign_group/wiki/Usage" target="_blank">簡単な使い方</a>を書きました。<br />
グループの設定画面から、グループごとに正規表現でルールを設定できます。<br />
ユーザーが追加された際に、ルールに合致するとそのグループに追加されます。<br />
<h3>
今後の方向性</h3>
とりあえず、正規表現のチェック機能が必要と思っています。<br />
あとは、グループ横断でのルール一覧もあるといいかな、と思ったり、いらないんじゃないかな、と思ったり。<br />
作ったばかりなので、フィードバックを頂いたら考えていこうかなあと思います。<br />
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-57056196338604013702017-09-12T07:35:00.001+09:002017-09-12T07:35:31.233+09:00RedmineプラグインでMroongaを使うときのテスト<a href="https://github.com/okkez/redmine_full_text_search">Full text search plugin</a>と<a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter">Redmine XLSX format issue exporter</a>が競合した話。<br />
パッチのロード順でチケットが表示(issues#show)できなった。<br />
パッチを提示してもらい、パッチを適用する位置を変更して対処した。<br />
https://github.com/two-pack/redmine_xlsx_format_issue_exporter/issues/50<br />
<br />
ここからが本題。<br />
いつも開発環境はsqlite3でやっているが、Full text search pluginがMroongaを使用するので、<a href="https://redmine.tokyo/projects/unofficialcooking">Unofficial Redmine CookingのRedmine AnsiblePlaybook Unofficial Cooking Edition(闇鍋版)</a>を使用した。<br />
すると、<b>rake redmine:plugins:test</b>でRedmine XLSX format issue exporterのテストを実行すると以下のようなエラーが出た。<br />
<pre>Mysql2::Error: The used table type doesn't support FULLTEXT indexes: CREATE fulltext INDEX `index_issue_contents_on_contents`
</pre><br />
調べて見るとdb/schema.rbにテーブル作成時のオプション指定が入らないことが原因。<br />
プラグインでは以下のようなmigrateが書かれている。<br />
<pre class="brush:bash;">create_table :issue_contents, options: "ENGINE=Mroonga" do |t|
t.integer :project_id
t.integer :issue_id, unique: true, null: false
t.string :subject
t.text :contents, limit: 16.megabytes
t.integer :status_id
t.boolean :is_private
end
</pre>対してschema.rbは以下のような感じ。<br />
<pre class="brush:bash;">create_table "issue_contents", force: :cascade do |t|
t.integer "project_id", limit: 4
t.integer "issue_id", limit: 4, null: false
t.string "subject", limit: 255
t.text "contents", limit: 4294967295
t.integer "status_id", limit: 4
t.boolean "is_private"
end
add_index "issue_contents", ["contents"], name: "index_issue_contents_on_contee
nts", type: :fulltext
</pre><br />
rakeでテストを実行するの際に、db:test:prepareで一度テーブルが削除されてから、schema.rbを元に作成し直す。<br />
その際に、schema.rbにはENGINEがMroongaではなくInnoDBになってしまうので、FULLTEXTのインデックスが作れない。<br />
<br />
結局、db/tasks/redmine.rakeを書き換えた上で、db:drop -> db:create -> db:migrate -> redmine:plugins:test の順で実行した。<br />
config/application.rbで<b>config.active_record.schema_format = :sql</b>とするとSQLに書きだされるため大丈夫というのも検索しているとあったが、db/structure.sqlにplugin分が書き込まれてないため、rake taskではテーブルがないとエラーになってだめだった。<br />
<br />
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-45045472462224503302017-06-18T23:04:00.000+09:002017-06-18T23:04:03.143+09:00長岡IT開発者勉強会(NDS) 第52回勉強会に参加してきました #nds52長岡IT開発者勉強会(NDS) 第52回勉強会に参加してきました。<br />
<a href="http://nagaoka.techtalk.jp/no52">http://nagaoka.techtalk.jp/no52</a><br />
Togetterでまとめてくださっています。<br />
<a href="https://togetter.com/li/1120966">https://togetter.com/li/1120966</a><br />
<br />
今回のテーマは「初心者むけ」でした。<br />
初心者とは・・・という哲学的な内容で非常に勉強になりましたw<br />
メモを見ながら雑感です。へえと思ってばかりで何年やっても初心者だな、俺。。。<br />
<br />
<h2>「はじめてのC#プログラミング」 ailightさん</h2><ul><li>歴史的なあれ。N88BASIC、Quick C、Etc.... とても懐かしかった。</li>
<li>caseのbreak漏れでコンパイルエラーとか、へえと思った。<br />
機械、規約がうまく問題を解決してくれるのはうれしい。</li>
<li>「分岐が複雑の始まりであることを理解する」、「ループは前処理と後処理がセットでループ」とか、その通りだなと思いつつ、普段から意識できているかというと怪しいと思った。。。</li>
</ul><br />
<h2>「なんてかんたんなJavaEE」 civicさん</h2><ul><li>Full Profile / Web Profile / Micro Profile<br />
薄いという選択肢があるのはいい。</li>
</ul><br />
<h2>「文字コードとプログラミング(仮)」 gonchan93さん</h2><ul><li>「UNICODEを使え」、もうこれだね!w</li>
<li>JavaのStringがメモリ節約の方向にという話は、へえと思った。<br />
この辺の話。http://openjdk.java.net/jeps/254</li>
</ul><br />
<h2>「Netcatを使おう」 hayajoさん</h2><ul><li>telnetみたいなのか、と思ったらそれどころではなかった。すごいコマンドがあるもんだ!</li>
</ul><br />
<h2>「怖くないし役に立つ設計原則の話」 neko_gata_sさん</h2><ul><li>DRY原則おじさん。いるわー、おれだわー、こぴぺするなーいってるわーorz</li>
<li>「設計原則同士は関連している」というところに集約されていると思った。おまけのデザパタも含めて。話を聞くとうんうん、と思うけど、こうやって筋立てて話をできることや反例の出せることは、本当にすごいと思う。</li>
<li>硬い、柔らかい、のあたりが、理屈はわかっても初心者には判断が難しいところだと思う。</li>
<li>DRYにしないと!と言って見たり、こういう時は重複してもさ、とかいうことは確かにあるが、腑に落ちるように説明するのが難しいところ。</li>
</ul><br />
<h2>「はじめてのソフトウェアテスト(仮)」 kasacchifulさん</h2><ul><li>工程や「バグ」など用語を揃えておくのは本当に大事。</li>
<li>「テストが上手くなると設計が上手くなる」は、実感としてそう思う。<br />
違う視点、観点が入るというところなんだろうけど、そもそも作るべきもの、品質を捉え直すタイミング、意識ができるからかなと思う。</li>
</ul><br />
<h2>「今日から使えるCSSパターン」 Watanabeさん</h2><ul><li>Adobe Museで生成されるCSSは笑ったw</li>
<li>OOCSS、BEM(Block Element Modifier)は初めて聞いた。</li>
<li>全体を貫く「設計方針」が必要という話も含めて、実践的なアプローチをされていて、すごいと思った。</li>
</ul><br />
<h2>「はじめての修羅場」 hiro_ishibashiさん</h2><ul><li>すごく良い話だった。</li>
<li>発表にあったようなことを意識もしないようなPMも山ほどいる。メンバーは辛みしかない。</li>
<li>なにもマジな修羅場でなくても、修羅場予備軍でのカイゼンポイントばかりだと思った。</li>
<li>「犯人にまかせた、放置したマネジメント層の問題」。これ。本当にこれ。</li>
</ul><br />
<h2>「フリーランスの始め方(初心者向け)」 nemuzukaさん</h2><ul><li>税金とか普段は意識しないから、へえと思った。</li>
</ul><br />
<h2>「「新人研修の作り方」のその後」 masaru_b_clさん</h2><ul><li>どんどん改善されていくことがすばらしい。</li>
<li>継続していることもすばらしい。</li>
<li>外部に公開していることも本当にすばらしい!</li>
</ul><br />
<h2>「インターネットの契約から開通まで」 kam1nchuさん</h2><ul><li>ネット引くのって、すげーことなんだなと思った。<br />
こんなことかんがえたことなかったw</li>
<li>ひかり電話も使ってあげて欲しいと思ったw</li>
</ul><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-70622262798971560772017-05-25T00:13:00.002+09:002017-05-25T00:13:59.434+09:00RedmineのテストFixturesを手動テスト用に投入するRedmineのテストFixturesを手動テスト用に投入するのに以下のようなスクリプトを作成しました。<br />
https://github.com/jbbarth/redmine-scripts<br />
を参考にしました。<br />
<br />
<pre class="brush:bash;">#!/bin/bash
export RAILS_ENV=test
test -e test/.fixtures.core || cp -a test/fixtures test/.fixtures.core
rm -rf test/fixtures
mkdir test/fixtures
cp -i test/.fixtures.core/*yml test/fixtures/
cp -i plugins/*/test/fixtures/*yml test/fixtures/
cp -i plugins/*/spec/fixtures/*yml test/fixtures/
bundle exec rake db:drop db:create db:migrate redmine:plugins db:schema:dump db:fixtures:load
cp -f db/test.sqlite3 db/test.template.sqlite3
</pre><br />
上記を実行してから、<br />
<pre class="brush:bash;">$ RAILS_ENV=test ruby bin/rails server
</pre>で起動すると、Fixturesに含まれているeCookbookなどのプロジェクトが使えます。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-fTHDczVM2gE/WSWjCLcNoOI/AAAAAAAAg6A/8JeVdOhvfvU_DNp9RTWh5rpSJLDjVEhsgCLcB/s1600/screenshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-fTHDczVM2gE/WSWjCLcNoOI/AAAAAAAAg6A/8JeVdOhvfvU_DNp9RTWh5rpSJLDjVEhsgCLcB/s320/screenshot.png" width="320" height="117" data-original-width="1376" data-original-height="501" /></a></div>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-65359172496171899522017-05-21T23:41:00.001+09:002017-05-22T00:06:40.856+09:00Travis-CIで行っているRedmineプラグイン用テストをローカルで行う<a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter">Redmine XLSX format issue exporter</a>のCIはTravis-CIを使わせてもらっています。<br />
<a href="https://github.com/alexbevi/redmine_plugins_travis-ci">Travis Integration for Redmine Plugins</a>を使うとRubyとRedmineのバージョンの組み合わせなども結構簡単に環境を作れます。<br />
ただGitHubへのPushがトリガーなのでローカルでもできると確認とかできていいかな、と思って、Travis-CI環境をローカルでというのをやってみました。<br />
結論から言うと、Pushしちゃう方が早い、と言う感じでした。。。<br />
<br />
<h3>
まずは公式</h3>
<a href="https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image">Troubleshooting Locally in a Docker Image</a>で、Dockerで提供されているイメージと.travis.ymlからCI用のシェルスクリプトを出力する<a href="https://github.com/travis-ci/travis-build">travis-build</a>のインストールについて書かれています。<br />
最後の最後で手動で依存関係解決しCIコマンド実行してね、で終わってて詰まりました。<br />
<br />
<h3>
実際にやった手順</h3>
<h4>
環境</h4>
<ul>
<li>macOS Sierra 10.12.4</li>
<li>Docker version 17.03.1-ce, build c6d412e</li>
</ul>
<h4>
手順</h4>
<b><u>1. Dockerイメージを起動してログインする</u></b><br />
<pre class="brush:bash;">~ $ docker pull travisci/ci-garnet:packer-1478744932
packer-1478744932: Pulling from travisci/ci-garnet
Digest: sha256:9380acbb65ed1ae6e5a0b545616f2f4a9f8d6855c264a45924dd52d3ff0589f5
Status: Image is up to date for travisci/ci-garnet:packer-1478744932
~ $ docker run --name travis-redmine-ci --rm -dit travisci/ci-garnet:packer-1478744932 /sbin/init
<snip>
~ $ docker exec -it travis-redmine-ci bash -l
root@foo:/# su - travis
travis@bar:~$
</pre>
<br />
<i><u>参考ページ</u></i><br />
<a href="https://docs.docker.com/engine/reference/commandline/run/">https://docs.docker.com/engine/reference/commandline/run/</a><br />
<a href="http://docs.docker.jp/engine/reference/run.html">http://docs.docker.jp/engine/reference/run.html</a><br />
<a href="https://docs.docker.com/engine/reference/commandline/exec">https://docs.docker.com/engine/reference/commandline/exec</a><br />
<br />
<b><u>2. Travis-CI CLIをインストールする</u></b><br />
<pre class="brush:bash;">travis@bar:~$ gem install travis
<snip>
travis@bar:~$ git clone --depth=50 --branch=master https://github.com/travis-ci/travis-build.git
<snip>
travis@cc01d74d8710:~$ travis
Shell completion not installed. Would you like to install it now? |y|
<snip>
travis@bar:~$ cd travis-build
travis@bar:~$ ln -s `pwd` ~/.travis/travis-build
travis@bar:~$ bundle install --gemfile ~/.travis/travis-build/Gemfile
<snip>
travis@bar:~$
</pre>
<br />
<div>
<i><u>参考ページ</u></i></div>
<a href="https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image">https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image</a><br />
<a href="https://github.com/travis-ci/travis.rb">https://github.com/travis-ci/travis.rb</a><br />
<br />
<b><u>3. .travis.ymlからCI用のスクリプトを生成する</u></b><br />
ここでは、Redmine XLSX issue exporterのリポジトリをクローンしています。<br />
リポジトリのルートに.travis.ymlがあります。<br />
<pre class="brush:bash;">travis@bar:~$ cd ~/builds
travis@bar:~$ git clone https://github.com/two-pack/redmine_xlsx_format_issue_exporter.git
travis@bar:~$ cd redmine_xlsx_format_issue_exporter
travis@bar:~$ travis compile 1.1 > ci.sh
</pre>
<br />
<b><u>4. スクリプトを修正する(その1)</u></b><br />
Dockerの制約でスクリプト内で行っている/etc/hostsの変更ができなくなっています。<br />
このため、無理やりですが参考ページを参考に、スクリプトを変更して対処します。<br />
<i><br />
</i> <i>変更前</i><br />
<div>
<pre class="brush:bash;">sudo sed -e 's/^\(127\.0\.0\.1.*\)$/\1 '`hostname`'/' -i'.bak' /etc/hosts
test -f ~/.m2/settings.xml && sed -i.bak -e 's|https://nexus.codehaus.org/snapshots/|https://oss.sonatype.org/content/repositories/codehaus-snapshots/|g' ~/.m2/settings.xml
sudo sed -e 's/^\([0-9a-f:]\+\) localhost/\1/' -i'.bak' /etc/hosts
</pre>
<div>
<br /></div>
<div>
変更後</div>
<pre class="brush:bash;">cp /etc/hosts ./hosts.new
sudo sed -e 's/^\(127\.0\.0\.1.*\)$/\1 '`hostname`'/' -i'.bak' ./hosts.new
test -f ~/.m2/settings.xml && sed -i.bak -e 's|https://nexus.codehaus.org/snapshots/|https://oss.sonatype.org/content/repositories/codehaus-snapshots/|g' ~/.m2/settings.xml
sudo sed -e 's/^\([0-9a-f:]\+\) localhost/\1/' -i'.bak' ./hosts.new
cp -f ./hosts.new /etc/hosts
</pre>
<i><u><br />
</u></i></div>
<div>
<i><u>参考ページ</u></i></div>
<a href="http://blog.jonathanargentiero.com/docker-sed-cannot-rename-etcsedl8ysxl-device-or-resource-busy/">http://blog.jonathanargentiero.com/docker-sed-cannot-rename-etcsedl8ysxl-device-or-resource-busy/</a><br />
<br />
<u style="font-weight: bold;">5</u><u style="font-weight: bold;">. スクリプトを修正する(その2</u><u style="font-weight: bold;">)</u><br />
<a href="https://github.com/travis-ci/travis-build#use-as-addon-for-cli">travis-buildのページに書いてあります</a>が、.travis.ymlに書かれているenvやmatrixはスクリプト生成時に反映されません。このため、スクリプトでいくつかの修正が必要です。<br />
赤字部分が該当箇所で.travis.ymlの定義に該当します。<br />
<br />
<ul>
<li>使用するRubyバージョンを書き換え<br />
<pre class="brush:bash;">travis_cmd rvm\ use\ <span style="color: red;">2.0.0</span>\ --install\ --binary\ --fuzzy --assert --echo --timing</pre>
</li>
<li>使用するRedmineバージョンの書き換え<br />
<pre class="brush:bash;">travis_cmd export\ REDMINE_VERSION\=<span style="color: red;">2.5.2</span> --echo</pre>
</li>
<li>対象ブランチの指定<br />
<pre class="brush:bash;">travis_cmd git\ clone\ --depth\=50\ <span style="color: red;">--branch\=\'\'\</span> https://github.com/two-pack/redmine_xlsx_format_issue_exporter.git\ two-pack/redmine_xlsx_format_issue_exporter --assert --echo --retry --timing</pre>
</li>
</ul>
<br />
<u style="font-weight: bold;">6. スクリプトを実行する</u><br />
<div>
<pre class="brush:bash;">travis@bar:~$ bash ci.sh</pre>
</div>
<div>
<br /></div>
<div>
<h3>
まとめ</h3>
</div>
<div>
.travis.ymlのmatrixやenvの設定を活かしたスクリプトをうまく生成できないため、手間がかかってしまいます。</div>
<div>
Travis-CI上でのみ失敗するとかでなければ、大人しくブランチにプッシュしてクラウドで回してもらう方が良さそうです。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
</blockquote>
</div>
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-20169885691141018662017-05-01T22:28:00.000+09:002017-05-01T22:28:52.899+09:00JaSST'17 Niigataの振り返り 2017/04/28(金)に、<b><a href="http://jasst.jp/symposium/jasst17niigata.html">「JaSST'17 Niigata ソフトウェアテストシンポジウム 2017 新潟」</a></b>行われました。<br />
テーマは<b>「ユーザビリティ / UX」</b>。私は実行委員なのにテーマが決まってから本を読む、という有様でしたので、非常に勉強になりました。<br />
そのうち資料の公開もあると思いますが、現時点での振り返りです。<br />
<h3><br />
</h3><h3>基調講演</h3>基調講演は、利用品質ラボの樽本 徹也さんから<br />
<b>「ユーザエクスペリエンスの要素とプロセス——UX/UCD概論」</b><br />
でお話頂きました。<br />
UXとは?なぜUXなのか?そしてUCDと、概論として非常に分かりやすい形でのお話でした。著書の「ユーザビリティエンジニアリング (第2版)」を読んでから臨みましたが、更に理解が深まった気がしました。<br />
心にとまった幾つかピックアップ。<br />
<ul><li>効果、効率、満足度</li>
<li>Experienceが儲かる</li>
<li>UXの要素 表層、骨格、構造、要件、戦略<br />
(ジェス・ジェームス・ギャレットの「The Elements of User Experience」)</li>
</ul><br />
<h3>事例紹介</h3><div>事例紹介として、日立ソリューションズの柳生 大介さんから、</div><div><b>「機能中心から人間中心へ ~日立ソリューションズの取り組み~」</b></div><div>でお話頂きました。</div><div>どんなきっかけでUXへの活動を始めたのかから、具体的な取り組みと非常に興味深かったです。</div><div>手法の紹介も具体的で実際のイメージがつかみやすかったのではないかと思います。</div><div>心にとまった幾つかピックアップ。</div><div><ul><li>共通の物差しとしてのペルソナ</li>
<li>ブレストでのアンチプロブレム</li>
<li>ユーザーに伝わるのか、まずは言葉を見直す</li>
</ul><div><br />
</div></div><div><h3>情報交換会</h3>JaSST Niigataでは毎回、本会後に情報交換会が行われています。<br />
お茶やお菓子とともに講演者の方々や参加者の方々と語り、交流を深めるという会です。<br />
新潟だけではなく各地から参加してくださ方もおられ、いい刺激になりました。<br />
そして、樽本さんからは「ユーザビリティエンジニアリング (第2版)」にサインを頂きました!<br />
<br />
<h3>というわけで</h3>ぼんやりな感じの振り返りになりましたが、UXを知る、というところからと考えていた私としては、得るものが多い場となりました。<br />
このあとも、<a href="http://jasst.jp/attribute.html">JaSSTは東北、関西、北海道と続いていきます</a>ので、足を運んでみてはいかがでしょうか?<br />
<br />
</div><div><br />
</div><br />
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=tf_til&t=twopack-22&m=amazon&o=9&p=8&l=as1&IS1=1&detail=1&asins=4274214834&linkId=9c08cd10bd21db7e51484c57c3830334&bc1=000000<1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr"><br />
</iframe>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-7462404462071115922015-01-27T21:19:00.000+09:002015-01-27T21:20:18.098+09:00Windows 10 Technical PreviewをBuild 9926にアップデート新しいビルドがでました。ISOは<a href="http://windows.microsoft.com/ja-jp/windows/preview-iso">こちら</a>から。<br />
前のビルドからもアップデートできるようなのでやってみました。<br />
<br />
まずはビルド番号の確認。Build 9841です。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-hUa79qHvvJs/VMdAhZT6r8I/AAAAAAAAY_I/Gg_v325PqqY/s1600/build9841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hUa79qHvvJs/VMdAhZT6r8I/AAAAAAAAY_I/Gg_v325PqqY/s1600/build9841.png" height="179" width="320" /></a></div>
<br />
<b>Update and recovery</b>の<b>Preview Builds</b>からアップデートします。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-WcwmAgBb21A/VMdA3AzW9gI/AAAAAAAAY_Q/AN-ax2w_0Oo/s1600/update_and_recovery.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-WcwmAgBb21A/VMdA3AzW9gI/AAAAAAAAY_Q/AN-ax2w_0Oo/s1600/update_and_recovery.png" height="179" width="320" /></a></div>
<br />
ポチッとするとダウンロード開始。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-x5-sG5OBuFY/VMdBHwfsCnI/AAAAAAAAY_Y/OzgU65BmsMU/s1600/downloading.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-x5-sG5OBuFY/VMdBHwfsCnI/AAAAAAAAY_Y/OzgU65BmsMU/s1600/downloading.png" height="179" width="320" /></a></div>
<br />
ダウンロード完了!<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://1.bp.blogspot.com/-ZuRNPptnqbc/VMdFOkukL2I/AAAAAAAAY_k/cCmK8KPYAY4/s1600/downloaded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-ZuRNPptnqbc/VMdFOkukL2I/AAAAAAAAY_k/cCmK8KPYAY4/s1600/downloaded.png" height="179" width="320" /></a></div>
<br />
インストール中・・・・<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-k5_NnncxBgo/VMdFomqlpUI/AAAAAAAAY_s/9kZ-qKAvQWU/s1600/installing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-k5_NnncxBgo/VMdFomqlpUI/AAAAAAAAY_s/9kZ-qKAvQWU/s1600/installing.png" height="179" width="320" /></a></div>
<br />
完了して再起動の要求でOK。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-veHGsiDq-qM/VMdQCu6bP3I/AAAAAAAAY_8/Zwm-m_RkQM8/s1600/needs_to_restart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-veHGsiDq-qM/VMdQCu6bP3I/AAAAAAAAY_8/Zwm-m_RkQM8/s1600/needs_to_restart.png" height="179" width="320" /></a></div>
<br />
再起動中・・・<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-kJx1NtOHx-M/VMdQX26_3xI/AAAAAAAAZAE/BIxcJ0uUISg/s1600/restarting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-kJx1NtOHx-M/VMdQX26_3xI/AAAAAAAAZAE/BIxcJ0uUISg/s1600/restarting.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
再起動かかって設定中。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://2.bp.blogspot.com/-3NbS12o7Cjs/VMdQxJ61eeI/AAAAAAAAZAU/x-9QYgBzXW8/s1600/restarting3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-3NbS12o7Cjs/VMdQxJ61eeI/AAAAAAAAZAU/x-9QYgBzXW8/s1600/restarting3.png" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
再起動かかって、あともうちょっと。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-yc501rUJaAI/VMd-RhYZh-I/AAAAAAAAZAk/iam2QKS0Ekc/s1600/setting_up_a_few_more_things.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-yc501rUJaAI/VMd-RhYZh-I/AAAAAAAAZAk/iam2QKS0Ekc/s1600/setting_up_a_few_more_things.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
完了!ログインしようとしたらキーボードの配列がUS配列になってました。</div>
<div class="separator" style="clear: both; text-align: left;">
アップデート前は日本語配列だったんだけど。。。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-l9lYj6qeKFg/VMd_Zu8ywwI/AAAAAAAAZAs/fyVkD0HW1ow/s1600/boot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-l9lYj6qeKFg/VMd_Zu8ywwI/AAAAAAAAZAs/fyVkD0HW1ow/s1600/boot.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ログインしたらアプリのインストール中。もうちょい。。。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://2.bp.blogspot.com/-XQUwC283FS4/VMd_xnG_XjI/AAAAAAAAZA0/sOTgUnQXREE/s1600/stores.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-XQUwC283FS4/VMd_xnG_XjI/AAAAAAAAZA0/sOTgUnQXREE/s1600/stores.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
そして完了!Build 9926!</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://1.bp.blogspot.com/-VbtWMfFLEjo/VMeBnGI2NLI/AAAAAAAAZBA/lphtksftUJ4/s1600/logined.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-VbtWMfFLEjo/VMeBnGI2NLI/AAAAAAAAZBA/lphtksftUJ4/s1600/logined.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ぱっとみ、スタートメニューの感じが変わったのとタスクバーに検索ボックスがついてます。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://2.bp.blogspot.com/-xcbmW1VSBmE/VMeCIONBmDI/AAAAAAAAZBI/5bvZ4xsPyik/s1600/startmenu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-xcbmW1VSBmE/VMeCIONBmDI/AAAAAAAAZBI/5bvZ4xsPyik/s1600/startmenu.png" height="179" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-73348751316081877902015-01-08T14:59:00.001+09:002015-01-08T14:59:21.732+09:00YosemiteのApacheでユーザーディレクトリを見ると403になるいろんなサイトを見て回ってやっと解消できたのでメモ。<br />
<ul><li><a href="http://nantekottai.com/2014/10/26/os-x-10-10-sites/">OS X 10.10 YosemiteでApache(ウェブ共有/サイト)を使う方法</a></li>
<li><a href="http://hkitago.com/2014/09/yosemite%E3%81%AEapache%E8%A8%AD%E5%AE%9A/">YosemiteのApache設定</a></li>
<li><a href="http://coolestguidesontheplanet.com/forbidden-403-you-dont-have-permission-to-access-username-on-this-server/">OS X 10.10 / 10.9 Sites Folder Sharing Not Working</a></li>
</ul><br />
やりたいことは、<i>http://localhost/~username/index.html</i>とかが見れることです。<br />
<i>http://localhost/</i>は<b>It works!</b>なのに403がでていました。<br />
<ol><li><b>モジュールの有効化</b><br />
/etc/apache2/httpd.confを編集して、コメントアウトされている以下のモジュール有効化する。<br />
<i><pre class="prettyprint">LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so</i>
</pre></li>
<li><b>ユーザーディレクトリ用の設定ファイルを読み込む設定を有効化</b><br />
/etc/apache2/httpd.confを編集して、コメントアウトされている以下を有効化する。<br />
<i><pre class="prettyprint">Include /private/etc/apache2/extra/httpd-userdir.conf</i></pre>さらに、/etc/apache2/extra/httpd-userdir.confを編集してコメントアウトされている以下を有効化する。<br />
<pre class="prettyprint"><i>Include /private/etc/apache2/users/*.conf</i></pre></li>
<li><b>ユーザーディレクトリの作成</b><br />
ホームディレクトリにSitesディレクトリを作成します。ここにファイルを設置します。<br />
<pre class="prettyprint">mkdir ~/Sites</pre></li>
<li><b>ユーザごとの設定ファイルを作成</b><br />
/etc/apache2/users/username.confを以下の内容で作成する。<br />
<pre class="prettyprint"><i> <Directory>
AllowOverride All
Options Indexes MultiViews
Options +FollowSymLinks
Require all granted
</Directory></i></pre></li>
<li><b>Apacheを再起動</b><br />
<pre class="prettyprint">sudo apachectl restart</pre></li>
</ol>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-40591825760846307202014-08-07T11:50:00.000+09:002014-08-07T11:50:23.971+09:00Arduino Ethernet Shieldを使ってみたArduinoのEhternetシールドを買ったので使ってみました。以下で安いものがあったので購入しましたが、ピンががつんと曲がった状態で届きました。動いたので良かったですが。。。<br />
<a href="http://www.miniinthebox.com/ja/ethernet-w5100-shield-for-arduino-support-micro-sd-card_p590372.html">(Arduinoのための)用のイーサネットW5100シールド(マイクロSDカードをサポート) </a><br />
<div class="separator" style="clear: both;"><a href="http://2.bp.blogspot.com/-tS7WjDvx1Kc/U-LmlH0dByI/AAAAAAAAXqM/zFI4uwDS3ss/s1600/20140807_093429.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-tS7WjDvx1Kc/U-LmlH0dByI/AAAAAAAAXqM/zFI4uwDS3ss/s1600/20140807_093429.jpg" height="240" width="320" /></a></div>Arduino本体と重ねるとこんな感じ。<br />
<div class="separator" style="clear: both;"><a href="http://4.bp.blogspot.com/-9-Q_RaCDA8c/U-LmoDQt9uI/AAAAAAAAXqU/977NRw6XOQM/s1600/20140807_093619.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-9-Q_RaCDA8c/U-LmoDQt9uI/AAAAAAAAXqU/977NRw6XOQM/s1600/20140807_093619.jpg" height="240" width="320" /></a></div><br />
<h2>やってみたこと</h2>Ethernetシールド用のライブラリが用意されています。<br />
<a href="http://arduino.cc/en/Reference/Ethernet">Ethernet library</a><br />
このライブラリを使って、Webサーバーから情報を取得してLEDをON/OFFすることにします。<br />
<br />
本当は、Travis CIの結果をLEDで表示する、をしたかったのですが、調べてみるとArduinoの要領だとHTTPSでの通信は難しいとのことで断念。。。<br />
<br />
<h2>実装</h2>Webサーバー側には以下のようなCGIを置きました。<b>led</b>の値を0にするとLEDが消えて、1にすると点くようにします。<br />
<pre class="prettyprint">#!/usr/bin/ruby
print "Content-Type: text/html\n"
print "\n"
print "led:1\n"
</pre><br />
スケッチは<a href="https://github.com/two-pack/ArduinoExample/commit/208e7d4468885a33652fc8f0573c5a03507426aa">こちら</a>。<br />
ライブラリにサンプルとして着いている<a href="http://arduino.cc/en/Tutorial/WebClient">WebClient</a>を参考にしています。<br />
<br />
LEDのピンは7番を使っています。Ethernetシールドが4、10〜13のピンを使っているためです。<br />
こんな感じになりました、、、といっても普通にLEDつけてるのと変わりません。<br />
<div class="separator" style="clear: both;"><a href="http://2.bp.blogspot.com/-Y8w3MdlMC5Q/U-Lo7ZgqUAI/AAAAAAAAXqg/JQ1ubnz4f1I/s1600/20140807_113334.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-Y8w3MdlMC5Q/U-Lo7ZgqUAI/AAAAAAAAXqg/JQ1ubnz4f1I/s1600/20140807_113334.jpg" height="240" width="320" /></a></div><br />
<br />
シールドを載せてあとはライブラリを使うだけなので、簡単にできますね。ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-65086011188470420132014-07-31T09:43:00.000+09:002014-07-31T09:43:02.740+09:00リリース:Redmine XLSX format issue exporter 0.1.0Redmineのチケット一覧を<b>XLSX形式</b>で出力するプラグイン、<br />
<pre><b><a href="https://github.com/two-pack/redmine_xlsx_format_issue_exporter">Redmine XLSX format issue exporter</a></b></pre>を作りました。<a href="http://www.redmine.org/plugins/redmine_xlsx_format_issue_exporter">Plugins Directoryにも登録</a>しました。<br />
<br />
<h2>機能</h2>Redmineにはチケット一覧の右下からCSVやPDFで出力する機能が標準であります。そのXLSX版です。プラグインをインストールすると、右下の赤丸部分のようにリンクが追加されます。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-xCptN6LW_f4/U9mH7ILg9DI/AAAAAAAAXnk/PCufmWS5Wx4/s1600/issues_page.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-xCptN6LW_f4/U9mH7ILg9DI/AAAAAAAAXnk/PCufmWS5Wx4/s1600/issues_page.png" height="60" width="320" /></a></div><br />
リンクを押すとCSVエクスポートと同じように、オプションで選択している項目を出力するか、全ての項目を出力するかを選択するダイアログがでます。また、チケットの説明をつけるかも選択できます。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-kdpvM_d6dgo/U9mI7m8VxaI/AAAAAAAAXns/TIYwFHIDC4A/s1600/dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-kdpvM_d6dgo/U9mI7m8VxaI/AAAAAAAAXns/TIYwFHIDC4A/s1600/dialog.png" height="168" width="320" /></a></div><br />
あとはエクスポートボタンを押すダウンロードがはじまります。XLSXの中身は、CSVダウンロードと同等のものにある程度の書式設定(ヘッダの色、ヘッダの固定、折り返し、列の幅)がされています。<br />
<br />
<h2>Redmine XLS Exportとの違い</h2>Excel形式でエクスポートするプラグインとして<a href="https://github.com/two-pack/redmine_xls_export">Redmine XLS Export</a>もあります。こちらには、XLS形式でのチケット一覧の出力以外に、履歴や添付ファイルを出力する機能などもあります。Redmine XLSX format issue exporterでは、シンプルにRedmine標準のCSVエクスポートのXLSX版という位置づけにしたいと考えています。<br />
<br />
Plugins Directoryに登録したついでに<a href="https://github.com/two-pack/redmine_xls_export">Redmine XLS Export</a>の<a href="http://www.redmine.org/plugins/redmine_xls_export">Plugins Directoryを見たら</a>、すでにオフィシャルには3年以上更新されていません。リポジトリもなくZIPで公開されているのみという状態だったので、自分でZIPからGithubに遷してメンテしているんですよね。もう更新しないのかなあ。。。<br />
<br />
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-79488109486610906282014-07-23T19:18:00.001+09:002014-07-26T09:06:28.543+09:00RedmineプラグインのCI環境を作る1年ぐらい前にNDSでRedmineプラグインのテスト書いてとLTしましたが、幾ばくかのテストを自分で書きました。<br />
テストを書いたので次はCI環境を作りたいと思います。<br />
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/25767272" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="https://www.slideshare.net/twopackas/20130831-25767272" target="_blank" title="Redmineプラグインのテストを書いてくれませんか? #niigatarb">Redmineプラグインのテストを書いてくれませんか? #niigatarb</a> </strong> from <strong><a href="http://www.slideshare.net/twopackas" target="_blank">Tatsuya Saito</a></strong> </div>
<br />
<h2>
Travis Integration for Redmine Plugins</h2>
調べてみたところ、以下を見つけました。<br />
<a href="https://github.com/alexbevi/redmine_plugins_travis-ci">Travis Integration for Redmine Plugins</a><br />
Redmineプラグインのテストをするには、当たり前ですがRedmineが必要になります。なので、CIの環境にRedmineをインストールするところから始めないとなのですが、その辺をTravis CI向けにスクリプト化したものです。<br />
これは便利そうということで、これを使っての環境構築を試してみました。<br />
<br />
追記:上記のリポジトリでRedmineをダウンロードしてくるソースが<a href="https://github.com/edavis10/redmine/">edavis10のところ</a>になっていました。ここもミラーしているようですが、<a href="http://www.redmine.org/boards/1/topics/42747">Redmineのフォーラム</a>でgithubのリポジトリが示されていたので、<a href="https://github.com/two-pack/redmine_plugins_travis-ci/commit/e130f4a69e4efeee1fe1b00ccbe70504f6a9fd23">フォークしてソースに書き換えました</a>。<br />
追記の追記:<a href="https://github.com/alexbevi/redmine_plugins_travis-ci/pull/3">プルリクエスト</a>を出して取り込まれました。<br />
<h2>
手順</h2>
手順は以下のとおりです。Travis CIで対象のリポジトリをCI対象にしている状態とします。<br />
<ol>
<li>Travis Integration for Redmine Pluginsをクローンしてくる。</li>
<li><b>.travis*</b>をプラグインのルートフォルダにコピーする。</li>
<li><b>.travis.yml</b>で定義されている<b>branches</b>を書き換える。クローンしたままだとtestingブランチのみが対象となるため、フックが効かないことがあるかもです。</li>
<li><b>.travis.yml</b>で定義されている<b>env</b>を書き換える。<b>REDMINE_VERSION</b>で指定されたバージョンのRedmineでテストをします。複数指定する場合は、行をコピーしてバージョンを書き換えてください。</li>
<li><b>.travis.yml</b>で定義されている<b>PLUGIN</b>をプラグイン名に書き換える。</li>
<li><b>.travis*</b>をコミットする。コミットがフックされてビルドが開始されます。</li>
</ol>
<h2>
結果</h2>
できた環境は<a href="https://travis-ci.org/two-pack/redmine_xls_export">こちら</a>。テストも成功しました。<br />
<div class="separator" style="clear: both;">
<a href="http://2.bp.blogspot.com/-qKxjw2Mh6pc/U8-Ls5O9xrI/AAAAAAAAXgk/d9ZZAy_N8VA/s1600/result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-qKxjw2Mh6pc/U8-Ls5O9xrI/AAAAAAAAXgk/d9ZZAy_N8VA/s1600/result.png" height="188" width="320" /></a></div>
<b>.travis.yml</b>の<b>rvm</b>と<b>REDMINE_VERSION</b>のマトリックスでビルドが実行されます。<br />
非常に簡単にRedmineプラグインのCI環境を作ることができました。RedmineプラグインのCI環境を作るハードルを下げてくれますね。ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-84675463660687078102014-07-23T11:37:00.000+09:002014-07-23T11:37:18.848+09:00Arduinoで温度センサーを使ってみた<a href="http://www.amazon.co.jp/gp/product/B008PQEWIW/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B008PQEWIW&linkCode=as2&tag=twopack-22">Arduinoエントリーキット</a><img alt="" border="0" src="http://ir-jp.amazon-adsystem.com/e/ir?t=twopack-22&l=as2&o=9&a=B008PQEWIW" height="1" style="border: none !important; margin: 0px !important;" width="1" />に付いてきた最後の部品、温度センサーを使ってみました。<br />
温度センサーはLM35DZです。データシートは<a href="http://akizukidenshi.com/download/ds/ns/LM35DZ.pdf">こちら</a>。<br />
<br />
<h2>配線</h2>回路図は以下のとおり単純なのですが、はまりました。<br />
<div class="separator" style="clear: both;"><a href="http://2.bp.blogspot.com/-9xMmU1ZOU4Q/U88QUf0WJJI/AAAAAAAAXgM/X2RUg82C-Jo/s1600/circuit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-9xMmU1ZOU4Q/U88QUf0WJJI/AAAAAAAAXgM/X2RUg82C-Jo/s1600/circuit.png" height="304" width="320" /></a></div><br />
LM35のGNDと+Vsを逆にしていたため、測定した値がおかしくなりArduino自体が動かなくなってしまいました。。。<br />
データシートのピン配置図をみていたのですが、<b>BOTTOM VIEW</b>と書いてあるのを読み取れていませんでした。。。足の出ている方を上にしてみるんですね、BOTTOM VIEWですもんね。<a href="http://forum.arduino.cc/index.php/topic,14736.0.html">この投稿</a>をみてわかりました。<br />
分かってみてから<b>LM35DZ 逆</b>で検索すると、同じようなことがでてきました。<br />
<br />
<h2>スケッチ</h2>いろいろなサイトで同じスケッチがでているので割愛。ポイントは以下のとおり。<br />
実際の室温と同じぐらいになっていました。<br />
<ul><li>アナログ入力は5Vを1024段階にする。</li>
<li>LM35DZのVoutからは、10mV/℃で出力される。</li>
</ul><br />
<h2>精度を上げる</h2>検索していたらこんなのを見つけました。<br />
<a href="http://playground.arduino.cc/Main/LM35HigherResolution">LM35HigherResolution</a><br />
<br />
<b>analogReference()</b>は、アナログ入力の基準電圧を変える関数。デフォルトは5V。INTERNALを指定すると1.1Vになります。<br />
基準電圧が5Vの場合は、<br />
<pre class="prettyprint">5V / 1024 = 0.00488</pre>から、1単位あたり約4.9mVとなります。<br />
これが基準電圧を1.1Vにすると、<br />
<pre class="prettyprint">1.1V / 1024 = 0.00107</pre>なので、1単位あたり約1.1mVとなります。<br />
上でも書いたようにLM35DZは10mV/℃で出力するので、5Vの場合は1単位あたり0.49℃、1.1Vの場合は1単位あたり0.11℃となり、より細かい温度を測定できます。<br />
ただし、LM35DZは+2℃〜+150℃まで測れるとデータシートにありますが、1.1Vの場合のMaxは112.53℃に制限されます。<br />
<br />
実際に試してみると、5Vの場合は27.83℃と28.32℃(差は0.49)をいったりきたりしたのに対して、1.1Vの場合には29.54℃と29.43℃(差は0.11)をいったりきたりしていました。それぞれはよさそうですが、比べると1℃近くも値が違います。なんでだろう?<br />
<br />
<br />
<br />
これで<a href="http://www.amazon.co.jp/gp/product/B008PQEWIW/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B008PQEWIW&linkCode=as2&tag=twopack-22">Arduinoエントリーキット</a><img alt="" border="0" src="http://ir-jp.amazon-adsystem.com/e/ir?t=twopack-22&l=as2&o=9&a=B008PQEWIW" height="1" style="border: none !important; margin: 0px !important;" width="1" />に付いてきたひと通りの部品を試しました。<br />
ここまでArduinoを触った感じでは、簡単な回路ものであれば容易にできそうです。本をひと通りやっていくだけでも楽しめました。<br />
ただ、回路を組むのでわからなかったり、スケッチの問題ではなさそうというときは、はまってしまうorお手上げになってしまいそうだという感触。このあたりはいろいろやってみての経験なんだろうと思います。<br />
<br />
<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?t=twopack-22&o=9&p=8&l=as1&asins=B008PQEWIW&ref=tf_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="height: 240px; width: 120px;"></iframe>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-41320248373903397272014-07-22T10:10:00.000+09:002014-07-22T10:10:34.788+09:00半固定抵抗を使ってみる(回路図も書いてみた)<a href="http://www.amazon.co.jp/gp/product/B008PQEWIW/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B008PQEWIW&linkCode=as2&tag=twopack-22">Arduinoエントリーキット</a><img alt="" border="0" src="http://ir-jp.amazon-adsystem.com/e/ir?t=twopack-22&l=as2&o=9&a=B008PQEWIW" height="1" style="border: none !important; margin: 0px !important;" width="1" />についてきた部品で、まだ使っていないものが以下の2つ。<br />
<ul>
<li>半固定抵抗 10kΩ</li>
<li>温度センサー</li>
</ul>
<br />
ついてきたものは使ってみよう!ということで、まずは<b>半固定抵抗</b>から。<br />
半固定抵抗の調節に合わせて音の調子が変わるというものを作ってみます。作ったものはこんな感じ。<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/SYFA7SMkqfU" width="420"></iframe><br />
<br />
<h2>
半固定抵抗</h2>
これです。<br />
<a href="http://1.bp.blogspot.com/-j9Jr2jzocT0/U82y7iFmbRI/AAAAAAAAXfA/pnW0vi9V2WI/s1600/20140722_093812.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-j9Jr2jzocT0/U82y7iFmbRI/AAAAAAAAXfA/pnW0vi9V2WI/s1600/20140722_093812.jpg" height="138" width="160" /></a><a href="http://1.bp.blogspot.com/-37Ypb8BMqmA/U82zKM5QDEI/AAAAAAAAXfQ/aNjGkmdEmu0/s1600/20140722_093832(0).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-37Ypb8BMqmA/U82zKM5QDEI/AAAAAAAAXfQ/aNjGkmdEmu0/s1600/20140722_093832(0).jpg" height="140" width="160" /></a><br />
三本ある足の真ん中にかかる抵抗が上のつまみに連動しています。<br />
<br />
<h2>
回路図</h2>
配線はこんな感じ。<br />
<div class="separator" style="clear: both;">
<a href="http://3.bp.blogspot.com/-R_VI9oIeM9U/U820cLDiO1I/AAAAAAAAXfg/o32zEPho6Zk/s1600/20140719_173037.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-R_VI9oIeM9U/U820cLDiO1I/AAAAAAAAXfg/o32zEPho6Zk/s1600/20140719_173037.jpg" height="240" width="320" /></a></div>
写真だけだとわからない、、、と今更ですが回路図を書いてみようと思い立ちました。<br />
<br />
調べてみると、<a href="http://fritzing.org/home/">Fritzing</a>というツールが使いやすそうなのでこれを使いました。<br />
以下のようにブレッドボードのイメージが出てきて、そこにパーツを置いて描けます。Arduino自体ももパーツとしてあるのが便利。<br />
<div class="separator">
<a href="http://3.bp.blogspot.com/-otguGK7LVAM/U821bY_hSoI/AAAAAAAAXfo/aVUqeeQfZbo/s1600/scshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-otguGK7LVAM/U821bY_hSoI/AAAAAAAAXfo/aVUqeeQfZbo/s1600/scshot.png" height="190" width="320" /></a></div>
これを元に整形して回路図を描けます。<br />
<div class="separator" style="clear: both;">
<a href="http://4.bp.blogspot.com/-w4OdFnP0dFQ/U821rUA9trI/AAAAAAAAXfw/dOhWLhFKsyU/s1600/scshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-w4OdFnP0dFQ/U821rUA9trI/AAAAAAAAXfw/dOhWLhFKsyU/s1600/scshot2.png" height="190" width="320" /></a></div>
上と同じですがエクスポートした回路図がこれ。簡単に描けて便利ですね。<br />
<div class="separator" style="clear: both;">
<a href="http://1.bp.blogspot.com/-d1ZJEV5YJC8/U821_VGgqeI/AAAAAAAAXf4/M1_FUOimX3E/s1600/circut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-d1ZJEV5YJC8/U821_VGgqeI/AAAAAAAAXf4/M1_FUOimX3E/s1600/circut.png" height="247" width="320" /></a></div>
<br />
<h2>
スケッチ</h2>
スケッチは<a href="https://github.com/two-pack/ArduinoExample/commit/95f1d9b37b9da8f1c2cdd8373a7a8992327e8178">ここ</a>でコミットしています。<br />
TDDでかいてみました。#ifdefで実機に出力/入力する関数をラップしてテストするようにしました。toneW()やanalogReadW()などです。うまくラッパーをまとめていけば、TDDもしやすくなると感じました。というか、まとめないとコードが汚くなりそう。。。<br />
<br />
<br />
次は温度センサーです。<br />
<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?t=twopack-22&o=9&p=8&l=as1&asins=B008PQEWIW&ref=qf_sp_asin_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="height: 240px; width: 120px;"></iframe>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-14891491969176404262014-07-18T12:05:00.002+09:002014-07-18T12:05:44.355+09:00ArduinoUnitでTDDを試してみるArduino開発でのTDDについて少し調べてみましたが、C/C++でやるというのが多いようです。Arduino IDEは、スケッチをC++に変換してビルド、実機へ転送する仕組みになっているので、そこを使うようです。TDDのサイクルを早くするためには、実機への転送時間とかを考えるとC++でやるのがいいのかもしれません。<br />
とはいえ、スケッチでできるユニットテストのフレームワーク「<a href="https://github.com/mmurdoch/arduinounit/">ArduinoUnit</a>」もありました。手軽にやるにはこちらのほうがよさそうなので、これを試してみることにします。<br />
<br />
<h2>ArduinoUnit</h2>ArduinoUnitは、Arduino向けのユニットテストのフレームワークです。<br />
以下の環境で試してみます。<br />
<ul><li>Arduino UNO Rev.3</li>
<li>Mac OS X 10.9.4</li>
<li>Arduino IDE 1.0.5</li>
</ul><br />
<h2>準備</h2><ol><li>Githubからクローンしてきてます。ZIPファイルでダウンロードしてもかまいません。<br />
</li>
<li>srcフォルダを<b>ArduinoUnit</b>とリネーム、もしくは別フォルダにコピーします。ここでつけた名前が、Arduino IDEで表示されるライブラリ名になります。<br />
</li>
<li>Arduino IDEで、<b>スケッチ -> ライブラリを使用 -> Add Library...</b>をクリックして、ダイアログで先のフォルダを選択します。<br />
<div class="separator" style="clear: both;"><a href="http://4.bp.blogspot.com/-jscUkZav9s8/U8hrpEKb5qI/AAAAAAAAXYQ/4NUaac8XkpY/s1600/menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-jscUkZav9s8/U8hrpEKb5qI/AAAAAAAAXYQ/4NUaac8XkpY/s1600/menu.png" height="78" width="320" /></a></div>すると、ライブラリとしてArduinoUnitが追加されます。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-O_ttuEa6C5c/U8hshPYtIhI/AAAAAAAAXYY/kj4hTNtGAaM/s1600/menu2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-O_ttuEa6C5c/U8hshPYtIhI/AAAAAAAAXYY/kj4hTNtGAaM/s1600/menu2.png" height="260" width="320" /></a></div>また、<a href="http://arduino.cc/en/Guide/Libraries">Arduino Libraries Directory</a>に選択したフォルダがコピーされます。GithubのREADMEでは、まずArduino Libraries Directoryにフォルダを作るとありますが、選択すればコピーされるので不要でした。<br />
ちなみに、私の環境では、<b>~/Documents/Arduino/libraries</b>にコピーされました。<br />
</li>
</ol><br />
<h2>サンプルを動かす</h2><a href="https://github.com/mmurdoch/arduinounit/#getting-started">READMEのGetting Started</a>にあるサンプルを動かしてみます。<br />
新規のスケッチにコピペしてArduinoに転送、シリアルモニタを開くと以下のように出力されました。<br />
<div class="separator" style="clear: both;"><a href="http://2.bp.blogspot.com/-kOw9taPmTYk/U8hvM9izASI/AAAAAAAAXYk/A4jiRSmcFlI/s1600/serial_monitor_of_example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-kOw9taPmTYk/U8hvM9izASI/AAAAAAAAXYk/A4jiRSmcFlI/s1600/serial_monitor_of_example.png" height="192" width="320" /></a></div>結果が2回出力されてます。頭の方はなんか変ですし。。。転送とシリアルモニタを開くタイミングとかかなと思い、<b>loop()</b>のテスト実行前にdelayを入れたらきれいに出ました。<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-aZKftAJC06c/U8hweliFU-I/AAAAAAAAXYw/lBTrbpI2Vsc/s1600/serial_monitor_of_example2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-aZKftAJC06c/U8hweliFU-I/AAAAAAAAXYw/lBTrbpI2Vsc/s1600/serial_monitor_of_example2.png" height="207" width="320" /></a></div>あとで気づいたんですが、シリアルモニタを開くたびにテストが実行されるようです。delayがない状態でもシリアルモニタを再度開くと、正しく結果が出力されました。<br />
<br />
<h2>やってみる</h2>TDDでコードを書いてみました。<br />
https://github.com/two-pack/ArduinoExample/tree/master/ArduinoUnitExample<br />
コミットの<a href="https://github.com/two-pack/ArduinoExample/commit/3534377ffeda75300558555df59218a3b21010b1">ここ</a>から<a href="https://github.com/two-pack/ArduinoExample/commit/437ccf8e79633d8b5f69cfda846531472c30f381">ここ</a>までで、細かくコミットしています。<br />
<br />
<ul><li>LEDを点滅させるコードを書いてます。簡単な例なので直接ピンの状態を見たりしています。センサーが絡んだりしてくるとそうもいかないので、実機に絡む関数をラップしたりしないとダメそうです。C++でやる場合は、モックのライブラリもありそうです。<br />
</li>
<li>テスト用のソースを分けて、setup()とloop()を持つソースでは#define、#ifdefでテストとプロダクトの場合分けをしました。テスト用のソースを消せば、プロダクトのコードだけをビルドできるはず。<br />
</li>
<li>実機への転送時間とシリアルモニタを開くのにかかる待ち時間は、やっぱり気になりました。特にシリアルモニタが転送時に一度閉じてしまうのが邪魔です。転送はサイズが大きくなるともっと気になるかな。<br />
</li>
<li>やっぱりこういうのがあるのはいいです。C++を持ち出すほどのスケッチを書かないなら、ArduinoUnitである程度割り切りながらテストを書いていくのもいいと思いました。<br />
</li>
</ul>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-43416204509308581172014-07-17T14:45:00.000+09:002014-07-17T14:45:17.845+09:00「Arduinoをはじめよう」ではじめよう(4)第6章をやってみました。ここまでやってきたことを組み合わせて、3色のLEDを混ぜたランプをつくるものです。<br />
PCでProcessingを使ってWebから情報を取ってきて、それを元にシリアルでArduinoに色を伝えるという仕組みです。<br />
ランプになってませんが、こんな感じになりました。<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-InuojF7qHuw/U8dd1AnwX2I/AAAAAAAAXXg/A4MRRCQMBic/s1600/20140717_120515.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-InuojF7qHuw/U8dd1AnwX2I/AAAAAAAAXXg/A4MRRCQMBic/s1600/20140717_120515.jpg" height="240" width="320" /></a></div><br />
これでひと通り読み終わりました。<br />
巻末に付いているリファレンスをざっと読んでいて、<b>tone関数</b>と<b>attachInterrupt関数</b>が気になりました。エントリーキットに圧電スピーカーも付いていたので、音を出してみることにしました。<a href="https://github.com/two-pack/ArduinoExample/commit/89c8550a14060062e65aba98e80851ead6a713e4">ソースはこちら</a>。<br />
<br />
<b>tone関数</b>は、指定した周波数の矩形波を出す関数です。1行書くだけで、音が出ました!<br />
<pre class="prettyprint">tone(SPEAKER, scale[i]);
</pre><br />
<b>attachInterrupt関数</b>は、割り込みの関数です。タクトスイッチで音を止めたり出したりするのを割り込みでやってみました。<br />
<pre class="prettyprint">attachInterrupt(SWITCH, stop, RISING);
</pre>と、SWITCHで指定したピンがLOW -> HIGHの場合にstop関数を呼び出すようにしました。4章ででていたバウンシングなのか、連続して割り込みが出るケースが結構ありました。delayを挟んだりしてみたのですが、うまく改善できず。。。。こういうのはループの中でやるべきなのかな?<br />
<br />
実際に動かしてみて音が出たところです。<br />
<iframe width="560" height="315" src="//www.youtube.com/embed/kSMq08grWXw" frameborder="0" allowfullscreen></iframe><br />
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-54969633827252248622014-07-15T16:41:00.000+09:002014-07-15T16:41:49.930+09:00「Arduinoをはじめよう」ではじめよう(3)5章の残りです。<br />
<br />
<h2>プッシュボタンの代わりに光センサを使う</h2>タクトスイッチの代わりに、光センサ(CdSセル)を使ってみました。センサを覆うとLEDが消えました。<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-NQjhv9vNIrU/U8TMJiAhsJI/AAAAAAAAXVk/csqpptQE9Bc/s1600/20140715_153225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-NQjhv9vNIrU/U8TMJiAhsJI/AAAAAAAAXVk/csqpptQE9Bc/s1600/20140715_153225.jpg" height="240" width="320" /></a></div><br />
アナログ入力を使って光量によってLEDの明るさを変えるのもできました。<b>ANALOG IN</b>につないでいます。<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-AnSf7k_Vrfw/U8TMMHYA50I/AAAAAAAAXVs/zkcBoKyyKOE/s1600/20140715_153155.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-AnSf7k_Vrfw/U8TMMHYA50I/AAAAAAAAXVs/zkcBoKyyKOE/s1600/20140715_153155.jpg" height="240" width="320" /></a></div><br />
<h2>シリアル通信</h2>ここでシリアル通信を行って、ArduinoからPCにアナログ入力の数値を表示するコードがでてきます。<br />
Serialオブジェクトが用意されていて、<b>println</b>メソッドで簡単に出力できました。ここまでデバッグの方法は出てきていませんが、IDEで特別な機能もないようなので、これを使ってデバッグする感じでしょうか。<br />
IDEのシリアルモニタから、以下のように出力されている結果を確認できます。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-iifFkN3GMD4/U8TNiTXP3II/AAAAAAAAXV8/NqOy9IGA4OI/s1600/serial.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-iifFkN3GMD4/U8TNiTXP3II/AAAAAAAAXV8/NqOy9IGA4OI/s1600/serial.png" height="183" width="320" /></a></div><br />
<h2>モータや電球などの駆動</h2>私の買ったエントリーキットには、この項で説明されている部品は含まれていませんでした。訳注にある部品とかは検索すると通販で買えるようです。というわけで、実際にやってみていません。<br />
Arduinoのピンからは20mAまでしか出せないので、モーターなど大きな電流が必要なものは動かせないとのこと。本ではVin端子から電源をとってMOSFETというトランジスタでON/OFFを制御するとあります。わからない・・・・全然わからない・・・・ということで検索したら、以下でわかりやすい回答がありました。<br />
<a href="http://www.senio.co.jp/bbs/viewtopic.php?f=7&t=85"><b>Vinについて</b></a><br />
<br />
また、検索していてトランジスタで電流を増幅して動かすというサイトがありました。う〜ん、難しい。。。。<br />
<a href="http://makers-with-myson.blog.so-net.ne.jp/2013-11-11"><b>Arduino でモータを動かす [Arduino]</b></a><br />
<br />
ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-28104320595100177172014-07-15T14:06:00.000+09:002014-07-15T14:06:31.921+09:00「Arduinoをはじめよう」ではじめよう(2)5章の<i>「PWMで明かりをコントロール」</i>です。<br />
<br />
<h2>自前(?)でPWM</h2>delay関数を使って明るさを変える話で<b>パルス幅変調</b>の説明があります。実際にサンプルでやってみたのですが、50%とか25%とか書いてあるけど、いまいち明るさが変わっているのがわかりづらい。。。5%とかだとわかりました。<br />
2つ並べればわかるかな?と思い、並べてみました。スケッチは<a href="https://github.com/two-pack/ArduinoExample/blob/master/compareLED/compareLED.ino">こちら</a>。<br />
<br />
結局あんまりわからず、5%の写真になりますw<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-kU_HXKglEps/U8Sx83faMdI/AAAAAAAAXUk/73gHuGMlJlA/s1600/20140715_110738.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-kU_HXKglEps/U8Sx83faMdI/AAAAAAAAXUk/73gHuGMlJlA/s1600/20140715_110738.jpg" height="240" width="320" /></a></div><br />
<h2>PWM</h2>本に従って、ArduinoのPWMが使えるピンでもやりました。私の買ったエントリーキットには本に書いてあった270Ωの抵抗がなかったので330Ωのにしました。<br />
<div class="separator" style="clear: both;"><a href="http://4.bp.blogspot.com/-E0yh_RoQkI0/U8SzLLOqtsI/AAAAAAAAXUw/pdDHTV289Zw/s1600/20140715_113035.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-E0yh_RoQkI0/U8SzLLOqtsI/AAAAAAAAXUw/pdDHTV289Zw/s1600/20140715_113035.jpg" height="240" width="320" /></a></div><br />
この抵抗はなんのためにあるのか分からなかったので、とりあえず外してみたところ、すごく光りましたw<br />
以下のサイトで<i>「LEDは、電流を何らかの方法で制限してやらないと、壊れてしまうというものなのです。」</i>と書いてありましたorz 煙は出ませんでしたが。<br />
<a href="http://www.ele-lab.com/led_iroha3.html">LEDの基本 その3 制限抵抗</a><br />
<br />
ただ、ここまでLEDを使う場合には直列で抵抗を挟むことはありませんでした。明るさを調整したのが分かりやすいように、LEDに流れる電圧を下げているのかなとサイトのグラフを見て思いました。あってるかな?<br />
<br />
<h2>組み合わせ</h2>ボタンとPWMの組み合わせてみるところがあります。<br />
答えを見ずに組み合わせたものを作ってみました。単純にスイッチを押している間、明るさが変化するものです。スケッチは<a href="https://github.com/two-pack/ArduinoExample/blob/master/LEDwithPWMandButton/LEDwithPWMandButton.ino">こちら</a>。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-uOKMsDn6090/U8S19XSW3BI/AAAAAAAAXU8/f8HBaMUOpG4/s1600/20140715_121442.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-uOKMsDn6090/U8S19XSW3BI/AAAAAAAAXU8/f8HBaMUOpG4/s1600/20140715_121442.jpg" height="240" width="320" /></a></div><br />
<br />
5章はもう少しあります。<br />
<br />
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=twopack-22&o=9&p=8&l=as1&asins=B008PQEWIW&ref=tf_til&fc1=000000&IS2=1<1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0tag:blogger.com,1999:blog-469434601551305913.post-82490840716317767202014-07-15T13:33:00.000+09:002014-07-15T14:06:46.365+09:00「Arduinoをはじめよう」ではじめよう(1)<a href="http://www.oreilly.co.jp/books/9784873113982/"><b>「Arduinoをはじめよう」</b></a>を読みながら、経過を記録していきたいと思います。<br />
本に書いてあるソースを載せるのはちょっと・・・なので、読んだ内容を参考にして自前でも<a href="https://github.com/two-pack/ArduinoExample"><i>ここで</i></a>書いていきたいと思います。<br />
<br />
<a href="http://two-pack-sbs.blogspot.jp/2014/07/arduino.html"><i>前回</i></a>、LEDをつけることができました。次は<i>「プッシュボタンを使ってLEDをコントロール」</i>です。<br />
<br />
<h2>タクトスイッチ</h2>以下のようにしたところ、スイッチにかかわらずLEDが点きっぱなしになりました。。。<br />
<div class="separator" style="clear: both;"><a href="http://3.bp.blogspot.com/-AVDEz7_BtlE/U8SqWlxTiMI/AAAAAAAAXUM/FZx4PqXe8_k/s1600/20140714_192935.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-AVDEz7_BtlE/U8SqWlxTiMI/AAAAAAAAXUM/FZx4PqXe8_k/s1600/20140714_192935.jpg" height="240" width="320" /></a></div><br />
何が悪いんだろうといろいろ試した結果、タクトスイッチの向きが問題でした。上は横向きでしたが正しくは縦に付けないとダメでした。<br />
以下のサイトでタクトスイッチについて詳しく書かれていました。縦方向につながっているんですね。なので横につけると、常につながっている状態になっていたということでした。<br />
<a href="http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/SWtoLED/SWtoLED.htm"><i>スイッチの入/切でLEDを点灯させます</i></a><br />
<br />
というわけで、こんな感じでつなげてスイッチを押すとLEDが点くようになりました。<br />
<div class="separator" style="clear: both;"><a href="http://1.bp.blogspot.com/-2gp84qJibQs/U8Sp0XvKnyI/AAAAAAAAXUE/Z3gOOeKX5fc/s1600/20140714_182732.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-2gp84qJibQs/U8Sp0XvKnyI/AAAAAAAAXUE/Z3gOOeKX5fc/s1600/20140714_182732.jpg" height="240" width="320" /></a></div><br />
<h2>プルアップ抵抗</h2>上の回路でわからなかったのが、<b>なんで抵抗をつけるのか?</b>です。いろいろ調べてみたところ、おそらくスイッチがオフの時の電圧を安定させるための<b>プルアップ抵抗</b>というものだと思います。以下のサイトがわかりやすかったです。<br />
<a href="http://www.netdecheck.com/coffee_break/dojyo/004/"><i>第4回 プルアップ・プルダウン抵抗</i></a><br />
<br />
こういったことは、<b>「Arduinoをはじめよう」</b>では(今のところ)触れられていないため、図を見ながらそういうもんだと組んでみる感じです。<br />
出来る限り調べてみたいですが、取っ掛かりが難しい。。。<br />
<br />
<h2>ボタンでLED</h2>上の回路でのソースは<a href="https://github.com/two-pack/ArduinoExample/commit/8e4971ebaa4b555f173d31b752d5a21479cc3e2e"><i>こんな</i></a>感じ。<br />
本とは違って、LED操作の部分を別ファイルにしてみました。同じフォルダにあるファイル(IDE上ではタブ)の定義もIDEで自動的に読まれます。<br />
<br />
さらにボタンを押すと、<br />
赤 → 緑 → 両方 → 消灯<br />
という順番で点いたり消えたりするように回路と<a href="https://github.com/two-pack/ArduinoExample/commit/97af8691c0eaf0020275241effc5fb34ab629df9"><i>スケッチ</i></a>を作ってみました。<br />
<div class="separator" style="clear: both;"><a href="http://2.bp.blogspot.com/-9psOkW2BqeY/U8SuL9aEMUI/AAAAAAAAXUY/7x_W7U6t2jY/s1600/20140714_201426.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-9psOkW2BqeY/U8SuL9aEMUI/AAAAAAAAXUY/7x_W7U6t2jY/s1600/20140714_201426.jpg" height="240" width="320" /></a></div><br />
ここまでで、4章はおしまい。<br />
<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?t=twopack-22&o=9&p=8&l=as1&asins=487311537X&ref=tf_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="height: 240px; width: 120px;"></iframe>ソフトウェア開発にまつわる話http://www.blogger.com/profile/14603850933391138447noreply@blogger.com0