技術應用之現在看HTML5

在發PO完上一篇 使用HTML5只為優化SEO?有必要嗎? 看到了藍藍路HTML5是什麼? ,只能說 中肯!!

除了ios使用者會有迫切需求之外,對一般用戶而言,使用HTML5或Flash根本無感 看看NetMarketShare的OS市佔數據。

iOS系列只是5.5%中的61.5%,換算之下才3.38% 竟然有人用Ipad看不到flash的理由,提出要全面換成HTML5!!!肖ㄟ~

 

比起用什麼技術,用戶更關心的應該是速度、是應用、是體驗 而目前不管是flash或HTML5都有各自的優缺點


  2013-01-25      ez   
.Net 的 HttpRuntime.Cache vs Page.Application 效能測試

測試程式碼如下:

using System;
using System.Diagnostics;

namespace WebApplication
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string temp = string.Empty;
            Stopwatch sw = new Stopwatch();

            //HttpRuntime.Cache 測試
            sw.Reset();
            sw.Start();
            for (int i = 0; i < 1000000; i++) SetCache("cache" + i.ToString(), i.ToString(), 60);
            sw.Stop();
            Response.Write("HttpRuntime.Cache 寫入時間:" + sw.ElapsedMilliseconds.ToString() + " /ms <br>");

            sw.Reset();
            sw.Start();
            for (int i = 0; i < 1000000; i++) temp = GetCache("cache" + i.ToString());
            sw.Stop();
            Response.Write("HttpRuntime.Cache 讀取時間:" + sw.ElapsedMilliseconds.ToString() + " /ms <br><br>");

            //Page.Application 測試
            sw.Reset();
            sw.Start();
            for (int i = 0; i < 1000000; i++) Application["cache" + i.ToString()] = i.ToString();
            sw.Stop();
            Response.Write("Page.Application 寫入時間:" + sw.ElapsedMilliseconds.ToString() + " /ms <br>");

            sw.Reset();
            sw.Start();
            for (int i = 0; i < 1000000; i++) temp = Application["cache" + i.ToString()].ToString();
            sw.Stop();
            Response.Write("Page.Application 讀取時間:" + sw.ElapsedMilliseconds.ToString() + " /ms <br>");
        }

        /// <summary>
        /// 取的快取
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        protected string GetCache(string key)
        {
            try
            {
                object _cache = System.Web.HttpRuntime.Cache.Get(key);
                if (_cache != null)
                    return (string)_cache;
                else
                    return "";
            }
            catch
            {
                return "";
            }
        }

        /// <summary>
        /// 設定快取
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        protected bool SetCache(string key, string value,int timeout)
        {
            try
            {
                System.Web.HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, timeout), System.Web.Caching.CacheItemPriority.High, null);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

  2012-06-04      ez      .NET
.Net 的 HttpRuntime.Cache 基本運用

網頁常常會使用到 cache 機制,來加快網頁速度,以下介紹 HttpRuntime.Cache 的基本運用方式。

using System;

namespace WebApplication
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SetCache("a", "1", 60); //寫入快取 超時時間為60秒
            string temp = GetCache("a"); //讀取快取
            Response.Write(temp);
        }

        /// <summary>
        /// 取的快取
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        protected string GetCache(string key)
        {
            try
            {
                object _cache = System.Web.HttpRuntime.Cache.Get(key);
                if (_cache != null)
                    return (string)_cache;
                else
                    return "";
            }
            catch
            {
                return "";
            }
        }

        /// <summary>
        /// 設定快取
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        protected bool SetCache(string key, string value,int timeout)
        {
            try
            {
                System.Web.HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, timeout), System.Web.Caching.CacheItemPriority.High, null);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

支援平台: Windows 7, Windows Vista SP1 (含) 以後版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (不支援伺服器核心), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心), Windows Server 2003 SP2


  2012-05-04      ez      .NET
Google說明Gmail的導航設計想法

  來自Google的用戶體驗設計師Jason Cornwell的 Designing Gmail’s new left navigation 我們這次改版的目標之一,是透過切換不同面板的方式,讓Gmail看起來更像是一個應用程式,而不是網頁內的還有捲軸的獨立頁面。 新的設計有幾個優點

  • 搜尋框跟主要的導航都在同一個地方
  • 未讀mail的數量也可以馬上看到

不過這樣的調整會有一些挑戰

  • 如果使用者有建立許多標籤,Gtalk就會被堆到螢幕線下
  • 如果有安裝一些小工具的人,為了看見小工具則需要往下拉過頁籤、聯絡人才能看到

我們想了幾種不同的設計方式,盡可能地優雅解決這個問題。 也實驗了幾個折疊收納的方式,例如,我們將各區塊堆疊在一起,一次只允許打開兩個區塊

 


  2013-01-25      ez   
使用 Mono 讓 .Net 軟體 不須安裝 .Net Framework

.Net 開發出來的程式雖然輕巧,但每次都必須要求用戶安裝 .Net Framework 才能執行程式,用戶常常抱怨 .Net Framework 很大、安裝很久、版本非常多......問題。 發現 Mono 可以讓 .Net 運作於 Linux , Mac , Windows 達到跨平台運作,並且可以利用裡面的 Lib 將 .Net 程式綠色化。  

首先必須先下載 Mono for Windows, Gtk#, and XSP: http://www.go-mono.com/mono-downloads/download.html

下載完畢後安裝 Mono:


  2012-06-04      ez      .NET
.Net 圖片灰階化處理 BitmapData

上一次利用了 GetPixel 及 SetPixel,將圖片轉為灰階,雖然可以達成效果但是效能不佳!

這次採用 BitmapData 並且使用 指標 進行處理,達到更高的處理效率。

using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string Photo_route = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Tulips.jpg");
            Bitmap b = (Bitmap)Bitmap.FromFile(Photo_route);
            pictureBox2.Image = (Bitmap)Bitmap.FromFile(Photo_route);
            Stopwatch sw = new Stopwatch();
            sw.Start();
            BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            //使用unsafe允許使用指標
            unsafe
            {
                byte* p = (byte*)bData.Scan0.ToPointer();
                for (int y = 0; y < b.Height; y++)
                {
                    for (int x = 0; x < b.Width; x++)
                    {
                        byte newColor = (byte)((float)(p[0] + p[1] + p[2]) / 3.0f);
                        p[0] = p[1] = p[2] = newColor; //三個byte組成一個Pixel
                        p += 3;
                    }
                }
                b.UnlockBits(bData);
            }
            sw.Stop();
            pictureBox1.Image = b;
            MessageBox.Show(sw.ElapsedMilliseconds.ToString() + " /ms");
        }
    }
}

  2012-06-20      ez      .NET