台北住宿 – 寧夏夜市191旅店 enjoy hotel

2014年元旦過後,馬上北上台北與客戶、廠商接洽。客戶也安排了靠近台北寧夏夜市旁的新旅店「191旅店 enjoy hotel」,據客戶說這家旅店也是使用他們的民宿旅館訂房相關系統。

為什麼叫191咧?原來是由英文enjoy翻過來的~旅店的訴求是希望讓來居住的旅客們能享受旅店營造出小巧溫馨的氣氛。旅店是隱身在大樓六樓的空間裡,電梯一走出進入大廳後,映入眼簾的是斗大的LOGO以及櫃台。而在電梯門口也有旅店自製的干貝醬等小商品,門口也有貼上一些導覽資訊,讓旅客在離開前還可以知道那邊可以玩。

在櫃台前面則有一個簡單的沙發區,地毯使用條紋的方式能讓視覺有延伸的效果。

沙發區旁邊有一面世界地圖,上面貼滿許多來自各國的背包客、旅客所拍下的照片,還有直接將各國紙鈔、硬幣貼上的。

大廳旁邊的飲水機,對許多背包客來說是蠻貼心的服務,要外出時可以取用熱水,上面也有茶包及咖啡包。

登記後準備入住囉!走道感覺很深,裡面有不少房間。

走道上用了許多畫作以及黑膠唱片來做點綴。

抵達房間了,不多說先來張全景照。

房間是使用感應門卡,也提供免費WIFI服務(而且訊號很強)

門後有逃生示意圖,門除了有門栓外,也有兩道鎖還蠻安全的。

房間內有二張小沙發以及小桌子,可以看到旅店為了節省空間,少掉了衣櫥而以開放的衣架取代。

住的是雙人房,不過發現雙人床是King Size的,感覺三個人還塞得下去。床的二側都有插頭及床頭櫃。

床前有二盞很漂亮的燈,如果像我怕黑又不想太亮,可以自己調整明亮度。

床的另一端就是一台蠻大台的電視,旁邊備有礦泉水、二包小餅乾、茶包、咖啡包以及二雙拖鞋。

對背包客很重要的保險箱(可以把護照及重要物品鎖上),一個小冰箱以及電熱水瓶。

浴室是乾溼分離的,而且排風做的相當好~溼氣不會進到房間

一整個感覺清爽且乾淨。

旅店位在很不錯的地方,往右邊走是往法主公廟、大稻程、年貨大街迪化街、永樂布業商場、台北霞海城隍廟;往左邊走則可以到寧夏夜市附近吃吃喝喝。

191旅店整體來說C/P值相當的高,雖然營運還沒多久,但受到許多來自各國背包客的愛戴,可以聽到走廊傳來大都不是國語(英文、日文、韓文….)內部的裝潢及擺設簡單整齊,價格的部份也還蠻親民的,分享給大家。

191旅店 Enjoy Hotel

地址: 103台北市大同區南京西路165號
電話: 02-25559711
交通資訊:
【捷運】:搭乘捷運至捷運中山站,由二號出口往右步行約8~10分鐘;亦可搭乘至捷運台北車站,沿承德路步行至圓環,左轉南京西路後,約3~5分鐘即可抵達。
【公車】:搭乘2, 紅25,42,215, 223, 255,250,288, 302,304,3061501,1504,1505,785,892,893,601,639,1209, 704,798, 518,641,811,下車後步行1~3分鐘即可抵達。

官方網站: www.191hotel.com

官方粉絲頁:  https://www.facebook.com/191hotel

德錡Keypro Rockey4 ND 軟體保護鎖 Keypro測試

對於開發軟體的人來說,最怕的莫過於自己辛苦開發多時的軟體,上市之後馬上遭受破解、盜版。不僅對開發者來說是莫大損失,也會降低開發的意願,所以開發者便會以各種方式來保護軟體。

保護軟體目前的方式有軟體保護(註冊碼、試用期間….)或硬體保護二種方式。當然軟體的部份總是道高一尺、魔高一丈,網路上總有神人有辦法破解,比較保險的做法仍是以硬體保護為主。ROCKEY4ND軟體保護鎖剛好前陣子接到德錡實業的業務經理簡先生電話,寄來了一支測試的Rockey4軟體保護鎖,順便將測試的結果告訴大家。

目前Rockey4軟體保護鎖支援的系統有:

  • Dos
  • Win98
  • Win2000
  • Win NT
  • Win XP
  • Vista
  • Win 7 32/64(二種版本均支援)
  • Win8 32/64(二種版本均支援)
  • Linux

支援的程式語言則有:

  • ASM
  • ASP
  • BCB
  • Cobol
  • Delphi
  • Fortran
  • FoxPro
  • Java
  • JavaScript
  • LabView
  • Perl
  • PHP
  • PowerBuilder
  • Visual Basic
  • VBA
  • VC
  • VS.NET

這邊筆者就列出PHP跟Delphi的使用方式

PHP
在使用前需註冊 regsvr32 Rockey4NDCom.dll

[php]
// 使用COM調用Dll
$Rockey = new COM("Com.CRockey4ND") or die("<h3>無法初始化保護鎖元件</h3>");
$Rockey->p1 = new VARIANT(0xc44c, VT_UI2);
$Rockey->p2 = new VARIANT(0xc8f8, VT_UI2);
$Rockey->p3 = new VARIANT(0x0799, VT_UI2);
$Rockey->p4 = new VARIANT(0xc43b, VT_UI2);

// 開啟保護鎖
$result = $Rockey->RockeyCM(3);
if ($result==0) {
print "<h4>Success</h4>";
} else {
print "<h4>Failed, Error Code: $result</h4>";
exit();
}
// 讀出資料
$Rockey->buffer = new VARIANT($text, VT_BSTR);
$Rockey->p1 = new VARIANT(0, VT_UI4);
$Rockey->p2 = new VARIANT(500, VT_UI4);
$result = $Rockey->RockeyCM(7);
if ($result==0) {
print "<h4>Success, Result: ".$Rockey->buffer."</h4>";
} else {
print "<h4>Failed, Error Code: $result</h4>";
exit();
}
[/php]

Delphi
Delphi的方式則有二種:一種是以Dcu一種是載入Dll
Dcu(Delphi Compiled Unit)要先把Rockey4ND.dcu複製到開發的資料夾。
DLL則是要把Rockey4ND.dll複製到開發的資料夾。
DCU寫法
1.Use rockey4nd;
2.宣告
mBuf:array[0..100] of Byte;
mFun,mP1,mP2,mP3,mP4,rt:Word;
lP1,lP2:LongWord;
mHand:array[0..16] of Word;
mHardID:array[0..16] of LongWord;
rc:array[0..4] of Word;

[pascal]
R4ND_Init(); //初始化
mP1:=$c44c;
mP2:=$c8f8;
mP3:=$799;
mP4:=$c43b;
for i:=0 to 30 do
mBuf[i]:=0;
rt:=0;
// 尋找是否有插Keypro
mFun:=1;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,’cannot find ROCKEY1,error:%d ‘,[rt]);
List.Items.Add(str);
exit;
end;
List.Items.Add(‘find ROCKEY No.1’);
[/pascal]

DLL寫法

[pascal]
mBuf:array[0..100] of Byte;
mFun,mP1,mP2,mP3,mP4,rt:Word;
lP1,lP2:LongWord;
mHand:array[0..16] of Word;
mHardID:array[0..16] of LongWord;
rc:array[0..4] of Word;

function Rockey(fun:Word; var Handle:Word;
var lp1,lp2:LongWord;
var P1,P2,P3,P4:Word;
var buf:Byte):Word;
stdcall;external ‘Rockey4ND.dll’;
[/pascal]

 

[pascal]
mP1:=$c44c;
mP2:=$c8f8;
mP3:=$799;
mP4:=$c43b;
for i:=0 to 30 do
mBuf[i]:=0;
rt:=0;
mFun:=1;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,’not find ROCKEY1,error:%x ‘,[rt]);
List.Items.Add(str);
exit;
end;
List.Items.Add(‘Find the first ROCKEY’);
[/pascal]

在測試完之後,發現程式的撰寫並不複雜。可以杜絕盜版以及破解的風險,避免軟體從商用變成公用 🙂

在安全性上保護鎖上面分兩級 4 個密碼,每個密碼 16 位長,第一級是基本密碼,對加密鎖進行基本調用時用,第二級密碼是開發商專用密碼,作用是控制加密鎖的寫入和定義加密算法,它在最終用戶的軟體中是不應該也是不需要出現的,即使跟蹤也跟不到。而每個開發商的加密鎖密碼都是不同的,也不用擔心其他開發商可以破解。
價格的部份,一支的價格介於400-500上下(依數量而定),也算是還可以接受的價格。建議有需要的朋友可以參考囉 🙂

相關連結:

德錡實業有限公司(http://www.mtitw.com)

Feitian http://www.ftsafe.com/
業務 簡建昌 0988778171電話 02-27555955
地址 台北市復興南路二段180巷29號1樓德錡實業有限公司 業務經理 簡建昌

回顧2013生活大事「自分新聞」

2013年即將結束,準備邁向2014年了。日本的網友做了一個「自分新聞」的服務,透過facebook的發文來計算相關數據。大家可以建立一份自己的2013生活大事新聞。

自分新聞:https://apps.facebook.com/jibunshimbun/

あなたが2013年にFacebookで投稿したポストからあなただけの自分新聞を作成します!

左上角:12月份人氣話題

左下角:年度發文趨勢

右上角:最多讚的人氣文章(頭條)

右 中:最多人留言的文章

右下左:按讚王

右下右:流行語

紙本電子發票格式統一並正名電子發票證明聯

雖然電子發票已經實施三年多,但紙本的電子發票格式凌亂不堪~終於財政部規定明年開始的電子發票格式統一為5.7公分寬、9公分長,另外發票期別發票號碼將加大與加粗,交易明細將不再主動列印,直接儲存於發票下方的兩個QRcode,民眾可直接利用APP 查詢。如對交易明細有需求的民眾,可要求營業人於開立發票時一併列印供保存查詢,但對統編等有報帳需求之民眾,仍由營業人主動列印給予交易明細。另為符合 電子發票雲端儲存的模式,紙本電子發票(收執聯)將更名為「電子發票證明聯」。

電子發票相關問題可以到「財政部電子發票整合服務平台」看資料。

網址: https://www.einvoice.nat.gov.tw/

 

Delphi將Image存入MySQL資料庫

存入
[php]
var astream : Tmemorystream;
begin
AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
if adoquery1.Active then
begin
adoquery1.Edit;
TBlobField(adoquery1.FieldByName(‘File’)).LoadFromStream(AStream);
adoquery1.Post;
end;
finally
AStream.Free;
end;
[/php]

取出
[php]
var
Ms:TStringStream;
jpg1:Tjpegimage;
begin
Ms := TStringStream.Create(”);
jpg1 := Tjpegimage.create;
try
if adoquery1.Active then
begin
TBlobField(adoquery1.FieldByName(‘File’)).SaveToStream(Ms);
Ms.Position := 0;
jpg1.LoadFromStream(ms);
image1.Picture.Bitmap.Assign(jpg1);
end;
finally
ms.Free;
jpg1.Free;
end;
[/php]

注意,如果出現Got a packet bigger than ‘max_allowed_packet’ bytes
在My.ini加上
max_allowed_packet = 10M

php4fun找出PHP漏洞小遊戲

php4fun是一個很好玩的PHP資訊安全小測試的網站,提供8道不同的題目,您要從出現的訊息以及原始碼中找到漏洞進而解答取得目標。

以第一題為例,頁面上出現Invalid password!。

看一下原始碼

[html]

<!–
#GOAL: get password from admin;
error_reporting(0);
require ‘db.inc.php’;

function clean($str){
if(get_magic_quotes_gpc()){
$str=stripslashes($str);
}
return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET[‘username’]);
$password = @clean((string)$_GET[‘password’]);

$query=’SELECT * FROM users WHERE name=\”.$username.’\’ AND pass=\”.$password.’\’;’;
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
die(‘Invalid password!’);
}

$row = mysql_fetch_assoc($result);

echo "Hello ".$row[‘name’]."</br>";
echo "Your password is:".$row[‘pass’]."</br>";
–>
Invalid password!
[/html]

了解是要取得admin…..接下來就要思考透過sql injection的技巧去解題了。
php4fun

http://php4fun.sinaapp.com/