Language: Chinese (rss)
1 | Next Page

万博思图近期新作案例集合

Aug 15, 2014 9:25 AM
Rating: (Total Clicks 4)

近期忙于业务有一段时间没有更新博客了。写博客的人越来越少了,很是怀念当年每天一篇博客的日子,很想像敢死队中的老瓦说的“ I am back” . 1. 长安大事纪时间轴组件 项目地址 | 长安大事纪demo 2.京东拍拍微信游戏 项目地址 | 京东拍拍微信游戏 3.腾讯天天炫斗微信html5网页 (translate)

IE8 和 Bootstrap 3

Aug 8, 2014 11:32 AM
Rating: (Total Clicks 16)

參考 IE8 issue with Twitter Bootstrap 3shiv 讓 IE8 支援 HTML 5 標籤respond.js 讓 IE8 支援 media query<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]> <script src="../../assets/js/html5shiv.js"></script> <script src="../../assets/js/respond.min.js"></script><![endif]--> 另外, 最好的方式還是用 Modernizr 來判斷哪些功能沒支援, 不要直接判斷是否為 IE8. (translate)

使用Unity开发<围住神经猫>视频课程

Jul 30, 2014 11:33 AM
Rating: (Total Clicks 20)

简介网络试玩地址1 网络试玩地址2“我用了12歩围住神经猫,击败88%的人,你能超过我吗?”很多微信用户发现,这两天自己的朋友圈已被一款名为“围住神经猫”的小游戏刷屏。点开朋友分享的链接,一只露着屁股、表情傲娇的白猫在手机屏幕中央贱贱地扭动曼妙腰肢,正等着你通过点击屏幕上的圆点来围住它。<围住神经猫>课程免费学习地址: http://www.taikr.com/course/75课时目录:课时1.概述课时2.添加多行多列Pot1课时3.Item类的实现课时4.添加带动画效果的Cat课时5.Pot鼠标点击和Cat的移动功能实现课时6.点击切换Item状态和二维数组的建立课时7.计算Cat可以移动的Pot课时8.Cat的简单AI实现课时9.神经猫是否逃脱判断课时10.添加开始界面和开始游戏功能课时11.失败成功界面切换和重玩游戏功能实现课时12.重置游戏状态数据泰课在线官方(taikr.com),继《flypper bird》《微信飞机大战》,《2048》,《炉石传说》后,推出最新的unity3d游戏开发案例公开课《野人大作战》。将于9月5,6日首播,会持续四周共8个课时课程,生动有趣,一步步讲解用unity3d完成经典全3D塔防类手游 野人大作战 的开发过程。泰课Unity案例公开课,会于每周五,六持续推出各种热门,典型unity3d游戏开发案例。这里是公开课《野人大作战》的课程直播页面。每周直播结束后,会发布到视频录制课程:页面地址到时更新欢迎大家踊跃报名,听课请加群。泰课公开课交流4群:126288532(已加入1、2、3群的就不要重复加4群了)泰课公开课交流3群:157452780(快满)泰课公开课交流2群:264439192(已满)泰课公开课交流1群:373053769(已满)分类Unity标签unity3d游戏开发 unity3d视频教程 (translate)

ASP.NET 的 Url Rewrite

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

若希望當網友點下 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 32)

動態產生縮圖的程式,每次都要找,就連自己以前寫過的都找不到了,所以再寫一遍。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 34)

要寫一個週期執行的工作,如果不能寫 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 30)

透過 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 32)

使用 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 36)

一篇舊文章,教如何透過 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 28)

這兩天在研究如何將文字資訊隱藏在圖片中的技術,在 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)

1 | Next Page