2011年4月22日金曜日
2010年11月16日火曜日
2010年8月13日金曜日
2010年7月27日火曜日
photoshopで移動とかするときにグリッドや端に張り付かないようにする
え~PhotoShopってかなり出来る子なんで、選択して移動とかするときグリッドや画像の端っことかにかってに張り付いてくれますよね、でもね
「よけーなことすんじゃねぇ」って思うときがたまにあるんですよね、
こう、マウステクを駆使してちょっとだけ、ほんの1pxだけとか移動したいのにグイってなっちゃうんですよね。そんなときは
上段メニューの[ビュー]にある[スナップ]のチェックをハズします。(photshop 6.0の場合)
これです。
これで移動とかするときスナップされなくなって微調整ができます。
「よけーなことすんじゃねぇ」って思うときがたまにあるんですよね、
こう、マウステクを駆使してちょっとだけ、ほんの1pxだけとか移動したいのにグイってなっちゃうんですよね。そんなときは
上段メニューの[ビュー]にある[スナップ]のチェックをハズします。(photshop 6.0の場合)
これです。
これで移動とかするときスナップされなくなって微調整ができます。
2010年7月24日土曜日
order byで激はまり
今日はクエリのorder byで激はまりしました
SQL SERVERだったんですけど
| id | no | num |
|---|---|---|
| 1 | 2 | 100 |
| 2 | 1 | 200 |
| 3 | NULL | 300 |
| 4 | NULL | 400 |
| id | no | num |
|---|---|---|
| 3 | NULL | 300 |
| 4 | NULL | 400 |
| 2 | 1 | 200 |
| 1 | 2 | 100 |
- noがNULLである行が最優先
- noがNULL以外の中でnumの値を降順でソートする
order byするときに複数のカラムを同時に見てソートするって出来るんでしょうかね?
で、苦労の末に出来上がったクエリがこれです。
select * from hoge order by no / no * num * -1;
2010年7月23日金曜日
2010年7月21日水曜日
あまりやりたくない、憂鬱な仕事をこなすにはどうするか?
やりたくない仕事だからってやらないといけないわけで・・・
退屈な仕事でもやらないと終わらないわけで・・・
終わりそうもない仕事でもやらないと終わらないわけで・・・
そんなときやる気を出すための方法をいくつか列挙してみる
退屈な仕事でもやらないと終わらないわけで・・・
終わりそうもない仕事でもやらないと終わらないわけで・・・
そんなときやる気を出すための方法をいくつか列挙してみる
- 目標をつくってみる
- ご褒美を用意してみる
- その仕事をやってなにか得るものはないかと考えてみる
- 仕事が楽しくなる方法は無いかと考えてみる
- とりあえず楽しいことを考えてみる
- 誰かと競争してみる
- わくわくするような何かを探してみる
- 誰かの為にがんばってみる
- 自分の為にがんばってみる
- 自分を褒めてみる
C++プログラマがLuaを勉強してみる第14回
テーブルは常に参照型です(キリッ
数値は参照型ではありません。
文字列は参照型かもしれませんが文字列を直接編集する事はできないので特に意識する事は無いと思います。
数値は参照型ではありません。
文字列は参照型かもしれませんが文字列を直接編集する事はできないので特に意識する事は無いと思います。
2010年7月20日火曜日
C++プログラマがLuaを勉強してみる第13回
◆C/C++からLuaを呼び出すためのライブラリをコンパイルしてみる
さて、今回はLua5.1.4とVisual Studio 2008を使ってライブラリをコンパイルしてみます。 STEP 1:ソースをダウンロード
まずはここからソースをダウンロードして解凍します。STEP 2:Visual Studio 2008でプロジェクト作成
VC++でWin32プロジェクトを作成します。
次にアプリケーションの設定をスタティックライブラリに設定します。
完了します。
STEP 3:srcの取り込み
ダウンロードしたlua-5.1.4.tar.gzを解凍してsrcフォルダSTEP 2で作成したプロジェクトの有るフォルダにコピーします。
srcフォルダ内の.cファイルと.hファイルをプロジェクトに取り込みます。
このとき下記のファイルは必要有りません。
- lua.c
- luac.c
- print.c
STEP 4:プロジェクトの設定
プリプロセッサの定義に_CRT_SECURE_NO_DEPRECATEを追加します。えーっとプロジェクトの設定とかあまり詳しくないので過不足あったらすいません。
STEP 4:ビルド
2010年7月19日月曜日
C++プログラマがLuaを勉強してみる第12回
◆C/C++からLuaを実行する
C++からLuaのコードを実行するサンプルをつくりました。C++からLuaのコードを実行するためのライブラリ(lib)のコンパイルは後日紹介します。
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
int main(int argc, char* argv[])
{
// LuaのVMを生成
lua_State *const L = lua_open();
// Luaの標準ライブラリを開く
luaL_openlibs(L);
while (true) {
// luaファイルを指定して実行する
if (luaL_dofile(L, "test.lua")) {
// エラー内容の取得
printf("error:%s\n", lua_tostring(L, -1));
lua_pop(L, 1);
return 0;
}
// 直接コードを指定する
if (luaL_dostring(L, "print('hello lua world')")) {
// エラー内容の取得
printf("error:%s\n", lua_tostring(L, -1));
lua_pop(L, 1);
return 0;
}
printf("\n");
printf("hit any key...\n");
printf("0 is exit\n");
const char c = getchar();
if (c == '0') {
break;
}
}
// LuaのVMを閉じる
lua_close(L);
return 0;
}
getchar()のところでtest.luaを編集ご実行すると編集内容が反映されます。
2010年7月18日日曜日
LIBCMT.libとMSVCRTD.libの競合
Luaのライブラリを利用しようとしたら出たエラーです。
ライブラリ(lib)がVC2005でコンパイルされていたので
VC2008のReleaseモードでコンパイルしたらでなくなりました。
LIBCMT.lib(_file.obj) : error LNK2005: ___iob_func は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup は既に MSVCRTD.lib(crtexe.obj) で定義されています。
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(dosmap.obj) : error LNK2005: __errno は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(lconv.obj) : error LNK2005: _localeconv は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(atox.obj) : error LNK2005: _atoi は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(strtol.obj) : error LNK2005: _strtoul は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
ライブラリ(lib)がVC2005でコンパイルされていたので
VC2008のReleaseモードでコンパイルしたらでなくなりました。
LIBCMT.lib(_file.obj) : error LNK2005: ___iob_func は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup は既に MSVCRTD.lib(crtexe.obj) で定義されています。
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(dosmap.obj) : error LNK2005: __errno は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(lconv.obj) : error LNK2005: _localeconv は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(atox.obj) : error LNK2005: _atoi は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(strtol.obj) : error LNK2005: _strtoul は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
2010年7月17日土曜日
相手の意見を頭ごなしに否定しない
誰しも有ると思いますが、相手よりも優位に立ちたい、自分の評価を上げたい等の心理からついつい相手の意見を否定したり、あらを探したりしてしまいがちですがそれだと仕事、人間関係ともにうまくいかない場合が多いのではないでしょうか?
そこで、相手の意見は出来るだけ否定せずに意見をよく理解してメリットデメリットを述べ、その上で自分の持っている意見を提示するのが良いのではないでしょうか。
そこで、相手の意見は出来るだけ否定せずに意見をよく理解してメリットデメリットを述べ、その上で自分の持っている意見を提示するのが良いのではないでしょうか。
2010年7月16日金曜日
PHPのforeachで$valueを参照型にする
PHP5以降foreachの$valueを参照型にすることができるんですね、今日知りました。
参照型にすると次のようなメリットがありますね
簡単なコード例を用意しました。
参照型にすると次のようなメリットがありますね
- コピー処理が実行されないのでループ処理が速くなる
- 配列内の各要素に処理をするのが楽
- 参照であるがゆえにプログラマが意図しない処理となってしまう場合がある
簡単なコード例を用意しました。
$num_array = array(1,2,3,4,5);
foreach ($num_array as &$value) {
$num += 1;
}
unset($value);
print_r($num_array);
2010年7月14日水曜日
2010年7月13日火曜日
SQL Serverでハイフンを含んだ文字列のソートが変
なんか、SQL Serverでハイフンを含んだ文字列のソートがうまくいかなくて困ったんですけど
って並んでほしぃのに
って並んでしまうんです。
んでいろいろ調べてみたんですがSELECTするときに「COLLATE Japanese_BIN」をつけるとうまくいきました。
select * from aaa order by name COLLATE Japanese_BIN
こんな感じです
A-10
A-30
A20
って並んでほしぃのに
A-10
A20
A-30
って並んでしまうんです。
んでいろいろ調べてみたんですがSELECTするときに「COLLATE Japanese_BIN」をつけるとうまくいきました。
select * from aaa order by name COLLATE Japanese_BIN
こんな感じです
EXCELで重複する行(レコード)を非表示にする
EXCELで重複する行(レコード)を非表示にするには
1.列を選択する
2.メニュー[データ]→[フィルタ]→[フィルタオプションの設定]を起動する
3.「重複するレコードは無視する」にチェックを入れる
でOK
1.列を選択する
2.メニュー[データ]→[フィルタ]→[フィルタオプションの設定]を起動する
3.「重複するレコードは無視する」にチェックを入れる
でOK
2010年7月12日月曜日
EXCELで奇数の行だけ色をかえる
EXCELで奇数の行だけセルの色を変更するには
- 適用するセル範囲を選択する
- メニューから「条件付き書式の設定」を起動する
- 「数式が」を選し「=MOD(ROW(),2)=1」を入力する
- 書式を設定する
2010年7月11日日曜日
PHPで32bitを超える数値を扱う場合の注意点
今日しごとで出た問題なんですけど、PHPのintval()って環境に関係なく32bitで丸められるみたいなんですよね。
下記のコードを実行してみてください
正しく表示されてたらすいません。
未確認ですが、intval()だけじゃなくてsprintf()などの%dも同様の問題が有るみたいです。、
下記のコードを実行してみてください
$a = 123456789; $b = $a * 100; print_r($b); print_r(intval($b))
正しく表示されてたらすいません。
未確認ですが、intval()だけじゃなくてsprintf()などの%dも同様の問題が有るみたいです。、
2010年7月10日土曜日
C++プログラマがLuaを勉強してみる第11回
◆コルーチンによるタイマスレッドみたいなの
を作ってみました。で、こんなの使うのだろうか。。。よくわかりませんw
isTimeout = false
--タイムアウトハンドラ
function timeOutHandler(_limit)
isTimeout = true
end
--タイマコルーチン用関数
function timer(_limit, callBack)
local limit = _limit --リミット
local startTime = os.time() --開始時間
local latest = os.time() --前回の時間
local countDown = _limit --カウントダウン用
print(countDown)
while true do
local time = os.time()
if startTime + limit <= os.time() then
break
elseif latest < time then
print(coroutine.status(co))
latest = time
countDown = countDown - 1
print(countDown)
end
coroutine.yield() --コルーチンを中断して処理をもどす
end
callBack(limit) --コールバック関数を呼ぶ
end
co = coroutine.create(timer) --コルーチンの生成
print(coroutine.status(co)) --ステータスの表示
--メインループ
repeat
coroutine.resume(co, 10, timeOutHandler) --コルーチンの開始と再開
until isTimeout
print(coroutine.status(co))
print("time out")
2010年7月9日金曜日
C++プログラマがLuaを勉強してみる第10回
◆Luaでテンプレートメソッドパターン
今回はLua初心者のくせにテンプレートメソッドパターンに挑戦してしまいました。テンプレートメソッドパターンについてはここ参照
無理矢理感が否めないので、ぜんぜんちっげーよ!ってコメント待ってます!
まずは、簡単にクラス図の説明を書きます。
なんかどっかでみたよーな命名ですが気にしない気にしない
CaffeineBeverageクラス(Superクラス)
△
|
----------------
| |
Coffeeクラス Teaクラス
以下ソースコード
CaffeineBeverage.lua
----------------------------------------
--CaffeineBeverageクラス
----------------------------------------
CaffeineBeverage = {}
-- new
function CaffeineBeverage:new(_caffeineBeverage)
local obj = {}
-- field
if _caffeineBeverage then
obj.name = _caffeineBeverage.name
else
obj.name = ""
end
self.__index = self
setmetatable(obj, self)
return obj
end
-- property
function CaffeineBeverage:set(_name)
self.name = _name
end
-- __tostring over ride
function CaffeineBeverage:__tostring()
return "name:"..self.name
end
-- clone
function CaffeineBeverage:clone()
return CaffeineBeverage:new(self)
end
-- prepareRecipe
function CaffeineBeverage:prepareRecipe()
CaffeineBeverage:boilWater()
CaffeineBeverage:brew()
CaffeineBeverage:pourInCup()
CaffeineBeverage:addCondiments()
end
-- boilWater
function CaffeineBeverage:boilWater()
print("お湯を沸かす。。。")
end
-- brew()
function CaffeineBeverage:brew()
error("have to override")
end
-- pourInCup
function CaffeineBeverage:pourInCup()
print("カップに注ぐ。。。")
end
-- addCondiments
function CaffeineBeverage:addCondiments()
error("have to override")
end
Coffee.lua
dofile("CaffeineBeverage.lua") -- C/C++で言うところの#include
----------------------------------------
--Coffeeクラス
----------------------------------------
Coffee = {}
-- new
function Coffee:new(_coffee)
obj = {}
-- field
if _coffee then
obj = CaffeineBeverage:new(_coffee)
else
obj = CaffeineBeverage:new()
end
-- clone (override)
obj.__index.brew = function()
return Coffee:new(self)
end
-- brew (overrice)
obj.__index.brew = function()
print("コーヒーをドリップする")
end
-- addCondiments (override)
obj.__index.addCondiments = function()
print("砂糖とクリープを加える")
end
return obj
end
Tea.lua
dofile("CaffeineBeverage.lua")
----------------------------------------
--Teaクラス
----------------------------------------
Tea = {}
-- new
function Tea:new(_tea)
obj = {}
-- field
if _tea then
obj = CaffeineBeverage:new(_tea)
else
obj = CaffeineBeverage:new()
end
-- clone
obj.__index.brew = function()
return Tea:new(self)
end
-- brew
obj.__index.brew = function()
print("ティーバッグをお湯に浸す")
end
-- addCondiments
obj.__index.addCondiments = function()
print("砂糖とレモン")
end
return obj
end
main.lua
dofile("Coffee.lua")
dofile("Tea.lua")
----------------------------------------
-- main
----------------------------------------
function main()
print("--コーヒーの生成")
a = Coffee:new()
a:set("コーヒー")
print(a)
a:prepareRecipe()
print("\n")
print("--紅茶の生成")
b = Tea:new()
b:set("紅茶")
print(b)
b:prepareRecipe()
print("\n")
print("--コピーコンストラクタの使用")
c = Tea:new(b)
print(c)
c:set("レモンティ")
print(c)
print(b)
print("\n")
print("クローン")
d = c:clone()
print(d)
d:set("レモンの紅茶")
print(d)
print(c)
end
-- call main
-- try catchみたいなの使ってます。
-- error()ってメソッドがthrowに相当します。
local status, err = pcall(main)
if status then
-- do nothing
else
print(err)
end
登録:
投稿 (Atom)







