Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

Page 1/248: 1 2 3 4 5 6 7 8 9 »

Windowsの言語バーをIMEがONの時にのみ表示する - Feb 26, 2011

ATOKはATOK2011からWindows XP以降の多言語入力のフレームワークにきちんと則った設計になったとか何とかで、独自のフローティングウィンドウ(ATOKパレット)の代わりに、Windows標準の「言語バー」で全ての操作を行えるようになった。それはいいんだけど、使い勝手がちょっと今までのATOKパレットと違って違和感がある。目下のところ困ってたのは、IMEがOFFの時に言語バーが消えないという事。

というのも、ATOKパレットでは「IMEがONになってる時だけ表示して、IMEを介さない直接入力になってる時は非表示にする」という設定ができたんだけど、フローティング表示にしたWindowsの言語バーにはそういう機能が無いようで、直接入力の時でも常に言語バーが出っぱなしになってしまうのです。

普段の利用とか開発の時とかはそれでも別にいいんだけど、全画面表示でDVDとかBDとかを鑑賞したり、Adobe IllustratorやSAIとかの画面をなるべく広く使いたいアプリケーションを使う時なんかには、これが邪魔になる。

じゃあタスクバーに入れとけばいいじゃんって話なんだけど、タスクバーを縦置きして且つ自動で隠すようにしてる僕の環境では、ぱっとデスクトップの右下に目をやった時にIMEがONなのかそうでないのか(何も出てなければIMEがOFFになってて、ATOKパレットがあればIMEがONになってるってことですね)を判別できないので、そっちの方が不便が大きい。

JustSystem的にはこういう場合は言語バーを非表示にするかタスクバーにドッキングさせた上で従来通りのATOKパレットを使うようにしてくれって事らしい。でもそれも何だか芸がないですよね。できれば新しい物を使いたいし、古いオプションがいつまで残るかなんてわかんないし。乗り換えられるようになったらさっさと乗り換えておいた方がいいという事は、自作アドオンのせいでFirefox 1.5にロックインされてFirefox 2にいつまでも移行できなかった時にも痛感したし。だいたい、従来のATOKパレットではアプリケーションを切り替えたタイミングとかで、切り替え後のウィンドウの方でIMEが無効になってる時でもたまにATOKパレットが出っぱなしになることがあったから、以前のやり方に戻しても万全じゃないのです。

それでもうちょっと検索してみたら、そういう事をはてなで訊いてる人がいて、その回答の中でXLangBarというユーティリティが紹介されてた。昔なつかしVzエディタの作者の方の手による物だそうだ。最終リリースが2006年だったりWindows XP+MS-IME2002専用と書いてあったりで、Windows Vista+ATOK2011な僕の環境では動かないんじゃなかろうかとも思ったんだけど、試してみたらばっちり動いた。多分、Windows標準の言語バーを使ってる物だったら何でも使えるんだと思う。Windowsの多言語入力の仕組みが変わらない限りはしばらくは安心して使い続けられる……かな……?

追記。64bit版のWindows 7で試してみたら、XLangBarは起動するものの、機能しないという結果だった。Windows 7だからアウトなのか64bitだからアウトなのかは不明です。

続きを表示する ...

msysgitとTortoiseGitの組み合わせでSSHでの接続に失敗する - Nov 10, 2010

SubversionからGitに移行したまとめには書いてなかったけど、TortoiseGitを使うと git@github.com:piroor/treestyletab.git とかのcloneやpullに失敗するという現象に遭遇した。「じゃあ諦めてmsysygitのbashコンソールからやるか……」で今まではなんとかなってたんだけど、これもいつの間にか動かなくなってた。「fatal: the remote end hang up unexpectedly.」とか言われる。

僕は会社でメインで使ってるUbuntuの上で作ったOpenSSHの鍵を使ってて、Windows環境ではそれをPuTTY形式の鍵に変換して使ってる。変換がうまくいってれば、OpenSSHの公開鍵をauthorized_keysに登録してあるサーバに対してもPuTTYで接続できる事を確認済み。pagent.exeが起動していてそいつにPuTTY形式の鍵が読み込まれていれば、パスフレーズの入力も省略できる。

なのにGitではうまくいかない。

TortoiseGitでSSHできない件についてはTortoiseGit 1.5.8付属のTortoisePlink.exeのバグらしい。次のリリース版では直ると書いてあるけど、今使えないんじゃ困る……なので、TortoiseGitの設定ダイアログのNetworkの所でSSH Clientに「C:\Program Files\TortoiseGit\bin\TortoisePlink.exe」の代わりに「C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe」(TortoiseSVN付属のTortoisePlink.exe。こっちはこのバグがない。)を指定して回避することにした。

これでGUI(TortoiseGit)からはcloneしたりpullしたりpushしたりできるようになったんだけど、msysgitのbashからは相変わらずpullも何もできなくてやっぱり「fatal: the remote end hang up unexpectedly.」って言われる。

エラーメッセージで検索してたら、英語圏のフォーラムの記事が引っかかったんだけど、読み進めてるうちにGIT_SSHという環境変数が関係してるらしいという事が分かった。bashコンソール等でSSH経由での接続を試みる時は、Windowsの環境変数でGIT_SSHに入ってる物がSSHのクライアントとして使われるみたいだ。早速システムのプロパティで確認してみたら、大当たりだった。「C:\Program Files\TortoiseGit\bin\TortoisePlink.exe」とバグ持ちのSSHクライアントのパスが入ってたので、「C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe」を指定し直しておいた。bashコンソールを起動し直してもう一度試したら、ちゃんとpullできるようになってた。

TortoiseSVNだとフォルダを複数選択してまとめてチェックアウトでワーキングコピーを最新の物に更新できてたんだけど、TortoiseGitだとそれがうまくいかないようだったので、こういうbashスクリプトで代用しようとして、Windows環境だとgitにパスが通ってない(Cygwinとmsysygit両方入ってる環境だから敢えてmsysgitにはパスを通してない)から

for dirname in *
do
  if [ -d $dirname/.git ]
  then
    cd $dirname
    echo "pull: $dirname"
    "/c/Program Files/Git/bin/git.exe" pull
    echo "submodule update: $dirname"
    "/c/Program Files/Git/bin/git.exe" submodule update --init ""
    "/c/Program Files/Git/bin/git.exe" submodule foreach 'git fetch;git c he cko ut  origin/master'
    cd ..
  fi
done

としてたんだけど、それがうまくいかなかったからムキーッとなってたんだけど、うまくいくようになってよかった。

SubversionからGitに移行した - Nov 01, 2010

アドオンの開発にはずっと須藤さんに用意してもらったSubversionのリポジトリを使ってたんだけど、

  • インターネットに繋がらない状態でコミットできないのが辛い
  • 他の人からの変更を受け取りづらい(そんな事があればの話なんだけど)

と思っていて、Git(あるいは他の分散型バージョン管理システム)ならそれが解消されると期待してて、でもずっと移行できていなかった。

  • コマンドライン操作が嫌いなので、Subversionを使うのにWindowsではTortoiseSVNを、LinuxではRabbitVCS(旧称:NautilusSVN)を使ってるけど、GitではWindowsにはTortoiseGitがあってもLinuxでは相当する物が無いみたい。
  • バージョン管理システムを移行するとそれまでのコミットの履歴も全部なくなっちゃうんじゃないの?
  • git-svnっていうのを使うといいと聞いたけど、試しても空のディレクトリしかできないんですけど……

というのがその理由だった。でも

  • git-svnは時々動作がうまくいかない事があるみたいで、Windows上のmsysgitが特に高確率で失敗するだけで、VirtualPC上のUbuntu 10.04LTSのgit-svnだとそれほどでもなかった。
    • それで成功したケースだとコミット履歴が完全に引き継がれてた。なんだ、ちゃんと動けばちゃんとやってくれるんじゃん!!!
  • 最近、システムモニターの開発でGitをずっと使ってたから、まあLinux上ではコマンドラインでも別にいいかな……という気がしてきた。

という事で、思い切って移行してみる事にしました。具体的な手順はSourceForge.JP のプロジェクトを Subversion から Git へ移行するに従いました。

SubversionとGit

大まかに言うとこういう事だと僕は理解してる。

  • Subversionでは、中央に1つのリポジトリがあって、それを各人がチェックアウトしてワーキングコピーを作り、ワーキングコピーに対して行った変更をリポジトリにコミットする、という形で「バージョンの管理」と「成果の共有」を実現する。
  • Gitでは、リポジトリのコピーを誰でも簡単に手元に作る事ができて(Gitではこれをcloneと言う)、Subversionでワーキングコピーからリポジトリに変更点をコミットするのと同じように、Gitではリポジトリとリポジトリの間で変更点をコミットできる(Gitではこれをpushとかpullとか言う)。
    • どれか1つのリポジトリを「中央のリポジトリ」として運用すれば、Subversionでのバージョン管理と同じような運用もできる。
    • 手元にできるのは「履歴の情報を持たないワーキングコピー」ではなく「元のリポジトリを複製したリポジトリそのもの」なので、インターネットに繋がってない状態でもローカルのリポジトリに対してコミットできる。
    • Subversionではtrunkと呼ばれていた物は、Gitではmasterと呼ばれる。
  • git-svnは、以下のような事をする。
    • Subversionのリポジトリのコミット履歴を全部辿る。
    • ローカルに新しいGitリポジトリを作って、Subversionのコミット履歴に対応するコミットを順番にそのGitリポジトリにコミットする。
    • なので、git-svnでGitリポジトリ化したSubversionリポジトリは、元のリポジトリの変更履歴を完全に引き継いだ物になる。

やってみる

ツリー型タブSubversionリポジトリをgithub上の同名のリポジトリに移行する手順を振り返ってみる。

  1. Subversionのリポジトリをgit-svnでGitリポジトリに変換する。
    $ git svn clone --prefix svn/ -s https://www.cozmixng.org/repos/piro/treestyletab
    これでローカルにtreestyletabという名前のディレクトリができて、これがGitリポジトリになってる。コミットを1件1件取り込むので、コミット数が多いとメチャメチャ時間がかかるけど、黙って待つ。たまに失敗するので、そういう時はできたゴミディレクトリを消してもう一度やり直す。
  2. githubに「treestyletab」という名前でリポジトリを作る。(分かりやすくするためにSubversionの物と同じ名前にするといい。リポジトリ名は後でgithub上で好きなように変更できるので。)これで、読み書き両用のURLとして「git@github.com:piroor/treestyletab.git」みたいなのが使えるようになる。
  3. ローカルにできたtreestyletabのGitリポジトリの「元」として、githubのリポジトリを登録する。
    $ git remote add origin git@github.com:piroor/treestyletab.git
    これによって、「このリポジトリはgithubのリポジトリをcloneした物ですよ」「このリポジトリに行われた変更を元のリポジトリにpushする時は、githubにpushしますよ」ということになる。
  4. pushする。
    $ git push origin master
    これで、Subversionのリポジトリから持ってきたコミット履歴が全部github上のリポジトリに反映される。
  5. Subversionのtagsの内容をGitのtagに変換する。Subversionでtags以下に作ったタグはブランチとして取り込まれているので、これをGitのタグにしてやる。
    $ git branch -r
    これでブランチの一覧を見れるので、
    $ git checkout svn/tags/0.10.2010102501
    という風にしてブランチを切り替えて
    $ git tag 0.10.2010102501
    でタグを打って
    $ git push --tags origin
    でタグの情報をgithubのリポジトリにpushする。タグの数だけこの操作を繰り返す。
  6. Subversionのbranchesにブランチがある場合、Gitのbranchに変換する。Gitだとローカルにあるブランチをgit push origin ローカルリポジトリのブランチ名:リモートリポジトリのブランチ名でリモートリポジトリにpushできるんだけど、git−svnでcloneしたローカルリポジトリにあるブランチはそのままだとpushできない(不可視のブランチになってる?)ようなので、
    $ git checkout svn/my-branch
    でブランチを切り替えて
    $ git branch my-branch
    で普通のブランチとして切り直して
    $ git push origin my-branch:my-branch
    でgithubにpushする。

自分はアドオンの数自体20個以上あるし、それぞれアホみたいに何度もリリースしててタグの数がハンパないことになってるので、全部手動でやることを考えたら気が遠くなりました。なのでこういうスクリプトをRubyで書いてみました。

#!/usr/bin/ruby

SVN_REPOSITORY_PATH = "https://www.cozmixng.org/repos/piro/<%= src_project_name %>"
GIT_REPOSITORY_PATH = "git@github.com:piroor/<%= dest_project_name %>.git"

$LOAD_PATH.unshift(File.dirname(__FILE__))

require "fileutils"
require "erb"
require "shellwords"

def main
  ARGV.each do |arg|
    p "process #{arg}"
    args = arg.split(":")
    src_project_name = args[0]
    dest_project_name = args.size > 1 ? args[1] : args[0]
    svn_to_git(src_project_name, dest_project_name)
  end
end

def svn_to_git(src_project_name, dest_project_name)
  p "svn:#{src_project_name}, git:#{dest_project_name}"
  clone(src_project_name)
  push(src_project_name, dest_project_name)
  push_branches_and_tags(src_project_name)
rescue Exception
  p $!
end

def clone(src_project_name)
  result = run("git", "svn", "clone",
               "--prefix", "svn/",
               "-s", ERB.new(SVN_REPOSITORY_PATH).result(binding).chomp)
    p result.to_s
  raise Exception.new("clone of #{src_project_name}, #{result.to_s}") unless result.to_s.include?("Checked out HEAD:")
end

def push(src_project_name, dest_project_name)
  FileUtils.cd(src_project_name) do
    result = run("git", "remote", "add",
                 "origin", ERB.new(GIT_REPOSITORY_PATH).result(binding).chomp)
    p result.to_s
    result = run("git", "push", "origin", "master")
    p result.to_s
    raise Exception.new("push of #{src_project_name}, #{result.to_s}") unless result.to_s.include?("master -> master")
  end
end

def push_branches_and_tags(src_project_name)
  FileUtils.cd(src_project_name) do
    branches = run("git", "branch", "-r")
    branches = branches.to_s.split("\n")
    branches.each do |branch|
      next unless branch.include?("svn/")
      branch.strip!

      name = branch.split("svn/")[1]
      next if name == "trunk"

      if name.include?("tags/")
        tag = branch.split("tags/")[1]
        p run("git", "checkout", branch)
        p run("git", "tag", tag)
        p run("git", "push", "--tags", "origin")
      else
        p run("git", "checkout", branch)
        p run("git", "branch", name)
        p run("git", "push", "origin", "#{name}:#{name}")
      end
    end
  end
end

def run(*args)
  command_line = Shellwords.shelljoin(args)
  result = `#{command_line} 2>&1`
  result
end

main

ファイル名は svn-to-git.rb として、

$ ./svn-to-git.rb treestyletab

とやると、ここまでの手順のうちgithubのサイト上でリポジトリを作る所以外を全部自動でやってくれるという物です(ということは、スクリプトの実行前にあらかじめgithubのサイト上でリポジトリを作っておかないといけない)。これでなんとか全部のリポジトリをgithubに持ってくることができましたXUL/Migemoの辞書をSQLiteにしてみようとかそういうブランチを切ってた物が取り込めてなかったりsvn:externalsで参照してた物が入ってなかったり、Subversionに突っ込んでから1回もコミットしてないプロジェクトをまだgithubに持ってきてなかったり(必要あるの? 無いよね?)という課題は残っていますが。→ブランチの取り込み方が分かったので追記しました。→svn:externalsの移行は諦めてsubmoduleにすることにしました。TortoiseGitでメニューから「Submodule Add」を選んでリポジトリにgit@github.com:piroor/makexpi.gitを、パスにbuildscriptを指定する、という手順でだいたい同じような結果になるみたい。更新の時はTortoiseGitだと「Git Sync」から「Submodule Sync」しないといけないようだ。コマンドラインなら一発で更新できるようなんだけど……

今後はgit-svn駆け込み寺あたりを熟読して頑張っていきたいと思っております。あと、今後具体的にコードを提供してくれるような人がもしいれば、githubの方にpull requestっていうんですか?するようにしてもらえたら幸いです。

……というまとめエントリを書こうとしてもうちょっと調べ直してたら、git-svnでタグが自動で取り込まれないとかの問題を解消するラッパーのsvn2gitという物があるということを今更知りました。ギャフン!!!!!

……さらに後から気がついたけど、HTTPでアクセスできる公開のSubversionリポジトリをgithubに移行するだけならtagやbranchの変換も含めてgithubのWebインターフェース上の機能だけでサクッとできてしまうことが分かりました。ギャフンギャフン!!!!!!!!! 手順は以下の通りです。

  1. githubで新しいリポジトリを作る。
  2. 空のリポジトリができたら、最初に表示されてる説明の下の方にある「Subversionのリポジトリを取り込みたい? ここをクリック」というリンク(日本語のUIにしてる場合。英語でも多分似たような文言があると思う。)を辿る。
  3. インポート元のSubversionリポジトリのURLを入力する。
  4. githubのユーザ名( 「piroor <piro.outsider.reflex@gmail.com>」のような、githubのユーザ名と登録済みのメールアドレスの組み合わせ)を作者として入力する。
  5. しばらく待つ。

最初githubのUIを英語で使ってたのと、下までスクロールしてなかったから気がついてなかった。なんということでしょう。丸1日以上を無駄にしてしまいました。

さくらのレンタルサーバ スタンダードプランでrep2 - Jun 08, 2010

いくつか前例はあるようだ。

僕の契約はスタンダードプランなんだけど、複数ユーザでFreeBSD 7のサーバを共用してる状態で、管理者権限は無い。クライアントはUbuntu 10.04。という前提で。

sshの準備

何はともあれ、まずはリモート操作のための準備を整える。

ssh ユーザ名@ドメイン名

これでsshでログインできるんだけど、いちいちパスワードを訊かれてしまう。なのでsshの公開鍵を置いておくことにした。

  1. 1回、上記の要領でSSHでログインする。
  2. mkdir .ssh
  3. chmod 700 .ssh
  4. vi .ssh/authorized_keys
  5. ローカルにある公開鍵(~/.ssh/id_rsa.pubなど)の内容を貼り付けて、ファイルを保存する。
  6. chmod 600 .ssh/authorized_keys
  7. exit

再度上記の要領でsshでログインを試みると、今度はパスワードを訊かれなくなる。scpも。

rep2設置

  1. p2拡張機能パックの「依存ライブラリ込み」のファイル一式をダウンロードする。今回は rep2ex-100227-0215.7z を使った。
  2. ファイルを展開する。
  3. cd rep2ex-100227-0215-with-deps
  4. tar zcvf rep2.tar.gz rep2 で再圧縮する。
  5. scp ~/rep2.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  6. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  7. mkdir ~/p2data でWebから見えない位置にデータディレクトリを用意する。
  8. tar zxvf rep2.tar.gz で展開する。
  9. mv rep2 www/ でWebから見える位置に移動。
  10. パーミッションを設定する。
    1. chmod 705 www/rep2
    2. cd www/rep2
    3. find . -name "*.php" -type f -print | xargs chmod 705
  11. vi conf/conf_admin.inc.php で初期設定を変更する。
    • $_conf['data_dir']などで指定しているデータディレクトリの位置を、先程作ったデータディレクトリへのパスに書き換える。 ~/p2data/ にデータディレクトリがあってrep2のindex.phpが ~/www/rep2/index.php にあるという位置関係なら、値は "../../p2data/" になる。
    • どこからでもアクセスを受け付けるようにするなら、 $_conf['secure']['auth_host'] の値を 0 にする。
  12. http://ドメイン名/rep2/index.php にアクセスしてみる。

上記の参考エントリではこれだけでいけるという風に書いてあるんだけど、僕の場合はPHPのエラーで動かなかった。magic_quotes_gpcをOffにしろとかなんとか。

さくらのレンタルサーバのサーバコントロールパネルを見てみると「PHP設定の編集」というのがあったので、ここを見てみたところ、デフォルトの設定に対して必要な設定項目だけ上書き指定できるようだったので、magic_quotes_gpc = Off と記入して保存した。その後再度rep2のページにアクセスしてみた所、今度はちゃんとユーザ登録用のフォームが表示された。

ローカルのrep2のログを引き継ぐ

実はローカルで今までrep2を動かしてたので、そのログや「お気にスレ」などのデータを引き継ぎたかった。ローカルのデータは ~/public_html/rep2/data/ に置いてた、という前提で。

  1. exit (sshでサーバに入ったままなのであれば)
  2. cd ~/public_html/rep2
  3. tar zcvf data.tar.gz data で圧縮する。
  4. scp ~/data.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  5. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  6. tar zxvf data.tar.gz で展開する。
  7. rm -r p2data
  8. mv data p2data
  9. rm p2data/p2_auth_user.php で古い認証ユーザの設定を削除する。
  10. http://ドメイン名/rep2/index.php にアクセスしてみる。

今まで見てたスレの過去ログが見えるようになっていれば成功。

余談

今回の事で、さくらのレンタルサーバにsshで入る方法を習得した。もう少し色々試したら、定期的にサーバにある内容をまとめて圧縮してバックアップということもできるようになれるかな。なれるといいな。

TortoiseSVNのNautilus(Gnome)向けクローン、NautilusSVNじゃなくてRabbitVCS - Jan 13, 2010

svnをコマンドラインで使うのはどうにも慣れなかったので以前UbuntuにNautilusSVNを入れて使ってたんだけど、リポジトリからアップデートしようとしたらアップデートできなくて、どうした事だと思って目視してみたら、RabbitVCSという名前に変わったよとあったので、そっちから最新版をダウンロードしてインストールした。Ubuntu 9.10でも使えるdebパッケージがあったのでそれを使った。

おおおおお。なんか凄く完成度上がってる。日本語のロケールも入ってるし、メニュー項目にアイコンが付いて、見た目もますますTortoiseSVNそっくりになってる。コミットログに日本語を書けない問題が修正されてるかどうかはまだコミットしてないので分からないけど、日本語ロケールが入ってるくらいだから多分大丈夫なのかなあ。→大丈夫だった。他にも、ログ一覧を見たりタグを簡単に打てたり、TortoiseSVNでよく使う機能がちゃんと移植されてて助かりまくりです。

TwitterIrcGatewayからRTできるように - Jan 04, 2010

半年くらい前真琴さんの記事を見てTwitterIrcGatewayを導入したけど全然使いこなせてなかったけど他の人が他の人に教えてもらってるのを横で盗み見て設定したらちょっと使いこなせるようになった気がしたよ。

酷く今更です。

NSISで"string".split(" ").forEach(...) みたいなことをやりたい(文字列を分割してそれぞれの要素に対し処理を実行) - Aug 31, 2009

INIファイルから文字列を読み込んで、それを空白(カンマ、コロン、パイプ、など何でもいいけどとにかく区切り文字)で区切ってループ回す、ということをNSISでやろうと思ったらどうやるのがスマートなんだろうか。

とりあえず見よう見まねと試行錯誤でこんな感じに書いたら一応期待通りに動いた。

!include "LogicLib.nsh"
!include "WordFunc.nsh"
!insertmacro WordFind

(中略)

Var STRING
Var PART
Var INDEX

(中略)

StrCpy $STRING "aaa bbb ccc ddd"
StrCpy $INDEX "0"

${While} 1 == 1
  IntOp $INDEX $INDEX + 1
  ${WordFind} $STRING " " "+$INDEX" $PART
  ${If} $INDEX > 1
    ${IfThen} $PART == $STRING ${|} ${Break} ${|}
  ${EndIf}
  Call MyFunction
${EndWhile}

${WordFind}の第1引数が元の文字列、第2引数が区切り文字で、第3引数に「その文字で区切った後の配列の何番目の要素か(添え字は1から始まる)」を指定すると、第4引数の変数に要素の内容に相当する文字列が格納される。0番目あるいは配列の長さ(に相当するもの)よりも大きな数字を第3引数に渡すと、返り値は元の文字列そのままとなるので、これを脱出条件としてループさせてみた。

9月2日追記。配列(のようなもの)の長さが1つの時のことを考慮してなかったので修正した。

SAIで別のマシンで使ってたパレットを引き継ぐ - Jun 20, 2009

新PCにしてから一度もSAIを起動してなかったというかインストールすらしてなかったので、インストールした上で旧PCから救出した設定ファイルっぽいファイルを上書きして起動してみたところ、カラーパレットの中身がカラッポになってしまった。

他の部分はせいぜいペン先の太さ程度しかカスタマイズしてなかったのでまあ諦めてもいいんだけど、カラーパレットは……「これだ!」と思ったふぉくす子&さんだば子の色を控えてあったので、なくなるのはとても痛い。なのでどうにかしてインポートできないか試行錯誤してみた。

  • SSTというツールを使えばSAIのカラーパレットをファイルとしてエクスポートしたり逆にインポートしたりすることができるらしいんだけど、現行最新版のSAI 1.1には対応してないらしい。
    • そもそも、これを使おうと思ったら旧バージョンのSAIが正常に機能しており且つカラーパレットの中身が見えている環境が必要。それは僕の場合はつまり、HDDがイカレ気味な上に使えるビデオカードがないせいで死亡状態で放置しているWindows 2000マシンをどうにかして動く状態にしなきゃいけないってことだ。それは無理。
  • カラーパレットの内容等はsai.ssdというファイルに保存されているそうなので、解析してみるか?と思ったけど、中身はバイナリでとても手に負えそうになかったので諦めた。

だいぶ諦めモードになったところで、「Windowsのユーザ名が同じだったら、別のマシンで使ってたsai.ssdを引き継げる」という情報に辿り着いた。実は以前のWindows 2000では主に「SHIMODA Hiroshi」というスペース混じりの長いアカウント名で使ってて、そういうアカウント名を考慮してないツールで時々苦労してたので、Vistaの新マシンではメインのアカウント名は「piro」にしていた。なので、SHIMODA Hiroshiという名前のアカウントを作ってそっちで旧環境から吸い出したSAIのインストールフォルダのsai.exeを起動してみたところ、ツール類の配置は初期化されてたけどパレットの中身は引き継がれた状態で起動できた。

この状態のスクリーンショットを撮って「ペイント」で保存し、ユーザを切り替えて今のメイン環境の方でSAIを起動し直して、スポイトでちまちま色を拾い直すことで、パレットをどうにか引き継げた。 (救出の様子) 画像の左側がスクリーンショットで、右側が今の環境のSAIのパレット。スクラッチパッドの中身は引き継ぎようがなかったので、ここの色もパレットに拾っておくことにした。

UIに関して言えば、SAIのオレオレ設計は絵を描く時にはストレスなく使えていいんだけど、こういう設定まわりとかはオレオレ設計になってると非常に困る。Illust Studioに乗り換えてしまおうかとちょっと本気で思ったよ。

Illustrator CS4でアートボードの大きさでPNG出力する手順 - Jun 11, 2009

世間的にすごい今更だと思うけど、今日やろうとして詰まったのでメモしておく。

Illustrator CS2を使ってた時は、以下のような感じだった。

  • 何も考えずにPNG出力しようとすると、アートボード(用紙サイズ)より外側にあるオブジェクトまで含めたドキュメント全体をPNG出力してしまう。
  • 何も選択してない状態で「オブジェクト」→「クリエイト」→「トリムマーク」とすると、アートボードのサイズのトリムマークが表示される。この状態でPNG出力すると、アートボードの範囲の内容だけがPNG出力される(それ以外の部分はトリミングされる)。

しかしIllustrator CS4では、「オブジェクト」メニューに「クリエイト」が無い。

  • 代替の機能は「効果」の方の「トリムマーク」らしいんだけど、何も選択してない状態でこれを実行しても何も起こらない。
  • 何かオブジェクトを作ってそれにこの機能でトリムマークを付けてみても、PNG出力の時の結果は変わらない(アートボードの外側まで出力されてしまう)。

実は、IllustratorはCS4から複数のアートボードをサポートするようになって、印刷や出力の基本単位はアートボードごとということになっているらしい。なので以下のようにすれば、CS2の時の結果と同様、アートボードの大きさでトリミングされたPNG画像を得ることができる。

  • 「書き出し」を選択して、表示されるファイルおよび出力フォーマット選択のダイアログが表示されたら、まずファイル形式としてPNGを選択する。
  • 次に、ダイアログの左下にある「各アートボードごと」にチェックを入れる。(ダイアログを開いた直後に選択されている形式では、このチェックボックスがグレイアウトしている)
  • ファイル名を入力して「保存」をクリックすると、アートボードの大きさにトリミングされたプレビューが表示される。そのまま確定すれば、プレビューの通りにトリミングされたPNG画像を得られる。

ということでこの件については解決された。しかし「アートボードとぴったり同じ大きさの矩形オブジェクト」を作るのが面倒になったのはやっぱり頂けない(CS2だと、トリムマークを作ってそのまま解除すれば、アートボードと同じ大きさの矩形オブジェクトを得ることができた)。

Google Chrome 2.0の拡張機能 - May 14, 2009

前に@google.comなアドレスからメールが来たと書いたけど、その続き。またメールが来た。「前に約束したとおり、Chromeの拡張機能のフレームワークの開発方法について情報をアップデートしたよ!」とな。

ということで内容が増えてた。

僕が気になったのはToolstripsという項目。どうやら、GreasemonkeyのようなことだけでなくUIの方にも手を加えられるようにしようという話の1つの結論がこういうことのようだ。サンプルとして置いてある物のスクリーンショットにあるウィンドウ下部のボタンがそれっぽい。

HTMLでボタンを定義しておくと、ステータスバーの領域にそれが表示されるようになるようだ。既存のUI部品の大改造はできないけど、新しいボタンを追加するという事に関してはこれでできるし、ひょっとしたら使い方次第でもっといろんな事ができるのかも知れない(触らないうちから妄想で書いてます)。

Page 1/248: 1 2 3 4 5 6 7 8 9 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき