よくわからないけど src/test/java ができなくてであとから作る場合

  1. src/test/java のディレクトリをプロジェクトツリーから New → Directory して作成
  2. java ディレクトリを右クリックして Mark Directory As → Test Sources Root に設定する
  3. java ディレクトリを右クリックして New → Package して使う名前空間のディレクトリを掘っておく

までやると、Refactor の destination に該当ソースパスのパッケージが出てきて移動できるようになるっぽい……

3番目の手順をやらないと destination に出てこなくて???ってなる

  1. トップ
  2. tech
  3. IntelliJ IDEA で src/test/java がないところに新規でつくる方法

前回のもの、写真だとわかりにくいがいろいろと失敗点があって実用は可能だが満足いくデキとは言えなかった。実はお義母さんからの要望に基いて作っているものなので、あまりひどいデキのものだと申し分けない。

ということで作りなおした。前回の経験を生かし型紙を起こしなおし少し長くつくってる。

また、各所でまち針を慎重に使うようにしたり、もう少し丁寧にやることを心がけたつもり。

全体的にはよくなったが、一部まだ気になるところはある。難しい。

デカ文字A4ジェネレータというのを書いた。

https://github.com/cho45/dekaimoji-a4

原寸印刷について

いくつか方法があるがピンヘッダのレイアウトを実寸で印刷するツールを書くときに検討した通り、PDF をつくるのが現状では確実と思われる。

その上で、プレビューとの兼ね合いを考えるとさらにいくつか方法がある。

canvas で作った画像を PDF に貼る

「画像で作ってPDFに貼りつける」という方法は JS に限らず安定して確実な出力ができる。

JS の場合でもスムーズにプレビューできるし出力も簡単。ただし出力サイズが大きい場合、メモリが足りなくなることがある。

また、テキストの選択はできなくなる。

PDF オンリー PDF プレビュー

PDF オンリーの場合、ブラウザーがPDFのインライン表示に対応していれば、iframe でプレビューができる。昨今、だいたいのブラウザーで実はpdfが組み込み表示可能なので案外いける。ただしスマフォでは未対応。

2D Context の API にあわせる

jsPDF の場合、単純な図形化なら、2D Context と APIをあわせることができるので、canvasプレビュー、pdf出力がスムーズにできそう。ただしこれはテキストレンダリングしたくなった時点で確実に破綻すると思われる。

  1. トップ
  2. tech
  3. デカい文字をA4で分割して印刷するツールをJSで書いた

404 Not Found を参考につくった。まちがえてキルティングが表裏逆になってしまった。

作ってみたけどキルティングは 14x36 ぐらいでもいいかな

[tech] デカい文字をA4で分割して印刷するツールをJSで書いた | Sat, Mar 7. 2015 - 氾濫原 では、実寸サイズを扱うので、多くの場所で mm や cm やら pt などの単位で数値を書きたくなる。

いろんな方法

mm を係数にして毎回乗算する方法

var mm = dpi / 25.4;

10*mm

mm を係数にして毎回除算する方法

var mm = 25.4 / dpi;

10/mm

乗算の逆。

変換を関数にする方法

function mm (num) { ... }

mm(10)

Number のプロトタイプ拡張

Number.prototype.mm = function () { ... };

10..mm()


しかし JSLint とかは 10..mm みたいな呼びかたをすると怒る。

Number のアクセサディスクリプタ

単純なプロトタイプ拡張と比べ、括弧がいらない。

10..mm
function setDPI (dpi) {
	var dpmm = dpi / 25.4;
	var pt = dpi / 72;
	var units = {
		'in' : dpi,
		'pt' : pt,
		'mm' : dpmm,
		'cm' : dpmm * 10,
		'm' : dpmm * 1000
	};

	for (var unit in units) if (units.hasOwnProperty(unit)) (function (factor) {
		Object.defineProperty(Number.prototype, unit, {
			get: function () {
				return this.valueOf() * factor;
			}
		});
	})(units[unit]);
}

setDPI(150);

console.log(10..mm);
console.log(10..cm);

しかし JSLint とかは 10..mm みたいな呼びかたをすると怒る。

アクロバティックな方法

'10 mm'

とかを数値に変換する形

var UnitConverter = function () { this.init.apply(this, arguments) };
UnitConverter.prototype = {
	init : function (opts) {
		if (!opts) opts = {};
		this.setDPI(opts.dpi || 96);
	},

	setDPI : function (dpi) {
		this.dpi = dpi;
		var dpmm = dpi / 25.4;
		var pt = dpi / 72;
		this.units = {
			'in' : dpi,
			'pt' : pt,
			'mm' : dpmm,
			'cm' : dpmm * 10,
			'm' : dpmm * 1000
		};

		var unitNames = [];
		for (var key in this.units) if (this.units.hasOwnProperty(key)) {
			unitNames.push(key);
		}

		this.re = new RegExp('([0-9.]+) (' + unitNames.join('|') + ')');
	},

	unit : function (string) {
		if (string.match(new RegExp('^' + this.re.source + '$'))) {
			return +RegExp.$1 * this.units[RegExp.$2];
		} else {
			return null;
		}
	},

	context : function (fun) {
		var self = this;
		var args = Array.prototype.slice.call(arguments, 1);
		fun = eval('(' + fun.toString().replace(new RegExp("'(" + this.re.source + ")'", 'g'), function (_, s) {
			return self.unit(s);
		}) + ')');
		fun.apply(null ,args);
	}
};

文字列化した関数を置換する。みためクロージャなのにクロージャになってないので変数アクセスで混乱する。つくれない。

結論

普通に係数使うのが一番シンプル。除算のほうがかっこいい気がする。ただし演算子の優先順位に気をつかわないとハマる。

  1. トップ
  2. tech
  3. JS 数値リテラルに単位をつけたい

とりあえず本は必要。本については後述

作業について

裁断でデキの70%が決まる

伸縮性のある布を正確に裁断するのは、それだけでも大変難しい…

オルファ(OLFA) セーフティロータリカッター ゴム L型 156B - オルファ(OLFA)

オルファ(OLFA)

5.0 / 5.0


オルファ(OLFA) カッターマットA2 (450x620x2mm) 159B - オルファ(OLFA)

オルファ(OLFA)

5.0 / 5.0

基本的に裁断バサミよりロータリーカッターが良い。なぜなら布を持ちあげずに裁断できるため。型紙が動きようがない状態で裁断できると正確に切りやすくて精神的に良い。

カッティングマットはA2ぐらいがちょうどいいと思う。A1だとテーブルに乗らなかったりして扱いにくいし、A3だと小さすぎる。A2 でも結構マットを動かす必要はあります。


「水通し」「地なおし」などのキーワードを知っているかいないかでだいぶ変わる。

洗濯するものは裁断前に「水通し」をして予めある程度縮ませてから裁断するか、厳密にあわせる必要がないものは3%〜10%程度大きく裁断する。

水通しは工場で縮める処理をしているものならやる必要がないみたいな話もあるが、売られているもののうちどれがそれなのか判断することができないので、水通しをするほうが安全。ただし一度綺麗に広げて干す必要があるので矮小住宅環境ではクソ面倒。

(今のところの個人的見解では身につける衣類でなければ水通しをせずに5%大きめに作るのが良い気がしている。身につけるものは作る予定がないので水通しやらずに押しきりたい)

「縫い代」は正確にとる

「縫い代」は縫ってひっくり返すと見えなくなるので適当に切ってもええやろと思ってしまうが、これは大きな間違い。

ミシンをかけるときは常に裁ち切り線を基準に縫い代分をオフセットして縫うことになるので、裁ち切りが正確であることと同様に縫い代も正確にとれていないと、当然ミシンの縫い目(=仕上り線)も直線にならない、ということになる。

また、適当に切ってしまうと、複数枚重ねて縫うときに位置をあわせることができなくなる。がんばって仕上がり線を書いても重ねるときにそれであわせることは難しい。マチ針駆使したらできるだろうけど…

裁縫用語

微妙に特殊な「言いまわし」があって混乱することがあった。主観で重要な順に並べた。

かがり

→ 裁断した部分のほつれ防止。基本はジグザグ縫い。「端にジグザグ縫いまたはロックミシンをかける」と書いてある場合すなわちかがるということ。ロックミシンはかがり専用のミシンのことで素人には関係ない。

返し縫い

→ ミシンの文脈では縫いはじめと縫いおわりで逆方向に少し縫うこと。普通は返し縫い機能があるので簡単にできる。手縫いの場合は「縫いかた」の種類でミシンの返し縫いとは関係がない。

返し縫いは縫いはじめに針を置いて、少し普通にすすめて、戻って、もう一度すすむ。つまり返し縫い部分は3回針が刺さる。

表あわせ

→ 布の表同士をあわせること。最後にひっくり返すので裏面を見ながらミシンをかけることが多い。

ステッチ

→ 2つの布を縫いあわせる機能がない縫い目のことっぽい? 飾り・強度のためにかけるミシンのよう。「ミシンをかける」は逆に縫いあわせるという意味を含むようだ。使いわけてる人がいるけど、正確に使いわけてない場合があってややこしい。「なんとなく縫う」ぐらいのニュアンスがある。

仕上がり線

→ 縫う線。この線に縫い代を加えると裁ち切り線になる。つまり普通はこの線で裁断しない。

縫い代

→ 縫うためにつける 1cm ぐらいの領域。

縫い代を割る

→ 縫ったあと、2枚の布の縫い代がくっついているが、これをそれぞれの布の方向に開いて固定すること(アイロンをかけたりする)

裁ち切り

型紙に「裁ち切り」と書いてある場合、縫い代をつけないという。仕上がり線がすなわち裁ち切り線になる。

切替

→ 途中で別の布 (または同じ布) を繋ぐこと。途中で柄を変えたいときにやる。

パターン

→ 型紙のこと

レシピ

→ 型紙も含めた製作の手順のこと

コード (Cord)

→ 紐のこと。

地直し

→ 買ってきた布が歪んでいることがあるので (そのまま作ると洗濯したときに歪みが表面化する) それを直すこと。最近の布の品質ならやる必要ないという話もある

バイアステープ

→ 斜めに裁断されたテープ状の生地のことをバイアステープというらしい。少し伸縮性があり縁取りとかに使う

返し口

→ ひっくり返すために縫い残す部分のこと。これがないとひっくり返せない。最後は手縫いで返し口を閉じるか、周囲にステッチをかけて強制的に閉じる。

目が落ちる

→ ミシンの針が布地以外のところに落ちて空振りすること。特殊なことではなく、特に布端をジグザグ縫いでかがるときは片側はほぼ目が落ちる位置になる。

パイピング

→ 布端をバイアステープ処理すること

イセる

→ 寄せ集める。縮める。英語で gather の意味

布の種類

名前は編みかたの分類なので、実際は使用される糸の太さによって厚さは変わる

ブロード

よくあるプリントされたりしていて表面がつるつるしている、比較的薄い生地。

私見:薄いので使いどころ次第でちょっと安っぽくなる

オックス

少し厚手で編み目が明確なやつ。丈夫。キャンバスよりは薄い。(10番オックスというのがよく使われるらしい)

私見:適度な光沢があって高級感があり、汎用性が高く感じる。手触りも布!って感じで良い。

シーチング

本来シーツ用の生地でちょっとざらざらとした厚手の生地。

私見:オックスの下位互換みたいな感じがする。ちょっと安っぽいというか、荒っぽい風合いがある。

キャンバス (帆布)

厚手でかたくかなり丈夫。カバンとかに良く使われる。(11番が一番薄いが、典型的なオックスと比べるとこれでもかなり厚い生地)

キルティング

2枚の布の中に綿が入っていて斜めに縫ってあるやつ。やわらかいが丈夫。ブロードのキルティング・オックスのキルティングとかデニムのキルティングとか、いろいろある。2枚生地を使ってる分高価だけど、手軽に作れるので便利。高価といっても2枚生地を買うよりはだいぶ安い。

私見:手軽で便利だけど、できあがりがまさに小学生とかが持ってそう!という感じになる。良く言うと手作り感がでる。

きれいに縫うための基礎の基礎 - 水野 佳子

水野 佳子

5.0 / 5.0

かなり細かく「縫いかた」について書いてある。服を作らない場合必要ない技術もあるけど一通り丁寧に書いてあってよかった。

いちばんよくわかる かんたんかわいい通園通学グッズ -

5.0 / 5.0

簡単な作例がたくさん載ってて参考になった。作りかたほぼいっしょだけどサイズだけ違うみたいなケースが結構あるなという発見がある。

  1. トップ
  2. tech
  3. 本気でなくとも裁縫するなら絶対に知る必要があること

まだ必要ないんだけど、作りたいベースで作ってみた。

上の写真は今日の状態のものだが、実はひとつ前のバージョンがある。

布団カバーを作る際にあまった布をフタに使ったのだが、あまりにも本体と色があっていなくてダサかった… 作る途中に気付けよという感じだが、とりあえず仕上げたかったのと、全部おわったら意外と納まるんじゃないかと思ったけど、やっぱダメだった。

なのでやはり別途布を購入しなおしてフタだけ切替なしで作りなおし、元のフタをはずしてつけた。

花粉症の季節なのでポケットティッシュを割と持ち歩いているのだけれど、雑にカバンの中に放りこんでおくとぐちゃぐちゃになってダメになってしまうことが多々あってつらかった。

ということで作った。

最初、ある本に書いてある通りにつくったらサイズがあわず、結局自分で計って作りなおした。ポケットティッシュは 8cm x 11cm x 0.5cm ぐらいの大きさなので、これを収めるには 9cm x 12cm ぐらいの広さが必要だった。

工程自体は難しくないけど、正確に布を切ることが神経をつかうし、とにかく難しい。

哺乳瓶入れが1つしかなくもう1つ欲しいという要望をうけて作った。

別の作例を参考にサイズを変えて作ったのだけど、計算を間違えたのか、つまむと2cmぐらい余分がでるぐらいの大きさになってしまった。

下を「わ」にして「折りマチ」をつけたタイプで、キルティングの1枚の布からできている。

筒状のものは一定のサイズ以下になるとミシンの腕に入らなくなって縫えなくなるということがわかった。紐片方出しの場合どうしても筒状にしてから縫う必要がある(と思う)ので、一定サイズ以下の場合両出しで締める構造にしなければならない気がする。

前述の通り何かを間違えてちょっと大きめにできてしまったが、おかげて筒状にしてもぎりぎり縫えるサイズにおさまった。実用上困るほどの大きさの違いではないので「失敗」の知見をためつつ実用上は「成功」ということにしておく。

ミシンに少し慣れてきたので、今まで「自分で作る」ことを考えたこともなかったことについて、改めて「自分で作れるならどんなものを作るか?」と考えている。

たとえば普段使いのカバンのアイデア

  • 箱のティッシュを組込めること
  • ゴミ箱ポケットをつけること
  • 13インチ MacBook がそのまま放りこめること

これらを満たすもの、特に最初の2つを満たすカバンというのは見たことがないので、技術力があれば作りたいなという気持ちがある。

かなり重いものを入れがちなカバンを自分で作るのは不安が多いが、そうでないなら自分で作っても面白そう。

全体的にむずかしくないはずなのに、取っ手をつける位置を間違えて一旦リッパーで完全にとってやりなおすという無駄な作業が発生した。つらかった。

これで要求されていた保育園グッズは終わり。

柄違いのも作っていた。コップ入れは大変簡単で、裁断がおわれば30分ぐらいで作れた(これは朝出社前に縫った)

#!/usr/bin/xcrun swift
import Cocoa
struct ProgramOption {
var list : Bool = false
var set : String? = nil
var help : Bool = false
}
func getInstalledBrowsers () -> [ NSBundle ] {
var browsers = [ NSBundle ]()
let array = LSCopyAllHandlersForURLScheme("http").takeRetainedValue()
for var i = 0, len = CFArrayGetCount(array); i < len; i++ {
let bundleId = unsafeBitCast(CFArrayGetValueAtIndex(array, i), CFString.self) as String
if let path = NSWorkspace.sharedWorkspace().absolutePathForAppBundleWithIdentifier(bundleId) {
if let bundle = NSBundle(path: path) {
// let name: String = bundle.infoDictionary!["CFBundleName"] as String
browsers.append(bundle)
}
}
}
return browsers
}
func setDefaultBrowser (bundleId : String) -> Bool {
let httpResult = LSSetDefaultHandlerForURLScheme("http", bundleId)
let httpsResult = LSSetDefaultHandlerForURLScheme("https", bundleId)
if httpResult == noErr && httpsResult == noErr {
return true
} else {
return false
}
}
var option = ProgramOption()
for var i = 0, len = Process.arguments.count; i < len; i++ {
let arg = Process.arguments[i]
switch arg {
case "-h", "--help":
option.help = true
case "-l", "--list":
option.list = true
case "-s", "--set":
option.set = Process.arguments[++i]
default:
break
}
}
if option.help {
println("-h, --help: Show help (this)")
println("-l, --list: Show installed browser list")
println("-s [bundleId], --set [bundleId]: Set default browser to specified browser")
exit(0)
}
if option.list {
let browsers = getInstalledBrowsers()
for browser in browsers {
let bundleId = browser.bundleIdentifier!
let path = browser.bundlePath
println("\(bundleId)")
println("\t\(path)")
}
}
if let bundleId = option.set {
if setDefaultBrowser(bundleId) {
exit(0)
} else {
exit(1)
}
}
exit(0)

peco る

set_default_browser.swift --set $( set_default_browser.swift -l | grep -v "\t" | peco )

雑にpecoれる

経緯

むかしむかしに Obj-C で書いたことがあってな

  1. トップ
  2. tech
  3. デフォルトブラウザを5秒に1回変える人に便利な Swift スクリプト書いた (Mac)

出社した直後ぐらいからだるくなり、12時ごろに「もうこれはだめだな」と思い早退。

帰宅時点では37°ぐらいの微熱。悪寒がするので熱めの風呂に入ってからすぐ寝て、15時ぐらいに37.8°ぐらい。生卵をTKGとして摂取してひたすら寝つ続け、20時ぐらいに37.3°ぐらいまで下がる。それからまたひたすら寝て朝がたに36.5°ぐらいの平熱になった。

型紙付属のレシピから変えてマジックテープ式にしようとしたら (保育園の要求仕様を満たすため)、いろいろ失敗してしまった。マジックテープがどうも固く、ジグザグ縫いで目が飛びまくりどうしようもなく、しかたなく直線に変えたり、マチをつけて固定するところで手縫いする必要があるのだが、玉止めがうまくいかず……

とはいえ一応実用上は問題ない形に仕上げた…… 精進が必要。

オルファ(OLFA) セーフティロータリカッター ゴム L型 156B - オルファ(OLFA)

オルファ(OLFA)

5.0 / 5.0

オルファ(OLFA) 円形刃45ミリ替刃 RB45-1 - オルファ(OLFA)

オルファ(OLFA)

5.0 / 5.0

オルファ(OLFA) カッターマットA2 (450x620x2mm) 159B - オルファ(OLFA)

オルファ(OLFA)

5.0 / 5.0

布を切るといえば裁ち鋏でしょ??と思って思考停止していたけど、ローリングカッターを使ったほうが圧倒的に楽チンだった。

  1. 布を浮かす必要がない
    • 裁断精度があがる
  2. 1つの動作で完結できる
    • 裁ち鋏だと「ハサミを開く」「線にあわせる」「ハサミを線にあわせて閉じる」「途中で開いなおしてすすめる」を繰替えす
    • ローリングカッターはまっすぐ押すだけ。良く切れるのでほぼパツイチ

ただし欠点があって、一度に切れる長さはカッターマットの大きさに制限される。

裁断が結構気が重い作業だけど気が楽になるし、時短できるしチートアイテムっぽい。

アイロンで写せる型紙を購入したのだけれど、見ての通り色の濃い生地を買ってしまったので全く写らず (写ってるけど見えない)、チャコペーパーをひいてがんばって写した…… というか厚紙に型紙起こしなおしたほうがいいかもしれない。むずかしい。

キルティング地なのですこし不安だったけど、とくに問題もなく製作できた。

紐の通し口の処理が勉強になった。

布端のかがりを細かいジグザグではじめてしまったのでだいぶ時間がかかってしまった。とはいえ全体の作業時間は型紙写すのに試行錯誤した時間を含め2時間弱ぐらい。

備考

これも保育園グッズの一つなのだが、保育園からの要求仕様には「コップ入れ」とか書かれておらず、どのぐらいのサイズが必要なのか、全くわからない。中に入れるコップのサイズが分からないのに、コップ入れを用意しろといわれる。世の中は厳しい。

  1. トップ
  2. tech
  3. 今日のミシン: コップ入れ