アーカイブ

‘TIPS・メモ’ カテゴリーのアーカイブ

DTV関係のツール追加

2009 年 11 月 1 日 GURA7 コメントはありません

DTV関係のツールとして、SimpleDiskSpaceManagerを追加しました。
指定ディレクトリで、指定された空き容量が確保されるまで古いファイルから順に削除していくソフトです。コマンドラインから引数を指定することで実行します。常時監視ではなく好きなタイミングでファイル消去、容量確保をしたい方におすすめです。

http://gura7.com/develop/dlpage/dtv/

カテゴリー: TIPS・メモ タグ:

DTV関係のソースなど

2009 年 10 月 31 日 GURA7 コメントはありません

ご無沙汰です。いろいろと楽しいおもちゃを買ってしまって、更新サボってました!

DTV関係のソースとスクリプトをアップしました。
http://gura7.com/develop/dlpage/dtv/

完全に自分の都合で作ったソースとスクリプトですが、もしかしたら誰かの役に立てるかもってことで公開しときます。
そこで公開しているperlは初めて触ったのですが、正規表現は超便利ですね。
文字列操作はもう正規表現が無いとやってられないぐらい便利です。驚いた。

リンク先にも書いてますが、DTV関係の質問には答えられません。そこんとこよろしく。

カテゴリー: TIPS・メモ タグ: , ,

jQueryプラグインでデスクトップっぽいページを作る方法

2009 年 8 月 8 日 GURA7 コメントはありません
gura7.com

gura7.com

gura7.comみたいなデスクトップっぽいページを作る方法。

まず、mb.ideas.repositoryにアクセス。gura7.comはこのページをベースに作る。mb.ideas.repositoryは様々なjQueryプラグインを公開してくれているところで、今回のデスクトップっぽいインターフェイスの他にも面白そうなプラグインがいっぱい。

このデスクトップっぽいインターフェイスを作っているプラグインはmbContainersPlusなので、これをダウンロードする。

ダウンロードしたものにサンプルが入っているので、これを元に作っていく。(今回はさらに楽をするため、mb.ideas.repositoryのファイルを元に作った)意外に難しくはなく、ウィンドウは実は移動可能なdivタグであることに気づく。ユーザはまとまったdivタグをhtmlに追加し、class属性でウィンドウのスタイルを指定するだけ。ウィンドウのスキン(色など)はcssで指定できる。


  <div class="containerPlus draggable resizable {buttons:'m,c,i', icon:'browser.png', skin:'white', width:'500',iconized:'true', dock:'dock', grid:100}" style="top:100px;left:400px">
    <div class="no"><div class="ne"><div class="n">preiconized container</div></div>
      <div class="o"><div class="e"><div class="c">
        <div class="mbcontainercontent">
          <div class="evidence">
            <h3>And this is a preiconized container!</h3>
            <p>to preiconize containers just add the param <span style="font-weight: bold;">iconized:'true'</span></p>
          </div>
          <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras metus. Maecenas justo elit, lacinia sit amet, cursus ut, sagittis sed, eros. Suspendisse potenti. Maecenas nec nisi. Donec vestibulum sollicitudin tellus. Sed consequat pellentesque ante. Vestibulum turpis quam, vulputate nec, nonummy convallis, ultrices congue, ligula. Ut rutrum leo et orci. Proin pharetra. Nam non sem ut eros fringilla ornare. In ullamcorper lorem eget ipsum. Suspendisse semper enim in arcu cursus consectetuer. Suspendisse potenti. Proin libero eros, adipiscing quis, volutpat in, ultrices ut, lacus.</p>
          <p>Nulla facilisi. Vestibulum vel magna in ante lobortis semper. Integer posuere justo et urna. Vestibulum sit amet sapien ut quam tempor fringilla. Fusce a neque a enim mattis dapibus. Ends with a paragraph element!</p>
        </div>
      </div></div></div>
      <div >
        <div class="so"><div class="se"><div class="s"> </div></div></div>
      </div>
    </div>
  </div>

これでデスクトップっぽいインターフェイスはできあがり。mb.ideas.repositoryみたいな派手なエフェクトは本家を参照。私もソースコードを頂いて真似しただけなので。

さらにブログのRSSを読み込んで、ウィンドウを生成するスクリプトも追加している。RSSの読み込みはjFeedプラグインを使用。

function makeContainersFromRSS(url){
	$.getFeed({
    url: './proxy.php?url=' + url, //proxy.phpはダウンロードしたファイルのもの
    success:
    function(feed){
			$.each(feed.items,
				function(i,item){
				  if(i < 5){
					  $("<div/>")
						  .attr({id:item.title, width:"400", height:"", buttons:"m,c", icon:"blog.png",skin:"white"})
						  .css({left:-2500})
						  .addClass("containerPlus")
						  .addClass("draggable resizable")
						  .addClass("blog")
						  .append(
						    $("<div/>").addClass("no").append(
							    $("<div/>").addClass("ne").append(
								    $("<div/>").addClass("n").html("<a href=\"#\" onclick=\"$(this).parents('.containerPlus').find('.minimizeContainer').click();\">"+item.title+"</a>")
							    )
						    ).append(
							  $("<div/>").addClass("o").append(
								  $("<div/>").addClass("e").append(
									  $("<div/>").addClass("c").append(
										  $("<div/>").addClass("content").html(
											  (item.image?"<img src=\""+item.image+"\" alt=\""+item.id+"\" />":"")+
											  "<p>" + item.description + "</p>" +
											  (item.link?"<p style=\"float:right;\"><a class=\"button special\" href=\""+item.link+"\"><span>"+ "続きを読む" +"</span></a></p>":"")
											  //(item.link?"<p style=\"float:right;\"><a class=\"button special\" href=\"#\" onclick=\"loadPage('"+item.link+"'"+(item.type=="develop"?",'"+"blog"+"'":"")+")\"><span>"+ "続きを読む" +"</span></a></p>":"")
											  )
										  )
									  )
								  )
						    ).append(
							  $("<div/>").append(
								  $("<div/>").addClass("so").append(
									  $("<div/>").addClass("se").append(
										  $("<div/>").addClass("s")
										  )
									  )
								  )
						    )
					    )
						  .appendTo("body")
						  .buildContainers({
						    containment:"document",
						    elementsPath:"elements/"
			        });
			    }
			  }
			);
		}
	});
}

Twitterからの読み込みも上記を流用すれば可能。RSSは便利だわほんと。

JavaScriptはずっと敬遠してきて(なんかソースが汚いから)触ったことがなかったけど、意外なほどあっさりできてしまった。jQueryのおかげなのか、プラグインが充実したせいなのか分からないが、すごく読みやすくなっている気もする。楽しいー。

スターウォーズOPジェネレータ

2009 年 6 月 28 日 GURA7 コメントはありません

とある理由で、スターウォーズOPをパロったものを作ることに。
Ulead VideoStudioを持っているので、これで頑張って作ります。
文字列を変形してスクロールってのができない様なので、ちと工夫。
まず通常のスタッフロールのような動画を縦になが~く作る。
その動画を改めて合成し、変形を施す。
・・・なんてことをやっていたのですが、Youtubeでお手本を探していたら、

こんなんを発見。すげー。
それで作り方参考にしようと思って「東方ウォーズ」でググったらニコニコ動画にうp主コメントが。
曰く「スターウォーズOPジェネレータを拾ったから早速作ってみたんだよ! ■URLは ttp://alienryderflex.com/crawl/ だよ!」
じぇ・・・じぇねれーた・・・
俺の苦労はどこへ。
まー早めに見つけられてよかったよかった。
家にMac無いので明日研究室のマカーに試してもらおうと思います。

WAVEファイルの読み込み

2008 年 5 月 4 日 GURA7 コメントはありません

WAVEファイルをFFTなどを使って解析してみたかったので、
その過程でできたWAVEファイルの読み込みクラスを公開します。
言語はC#です。ご自由にお使いください。
動作保証はしませんよ。


class WaveReader : IDisposable
{
private struct Format
{
public Int32 ByteSize;
public Int16 ID;
public Int16 ChannelNum;
public Int32 SamplingRate;
public Int32 BytePerSec;
public Int16 BlockSize;
public Int16 BitPerSample;
//public Int16 ExSize;
//public byte[] ExData;
}
private struct WaveHeader
{
public string RIFF;
public Int32 FileSize;
public string Wave;
public Format Fmt;
public Int32 DataByteSize;
}
private FileStream _fileStream;
byte[] _buffer;
private int _bufferSize = 2048;
private WaveHeader _waveHeader;
private const int BYTE_SIZE = 1;
private const int WORD_SIZE = 2 * BYTE_SIZE;
private const int DWORD_SIZE = 4 * BYTE_SIZE;
private const int WORDTAG_NUM = 4;
private const int RIFF_OFFSET = 0;
private const int RIFF_BYTESIZE = 8;
private const int WAVE_OFFSET = RIFF_BYTESIZE;
private const int WAVE_BYTESIZE = 4;
private const string WAVETAG_FMT = "fmt ";
private const string WAVETAG_FACT = "fact";
private const string WAVETAG_DATA = "data";
private const string WAVETAG_LIST = "LIST";
public WaveReader()
{
_waveHeader = new WaveHeader();
}
public void Dispose()
{
}
public int BufferSize
{
get { return _bufferSize; }
set { _bufferSize = value; }
}
public int MaxByteSize
{
get { return _waveHeader.DataByteSize; }
}
public int BytePerSec
{
get { return _waveHeader.Fmt.BytePerSec; }
}
public byte[] ByteBuffer
{
get { return _buffer; }
}
public char[] CharBuffer
{
get
{
char[] ret = new char[_buffer.Length];
for (int i = 0; i < ret.Length; i++)
{
ret[i] = (char)_buffer[i];
}
return ret;
}
}
public string StringBuffer
{
get
{
char[] ret = new char[_buffer.Length];
for (int i = 0; i < ret.Length; i++)
{
ret[i] = (char)_buffer[i];
}
return new string(ret);
}
}
public void ReadFile(string fileName)
{
//リソース読み込み
_fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
ReadHeader();
}
public void ReadBuffer(int index)
{
_buffer = new byte[_bufferSize];
_fileStream.Read(_buffer, 0, _bufferSize);
}
private void ReadHeader(){
byte[] subBuffer;
int offset;
subBuffer = new byte[RIFF_BYTESIZE];
_fileStream.Read(subBuffer, 0, RIFF_BYTESIZE);
offset = 0;
_waveHeader.RIFF = new string(ByteToChar(subBuffer), 0, DWORD_SIZE); offset += DWORD_SIZE;
_waveHeader.FileSize = BitConverter.ToInt32(subBuffer, offset);
subBuffer = new byte[WAVE_BYTESIZE];
_fileStream.Read(subBuffer, 0, WAVE_BYTESIZE);
_waveHeader.Wave = new string(ByteToChar(subBuffer), 0, DWORD_SIZE);
for (int i = 0; i < WORDTAG_NUM; i++)
{
bool breakFlag = false;
string str;
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
str = new string(ByteToChar(subBuffer), 0, DWORD_SIZE);
switch (str)
{
case WAVETAG_FMT:
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
_waveHeader.Fmt.ByteSize = BitConverter.ToInt32(subBuffer, 0);
subBuffer = new byte[_waveHeader.Fmt.ByteSize];
_fileStream.Read(subBuffer, 0, _waveHeader.Fmt.ByteSize);
offset = 0;
_waveHeader.Fmt.ID = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.ChannelNum = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.SamplingRate = BitConverter.ToInt32(subBuffer, offset); offset += DWORD_SIZE;
_waveHeader.Fmt.BytePerSec = BitConverter.ToInt32(subBuffer, offset); offset += DWORD_SIZE;
_waveHeader.Fmt.BlockSize = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.BitPerSample = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
break;
case WAVETAG_DATA:
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
_waveHeader.DataByteSize = BitConverter.ToInt32(subBuffer, 0);
breakFlag = true;
break;
default:
breakFlag = true;
break;
}
if (breakFlag) break;
}
}
private char[] ByteToChar(byte[] buffer)
{
char[] ret = new char[buffer.Length];
for (int i = 0; i < buffer.Length; i++)
{
ret[i] = (char)buffer[i];
}
return ret;
}
}
カテゴリー: TIPS・メモ タグ: ,

Google AJAX Feed API

2008 年 3 月 31 日 GURA7 コメントはありません

スクリーンセーバ作ったら満足して更新が滞ってしまいましたorz
この前Google AJAX Feed APIってのを見つけたのでメモ代わりに記しておきます。
Google AJAX Feed API を使うとブログやホームページにRSSを表示することができます。
別のサイトのRSSも表示できてしまうところがポイントです。
私はコレを使ってホームページのトップに、Google AJAX Feed API を用いてブログのRSSを貼り付けました。
CSSを使って表示形式を自由に変えられるのでHPに合ったレイアウトを自分で作成することができます。
サンプルの時点で結構満足のいくものになっているので、サンプルのCSSに手を加えるなどしてコーディングするとよいと思います。

カテゴリー: TIPS・メモ タグ: , , ,