ubuntu 12.04でtmuxとgitの最新版を使いたい
ubuntu 12.04を普通にインストールするとtmuxは1.6がインストール済み、gitは入ってないからaptitudeでインストールすると1.7.*とかが降ってくる。
これをなんとか最新版にしたい。
準備
と思って調べてみると、ppaリポジトリを追加すればokということらしいけど、リポジトリを追加するコマンド自体が入ってないので、まずそれを入れる。
$ sudo apt-get install python-software-properties
tmuxの場合
$ sudo add-apt-repository ppa:pi-rho/dev $ sudo aptitude update $ sudo aptitude upgrade tmux
gitの場合
$ sudo apt-add-repository ppa:git-core/ppa
$ sudo aptitude update
$ sudo aptitude install -y git-core
参考にしたサイト
http://www.limemo.net/blog/2013/05/%E3%80%90ubuntu%E3%80%91ubuntu12-04%E3%81%A7add-apt-repository%E3%81%A8%E3%81%84%E3%81%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%8C%E3%81%AA.html
http://qiita.com/nntsugu@github/items/107cbd6cd6db2aa46172
http://orangeclover.hatenablog.com/entry/20130120/1358640829
aptitudeとapt-getが統一されてなかった。
Seleniumを使ってみたメモ
フォームの入力画面の繰り返しが面倒だったので調べてみた。
Selenium IDE
http://docs.seleniumhq.org/
Firefoxのアドオンをインストールするだけで使えた。
なんで今まで使わなかったのか不思議なくらいに導入も簡単にできる。
Eclipse
JavaのLanguage Bindingsをダウンロードして展開。
Eclipseのメニューから[Window]-[Preferences]、
[Java]-[Build Path]-[User Libraries]に[New...]して、上記展開してできたjarを全部追加する。
プロジェクトのBuildPathにそのユーザライブラリを追加。
Selenium IDEから[ファイル]-[テストケースをエクスポート...]-[Java - JUnit 4 - WebDriver]。
Fierfoxのパスが分からないみたいな例外が起きたのでドライバ利用部分を以下のように修正。
String pathToBinary = "C:\\Program Files (x86)\\Mozilla\\Firefox\\firefox.exe"; System.setProperty("webdriver.firefox.bin", pathToBinary); driver = new FirefoxDriver();
IEの場合、IE Driver Server(32bit)をダウンロードして展開、PATH通した。
IEの設定変更とかも実行。
あとdriverのクラスを変更。
import org.openqa.selenium.ie.InternetExplorerDriver; driver = new InternetExplorerDriver();
VisualStudio(C#)
NuGetから以下をインストール。
・Selenium WebDriver
・Selenium WebDriver Support Classes
Selenium IDEから[ファイル]-[テストケースをエクスポート...]-[C# - NUnit - WebDriver]。
IEの場合、IE Driver Server(32bit)をダウンロードして展開、PATH通した。
IEのセキュリティ設定変更とかも実行。
driverのクラスを変更。
using OpenQA.Selenium.IE; driver = new InternetExplorerDriver();
参考
さわりはこちらを参照した。
http://www.atmarkit.co.jp/ait/articles/0908/19/news109.html
設定なんかはこちらを参照した。
http://codezine.jp/article/detail/7456
Objective-CでXML Webサービスを使ってみる
調べてもまともに情報が出てこずに、いろいろ大変だったのでメモ。
ここを使わせてもらう。
準備
wsdl2objcをダウンロードする。ここのUsageInstructionsはまるで役に立たないので無視。
先のサービスのWSDLを取得して*1、objcのソースを出力しておく。
実装
Xcodeを起動してプロジェクトを新規作成。
[TARGETS]-[Build Phases]にlibxml2.2.dylibを追加。
[TARGETS]-[Build Settings]-[Header Search Paths]に"${SDKROOT}/usr/include/libxml2"を追加。
先に出力したソースを全部プロジェクトに取り込む。
importして、
#import "TempConvert.h"
実装して、
TempConvertSoap *soap = [TempConvert TempConvertSoap]; soap.logXMLInOut = YES; TempConvert_CelsiusToFahrenheit *p = [[TempConvert_CelsiusToFahrenheit alloc] init]; p.Celsius = @"30"; TempConvertSoapResponse *response = [soap CelsiusToFahrenheitUsingParameters:p]; NSLog(@"res:%@",response);
実行するものの、なにか問題が起きてる。
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <soap:Fault> <soap:Code> <soap:Value>soap:Sender</soap:Value> </soap:Code> <soap:Reason> <soap:Text xml:lang="en">Unable to handle request without a valid action parameter. Please supply a valid soap action.</soap:Text> </soap:Reason> <soap:Detail /> </soap:Fault> </soap:Body> </soap:Envelope>
この時点でさっぱりわからなくなったんだけど、実行例と比べてみると入力が微妙に異なる。
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:TempConvert="http://tempuri.org/" xsl:version="1.0"> <soap:Body> <CelsiusToFahrenheit xsi:type="TempConvert:CelsiusToFahrenheit"> <Celsius>30</Celsius> </CelsiusToFahrenheit> </soap:Body> </soap:Envelope>
WSDLから自動生成されたソースを修正。これ合ってるの?
// TempConvert.m // @implementation TempConvert_CelsiusToFahrenheit // - (xmlNodePtr)xmlNodeForDoc:(xmlDocPtr)doc elementName:(NSString *)elName // 266行目 // xmlSetNsProp(node, xsi, (const xmlChar*)"type", (const xmlChar*)"TempConvert:CelsiusToFahrenheit"); xmlNsPtr xmlns = xmlSearchNs(doc, root, (const xmlChar*)"xmlns"); xmlSetNsProp(node, xmlns, (const xmlChar*)"xmlns", (const xmlChar*)"http://tempuri.org/");
再度実行すると
TempConvertSoapResponse *response = [soap CelsiusToFahrenheitUsingParameters:p]; // NSLog(@"res:%@",response); // NSLog(@"body: %@",response.bodyParts); TempConvert_CelsiusToFahrenheitResponse *result = [response.bodyParts objectAtIndex:0]; NSLog(@"%@F",result.CelsiusToFahrenheitResult); // => 2013-10-04 23:09:50.059 xmlwebsvc-test[767:c303] 86F
通りました。
まとめ
SOAPのやりとりがめんどくさい。
HTTP Postでも呼び出せるならそっちの方がいいんじゃないかと思う。そこでRESTの登場ですよってことなのかな。
VisualStudioだとサービス参照追加するだけで済むのでらくちん。
var client = new TempConvert.TempConvertSoapClient("TempConvertSoap"); string fahrenheit = client.CelsiusToFahrenheit("30"); System.Diagnostics.Debug.WriteLine(string.Format("{0}F", fahrenheit)); // => 86F
だからこそ、裏側をなにも知らなかったんだな。
C#でテストする(MSTest)
折角なので、以前調べてそれきりだったのを一応自分で書いてみる。
環境は VS2010Ultimate。なので自宅PCでは無理。
手順
(1)プロジェクトを作る
(3)テストを書く
using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using ClassLibrary1; namespace TestProject1 { /// <summary> /// BankAccountTest の概要の説明 /// </summary> [TestClass] public class BankAccountTest { /* 中略 */ private BankAccount bankAccount_; [TestInitialize] public void 準備() { bankAccount_ = new BankAccount(1000); } [TestMethod] public void 残高() { Assert.AreEqual(1000, bankAccount_.Amount); } [TestMethod] public void 引き出す() { bankAccount_.Withdraw(200); Assert.AreEqual(800, bankAccount_.Amount); } [TestMethod] public void 預け入れる() { bankAccount_.Deposit(300); Assert.AreEqual(1300, bankAccount_.Amount); } } }
属性が微妙にNUnitと違う。
メモ
コンソールアプリのテストができない?とか書いてたことについて、今回も同じことをやる過程で、そもそもコンソールアプリを参照設定すること自体がなんか変だということに気が付いた。
MSTestはVS統合されているだけあって、クリックでドンもできるし、ショートカットもできるし楽ちん。と思いきや、2ステップのキーバインドがちょっと。Ctrl+R,AをCtrl+R,Ctrl+Aと押してしまうと、赤出た時にいちいちデバッガで止まってしまう。
C#でテストする(NUnit)
ブックマークの整理をしていたら、やっぱり自分でもまとめておかないといけない気がしたので。
案の定いろいろ詰まったわけで。
環境はVS2010Express / NUnit2.6.2
手順
(1)プロジェクトを作る
(2)テストプロジェクトを作って、参照設定する
「プロジェクト」タブで対象プロジェクトを追加するのと、「参照」タブでnunit.framework.dllを探して追加する。
(3)テストを書く
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using ClassLibrary1; namespace ClassLibrary1Tests { [TestFixture] public class BankAccountTest { private BankAccount bankAccount_; [SetUp] public void 準備() { bankAccount_ = new BankAccount(1000); } [Test] public void 残高() { Assert.AreEqual(1000, bankAccount_.Amount); } [Test] public void 預け入れる() { bankAccount_.Deposit(200); Assert.AreEqual(1200, bankAccount_.Amount); } [Test] public void 引き出す() { bankAccount_.Withdraw(300); Assert.AreEqual(700, bankAccount_.Amount); } } }
(4)本体を書く
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class BankAccount { private int amount_; public BankAccount(int value) { amount_ = value; } public int Amount { get { return amount_; } } public void Deposit(int value) { amount_ += value; } public void Withdraw(int value) { amount_ -= value; } } }
HTMLカラーをRGBにする
「.NETなら簡単にできるよー」とか耳にしたので、LLなら普通にできるんじゃ?と思いつつ、どれだけ簡単にできるのか試してみた。
#p ARGV[0] c = "0x00aaff" /0x([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i =~ c puts $1.hex, $2.hex, $3.hex # => 0 # 170 # 255
rubyの書き方わからん。
PS C:\Windows\system32> [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") PS C:\Windows\system32> [Drawing.Color]::FromArgb("#112233") R : 17 G : 34 B : 51 A : 0 IsKnownColor : False IsEmpty : False IsNamedColor : False IsSystemColor : False Name : 112233
わざわざRGBに直す必要がない気がしてきた。
2桁ずつ切って「0x」つけたら終わりじゃないか?
コードをps1ファイルに記述して実行しようと思った時に、やっぱりはまった。
# 管理者権限でpowershell.exeを起動してから PS C:\Windows\system32> Get-ExecutionPolicy Restricted PS C:\Windows\system32> Set-ExecutionPolicy remotesigned 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y PS C:\Windows\system32> Get-ExecutionPolicy RemoteSigned
さすがに、もうすっかり忘れてる。
PHPで動的にグラフを描画する
さすがに、gdで絵を描くのはきつかろうということで、探したところpChartにたどり着いた。
本家
http://pchart.sourceforge.net/index.php
ドキュメントの日本語訳
http://www.t-net.ne.jp/~cyfis/p_chart/index.html
M+とIPAの合成フォント
http://mix-mplus-ipa.sourceforge.jp/
<?php include("./pChart.1.27d/pChart/pData.class"); include("./pChart.1.27d/pChart/pChart.class"); $font_dir_path = "./pChart.1.27d/Fonts"; // フォント置く場所をうまく指定しないといけない $font_name = "Migu-1M-regular.ttf"; // データ用意 $dataSet = new pData(); $dataSet->AddPoint(array( 554999, 371095, 376568,1311948,1105588,1993960,1596025), "range1"); $dataSet->AddPoint(array( 746428, 504383, 485484,1933207,1665986,3834749,2484725), "range2"); $dataSet->AddPoint(array( 787426, 534065, 516801,1886867,1611798,3336195,2377285), "range3"); $dataSet->AddPoint(array( 708489, 465814, 490057,1693179,1476011,2791729,2015274), "range4"); $dataSet->AddPoint(array( 181797, 125417, 135876, 297883, 290416, 653277, 412149), "range5"); $dataSet->AddPoint(array('茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'), "Serie0"); $dataSet->AddAllSeries(); $dataSet->RemoveSerie("Serie0"); $dataSet->SetAbsciseLabelSerie("Serie0"); $dataSet->SetSerieName( "0-19", "range1"); $dataSet->SetSerieName("20-39", "range2"); $dataSet->SetSerieName("40-59", "range3"); $dataSet->SetSerieName("60-79", "range4"); $dataSet->SetSerieName( "80-", "range5"); $dataSet->SetYAxisName("人"); $dataSet->SetXAxisName("都道府県"); // Y軸の上辺値を得る $maxScale = getMaxScale($dataSet->GetData()); // グラフ生成 $chart = new pChart(600, 350); // 背景色塗りつぶし $chart->drawGraphAreaGradient(230, 255, 255, 2, TARGET_BACKGROUND); $chart->setFontProperties("$font_dir_path/$font_name", 8); $chart->setGraphArea(100, 50, 490, 290); // グラフ領域のサイズ設定 $chart->drawGraphArea(255, 255, 230, false); // グラフ領域の背景色設定 $chart->setFixedScale(0, $maxScale, 5); // 縦は5分割固定 $chart->drawScale($dataSet->GetData(), $dataSet->GetDataDescription(), SCALE_ADDALL, 0, 0, 0, true, 0, 2, true); //$chart->drawGrid(2, false); // 縦罫線いらないから横罫線を手で引く { $y = 290 - 50; $y2 = $y / 5; foreach (range(1, 4) as $time) { $y3 = 50 + $y2 * $time; $chart->drawDottedLine(100, $y3, 490, $y3, 2, 220, 220, 220, 255); } } // 積み上げ棒グラフ $chart->drawStackedBarGraph($dataSet->GetData(), $dataSet->GetDataDescription(), 50); // 第3引数は透過度 // タイトルを描画する $title = "都道府県別人口"; $chart->setFontProperties("$font_dir_path/$font_name", 10); $chart->drawTitle(50, 30, $title, 0, 0, 0, 550); // グラフの判例を描画する $chart->setFontProperties("$font_dir_path/$font_name", 8); $chart->drawLegend(510, 20, $dataSet->GetDataDescription(), 240, 240, 240); $chart->addBorder(1); $chart->Stroke(); function getMaxColumnValue($data) { $tmp = array(); foreach (range(0, count($data)-1) as $i) { $tmp[$i] = 0; } foreach ($data as $index => $value) { foreach (range(1, 5) as $i) { $tmp[$index] += $value['range'.$i]; } } return max($tmp); } function getMaxScale($data) { $maxValue = getMaxColumnValue($data); $base = getBaseNum($maxValue); $mod = $maxValue % $base; $diff = $base - $mod; $result = $maxValue + $diff; return $result; } function getBaseNum($num) { $len = strlen($num); $base = pow(10, $len - 2); // 数値が100万前後じゃないとダメだろこれ return $base; }
いつもの悪い癖で、後半きつくなってきた。Googleのやつみたいに、GUIでちょちょいと編集できるサービスがあればなー。
キャメルとパスカルが混ざってるのって、わざとやってるのかな。
そういえばずっとパスカルって呼んでたけど、最近はアッパーキャメルの方がメジャーなのかしら。
しかも、ここまで書いておいて、pChart2.xの方がよかったりして?
少なくとも全部キャメルになってるみたいな。ドキュメントのjsがおかしいっぽいところあるけど。
カラーピッカー
http://www.colorpicker.com/
政府統計の総合窓口
http://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do
たぶん22年分のデータだったと思う。
Google Chart Tools / Image Charts (aka Chart API)
http://code.google.com/intl/ja/apis/chart/