Language: Chinese (rss)
1 | Next Page

ASP.NET 的 Url Rewrite

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 14)

若希望當網友點下 http://www.xyz.com/123456789 可以自動連到 http://www.xyz.com/page.aspx?id=123456789 的話,就需要用到 Url Rewrite。導到別頁的語法是:HttpContext 的 RewritePath() 或 Response 的 Redirect(),差別是後者是告知 client 端進行,前者是 server 端直接進行。問題是 "時機",在哪裡可以寫程式來判斷現在的 url 的組成?有時間的話,請看一下 MSDN 這篇 ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0:http://msdn.microsoft.com/en-us/library/ms178473.aspxHttpApplication 中依照不同程序會發生一堆事件。我們可以在 Global.asax 中,當這些事件發生時,做 Url Rewrite 的工作。另外一種做法,是寫一個實作 IHttpModule 的 HttpModule 類別,然後掛在 web.config 中,這樣每個 request 都會經過這個我們開發的 HttpModule,就可以進行 Url Rewrite 了。首先,先開發這個 HttpModule,UrlRewrite.cs:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;namespace idv.ben.httpmodule{ public class UrlRewrite : IHttpModule { public UrlRewrite() { } #region IHttpModule 成員 public void Dispose() { //throw new Exception("The method or operation is not implemented."); } public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest(object (translate)

ASP.NET 動態產生縮圖

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 11)

動態產生縮圖的程式,每次都要找,就連自己以前寫過的都找不到了,所以再寫一遍。thumbnail.ashx:using System;using System.Web;using System.Drawing;using System.Drawing.Imaging;public class thumbnail : IHttpHandler{ public void ProcessRequest(HttpContext context) { /* context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); */ string file = context.Request["file"]; int max = Convert.ToInt32(context.Request["max"]); Image img = Image.FromFile(context.Server.MapPath(file)); double w, h; if (img.Width > img.Height) { w = max; h = img.Height * (w / img.Width); } else { h = max; w = img.Width * (h / img.Height); } /* Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback); Image thumb = img.GetThumbnailImage(Convert.ToInt32(w), Convert.ToInt32(h), myCallback, IntPtr.Zero); * */ Image thumb = new Bitmap(img, Convert.ToInt32(w), Convert.ToInt32(h)); thumb.Save(context.Response.OutputStream, img.RawFormat); } public bool IsReusable { get { return false; } } (translate)

用 ASP.NET 的 Cache 做週期執行的程式

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 11)

要寫一個週期執行的工作,如果不能寫 windows service,也不能在 server 上安裝程式的話,可以寫一個 aspx 頁面並且定期去執行它,只不過要誰來執行這個 aspx?一個人做在電腦前不斷 reload?寫個程式放在不關機的電腦不斷向 web server 送出 request?透過前輩提點使用 Cache,先去找幾篇基本用法:http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/08/30/tips-asp-net-cache-mini-guide.aspxhttp://www.dotblogs.com.tw/jeff377/archive/2008/08/28/5236.aspxhttp://msdn.microsoft.com/zh-tw/library/system.web.caching.cacheitemremovedcallback(VS.80).aspx然後我寫了一個 aspx 網頁,其 *.cs 如下:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Web.Caching;using System.IO;public partial class cacheTest : System.Web.UI.Page{ static public string status = ""; protected void RemovedCallback(String k, Object v, CacheItemRemovedReason r) { if (status.Equals("PLAY")) { addCache(); } log(string.Format("CacheItemRemovedReason={0}", r.ToString())); } protected void log(string str) { StreamWriter sr; FileInfo fi = new FileInfo(Server.MapPath("cacheTest7.txt")); sr = new StreamWriter(fi.Open(FileMode.OpenOrCreate FileMode.Append, FileAccess.Write)); sr.WriteLine(string.Format("{0}, {1}, {2}" , DateTime.Now.ToString("yyyyMMdd HHmmss") , str , Cache.Count )); sr.Flush(); sr.Close(); } protected void addCache() { log("[addCache start]"); if (Cache["AutoTask"] == null) (translate)

Google 服務結合自己的 Domain

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 10)

透過 http://www.everydns.net/ 的免費 DNS 代管,我們可以在沒有自己的主機的條件下,利用許多 Google 提供的服務,來建置一個中小企業的資訊系統。Google 提供的 blogspot 平台,可以讓你的 blog 使用自己申請的 domain,像是我的 blog 現在已經是 http://blog.ben.idv.tw 了。其他像是 Google App Engine 平台,也可以讓你使用自己的 domain,不僅可以放靜態 html 網頁,若是你會寫 python 的話,也可以開發 server 端程式呢!使用 Google 服務加自己的 domain 設定,通常都是在 DNS 上,加一筆 CNAME 資料,指到 google 的 ghs.google.com 即可,這樣當有人要瀏覽 blog.ben.idv.tw 時,就會先找到我在 everydns.net 上設定的 DNS 紀錄,然後導到 ghs.google.com 去找這個 blog.ben.idv.tw 的網址,接下來就是 google 的服務囉!感覺怎麼解釋都好像解釋得不是很好,誰叫我不是系統工程師出身的呢!以下畫面是我在 everydns.net 上設定的資料,可以看到我有不少的紀錄如 blog, js, lua 都是導到 google 採用 blogspot 平台,而 gae 則是使用 Google App Engine 平台:以上,是對於一般部落客可以運用的部份。接下來,是一個小型組織,甚至是公司可以考慮採用的應用,Google 提供了另一個平台:Google 應用服務!https://www.google.com/a/先講講跟前述類似的部份,就是這個平台也可以使用你自訂的 domain 來提供一些服務,所以你若是打 http://www.ben.idv.tw/ 的話,就會導到我在 Google Apps 上所設定的 Start Page,基本上,這個 Start Page 應該是類似 iGoogle 的東西吧!我完全沒玩過 iGoogle,不過我想應該是一樣的,因為,他也可以讓你自訂你想要放的 widget 與排版位置:為何我說 Google Apps 適用於 "組織" 應用呢?因為你可以想像這裡是 ben.idv.tw 這家公司/組織的內部網站,若是要 login 的話,就必須輸入管理者事先已經定義好的帳號資料才行,你可以看到以下的 login 畫面中,他會提示你是要輸入 xxxxxx@ben.idv.tw 的帳號:登入成功後,回到這個 (translate)

AS3 作 3DES 編碼,與 .NET 互通資料

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 12)

使用 AS3 想要進行資料加密的工作時,可以參考 as3crypto:http://code.google.com/p/as3crypto/以及其範例:http://crypto.hurlant.com/demo/假設,我們要在 .NET 中將一段明碼編碼:會得到:Key(Base64): Lns8zSrn2h4VGb5y1NBBHPcNDGjTHjnaIV(Hex): 41b362c1231999fc編碼結果:GAUNI2sJCx32yFiF1J0AC5YPbbXcizYl然後將這些資料貼進 Demo 的網頁後:按下 Decrypt,就可以解出原來的明碼 (我就不重複貼圖了)另外一個情況是,反過來,當 Flash 透過 3DES 進行編碼後,要提供資料給 .NET 的話:則會提供:Key(Base64): Lns8zSrn2h4VGb5y1NBBHPcNDGjTHjnaIV(Base64): 0sqxgBNq7iA=編碼結果:XcMt/RnEoozLmBLUpLNRTPVMjRykzDxR9wvrKV9Zwwo=範例程式的 Key Format 下拉選單好像有點問題,無法將 Hex 資料轉成 Base64,懶得解 bug,所以這裡的 Key(Base64) 可以直接用剛剛由 .NET 產生的繼續使用即可。IV(Base64) 的部分,因為原範例程式只有顯示 IV(Hex),所以這部分我有修改原範例程式,多顯示一種格式的資料,便於提供給 .NET 使用。將資料貼進 .NET 之後,按下 Decrypt 就順利解出來囉:.NET 的原始碼,主架構可以由 MSDN 的範例找到,http://msdn.microsoft.com/zh-tw/library/system.security.cryptography.tripledescryptoserviceprovider(VS.80).aspx為了能編中文,所以我將原本的 ASCIIEncoding() 改為 System.Text.Encoding.UTF8。並且設定了 填補模式 為 PKCS7(在 AS3 中用的是 PKCS#5,放心,有通!):TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();tDESalg.Padding = PaddingMode.PKCS7;完整程式碼如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Security.Cryptography;using System.IO;namespace TripleDES{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnEncrypt_Click(object sender, EventArgs e) { try { // Create a new TripleDESCryptoServiceProvider object // to generate a key and (translate)

利用 ByteArray 將 SWF 重新編碼加密

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 14)

一篇舊文章,教如何透過 ByteArray 將 *.swf 進行自訂的編碼,使得一般人無法透過 decompiler 將該 *.swf 解出來。文章已不存在,google cache:http://209.85.175.132/search?q=cache:JFsWjtfvv0QJ:lab.lzyy.name/blog/archives/32+swf+bytearray&hl=zh-TW&ct=clnk&cd=1&gl=tw&client=firefox-a步驟一,隨便建立一個 swf 當作要被加密的內容檔案,怎麼做不管,假設檔名 asset.swf。步驟二,做一個用來進行加密工作的 flash:var ul:URLLoader = new URLLoader();ul.dataFormat = URLLoaderDataFormat.BINARY;ul.addEventListener(Event.COMPLETE, onComplete);ul.load(new URLRequest("asset.swf"));function onComplete(e:Event):void{ var ba:ByteArray = (e.target as URLLoader).data; ba.compress(); //這裡要代換成一個複雜的加工作業 var fr:FileReference = new FileReference(); fr.save(ba, "asset_c.swf");}簡單來說,就是將 swf 以 binary 的方式讀入,並對 ByteArray 做些改變,再重新存成 swf 檔。這個作業當然也可能應該是由 Server 進行,至於要對 ByteArray 做甚麼樣的資料改變,都可以。步驟三,可以用 decompiler 軟體對剛存好的 asset_c.swf 作業看看,就可以發現沒有效果,因為本質上他已經不是 swf format 了。步驟四,另外開發一個讀取用的 flash,也就是未來真正要將 asset_c.swf 動態載入進來播放的 main.swf:var ul:URLLoader = new URLLoader();ul.dataFormat = URLLoaderDataFormat.BINARY;ul.addEventListener(Event.COMPLETE, onComplete);ul.load(new URLRequest("asset_c.swf"));var loader:Loader = new Loader();addChild(loader);function onComplete(e:Event):void{ var ba:ByteArray = (e.target as URLLoader).data; ba.uncompress(); //這裡要代換成一個複雜的加工作業 loader.loadBytes(ba);}解密的部分,要參考加密的過程,反向進行。不過,我想聰明如你也會知道,這個 main.swf 仍是明碼,仍能被 decompiler 給破解出來,以上這作法也就只是為了更加強破解的難度罷了,只好儘量將解密的程式隱藏的複雜一點囉,騙騙君子! (translate)

將文字隱藏在圖片中

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 10)

這兩天在研究如何將文字資訊隱藏在圖片中的技術,在 google 查了一些 "secure image sharing" 的資料,但是都沒有看到實作的方法(其實是沒有看到範例程式碼),最後,我參考 Wiki 上關於 Steganography 的介紹:http://en.wikipedia.org/wiki/Steganography寫了以下的類別:Steganography.aspackage idv.ben.steganography{ import flash.display.BitmapData; import flash.geom.Point; public class Steganography { static private var __instance:Steganography; static public function getInstance():Steganography{ if(__instance==null) __instance = new Steganography(); return __instance; } private var __totalWidth:int; private var __totalHeight:int; private var __point:Point; public function Steganography() { if(__instance!=null) throw new Error("plz use Steganography.getInstance()"); } public function encode(oBD:BitmapData, txt:String):BitmapData{ var txtLen:int = txt.length; var txtLenLen:int = String(txtLen).length; if(oBD.width * oBD.height < txtLen + 10) return null; var newBD:BitmapData = oBD.clone(); __totalWidth = newBD.width; __totalHeight = newBD.height; __point = null; var c:String; var p:Point; var newPixel:uint; //txtLenLen c = String(txtLenLen); (translate)

Flash IDE 的遮罩在 reparentting 後的問題

Jul 18, 2014 11:28 PM
Rating: (Total Clicks 12)

遇到一個問題,在 Flash IDE 中的時間軸上所設計的遮罩,若是用程式將他 reparentting 後,會導致在新的 container(該遮罩的parent) 中,所有 child index 在該遮罩之上的 display object,都會被該遮罩所遮到。下圖是 UI 的配置,mask_mc 遮 contain_mc,在這組遮罩的上下各有一個 green_mc 與 blue_mc:以下是程式碼,主要工作是建立一個新的 mc1 放到 MainTimeline 上,然後將 MainTimeline 上的所有 DisplayObject 都移進 mc1 中,並在動作前後都作一些 trace:var mc1:MovieClip = new MovieClip();mc1.name = "NewContainer";addChild(mc1);function traceInfo(container:DisplayObjectContainer):void{ trace("traceInfo()", container.name); for(var i:int=0; i trace(i, container.getChildAt(i).name); } trace("");}trace("初始時的 MainTimeline");traceInfo(this);for(var i:int = numChildren-1; i>=0; i--){ var obj:DisplayObject = getChildAt(i); if(obj!=mc1){ mc1.addChildAt(obj, 0); }}_mc.getCtrace("reparentting 後的 MainTimeline");traceInfo(this);trace("reparentting 後的 NewContainer");traceInfo(mc1);var yellowLine:MovieClip = new YellowLine();yellowLine.name = "yellowLine";mc1.addChild(yellowLine);trace("在 NewContainer 新加入 DisplayObject 後");traceInfo(mc1);執行後的畫面:從第一段 trace 可以看出,在 Flash IDE 中所設計的遮罩,從 child index 來說,mask_mc (index=1) 會在 content_mc (index=2) 的下面。第三、四段 trace 可以看出,所有 DisplayObject 在移動前後的 child index 都是沒有改變的,但是從畫面上來看,除了 blueLine (index=0) 之外的所有 DisplayObject 都會被 (translate)

泰课在线unity公开课

Jul 15, 2014 11:31 PM
Rating: (Total Clicks 12)

泰课在线每周一二五六晚20:00四次unity公开课 (translate)

找个锤子-等待review

Jun 21, 2014 2:46 AM
Rating: (Total Clicks 32)

实验,跟风性质的小游戏. 主要测试了Admob广告, 微信ANE, 本地化 iPhone4在屏幕元素高速移动时有些卡顿, 还是需要进一步优化. iPhone5s,iPad4,iPad air,运行都不错. 可能是硬件比较强悍吧. 没有用到对象池, 因为方块移出屏幕后马上重设位置了.                       (translate)

1 | Next Page