2015年8月31日 星期一

心情小記 - 紛擾

早晨的咖啡店,
聆聽旁桌熟悉的異國語言,
忘卻稍早的不速之客,
一樣的夏天早晨,
少了寧靜,
多了不一樣的心情。

2015年8月30日 星期日

心情小記 - 邀約

    早晨的雨天,
    擾攘的店,
    在妳的面前,
    一樣的夏天,
    紅茶代替了妳我之間的電影院,⋯⋯
    不變的是,
    我依舊在妳面前。

心情小記 - 雨滴

雨滴落下煩亂的滴答,洗去了準備中的期待,天氣,只能等待。

2015年3月17日 星期二

Andorid 個人雲端伺服器架構規劃[原創]

一般而言雲端伺服器大致以 x86 為主流,並且已行之有年,但 x86 伺服器高成本、高耗電的特性使一般個人難以持續24小時運作,而如今 Android TV Box 已有許多產品上市,Wireless AP Router 產品也不在少數,如結合這兩種產品特性呢,在 Android 作業系統下提供至少一個 WAN Port ,並且有多個 LAN Port,還有 Wireless LAN 介面,其 WAN Port 即可做為網際網路伺服器所用,而 LAN Port 與 Wireless LAN 則可用於內部網路。

為何得用 Android 作業系統,Android 作業系統下已移植許多可提供許多伺服器 App,如 Web Server , FTP Server,Mail Server,File Server等等皆有人移植,如此已可提供許多伺服器功能,而 Android 作業系統下的眾多 App 則可讓此產品功能不限於伺服器功能,如此即可達到一機多用。

至於顯示介面則可如同 Android TV Box 使用 HDMI 介面輸出至電視以滑鼠、鍵盤或使用小型 Touch Panel 來做操作,所以共可分為高低階機型,高階 Touch Panel ,低階則是 HDMI 介面。

此架構相較於 x86 伺服器的優勢為省電、體積小並且低噪音,可放罝於室內而不造成生活困擾。

關於此設計構思,本人保留所有相關著作及其衍生著作所有權 C 版權所有 2015 林琨真

EMail : hero.elvis@gmail.com

2013年11月6日 星期三

隨手寫寫 - 蜜蜂螫

蜜蜂螫,
妳覺的痛,
但妳可知道這燃燒了我全部生命,
我懂,這一下我再不是妳面前飛舞的可愛蜜蜂,
但如果不,就如同在妳生命中我從未出現過。

2013年2月14日 星期四

C++ 程式設計筆記 - 奇點亂數產生器[原創]

之前因為一些緣由需要設計一個亂數產生器,原本使用線性同餘法設計,線性同餘法的亂數產生器可由如下程式碼即可產生:

Seed = (Seed * Multiplier + Increment) % Modulos;

但測試後發現這樣產生的亂數有個非常大的問題就是產生的 Seed 如果曾經出現過那麼之後的亂數就會完全重複而產生循環,於是決定設計一個改良的亂數產生器,實作的程式碼如下:

GravitationalSingularityRandom.h :

class GravitationalSingularityRandom
{
private:
  long Seed;
  long Multiplier;
  long SourceIncrement;
  long Modulos;
  long TargetIndex;
  long TargetIncrement;
  unsigned char BufferRandom[256];
public:
  GravitationalSingularityRandom(long RandomSeed = 0);
  ~GravitationalSingularityRandom();
  void Random(unsigned char * Buffer, long Size);
};


GravitationalSingularityRandom.cpp :

#include "GravitationalSingularityRandom.h"

GravitationalSingularityRandom::GravitationalSingularityRandom(long RandomSeed)
{
  long i;
  Seed =  RandomSeed;
  Multiplier = 2593;
  SourceIncrement =  3079;
  TargetIncrement = 17;
  Modulos = 65537;
  TargetIndex = 0;
  for (i = 0; i < 256; i++)
  {
    BufferRandom[i] = (unsigned char) i;
  }
}

GravitationalSingularityRandom::~GravitationalSingularityRandom()
{
}

void GravitationalSingularityRandom::Random(unsigned char * Buffer, long BufferSize)
{
  int i;
  long SourceIndex = 0;
  unsigned char RandomMoving = 0;
  for (i = 0; i < BufferSize; i ++)
  {
    Seed = (Seed * Multiplier + SourceIncrement) % Modulos;
    SourceIndex = (Seed & 0xFF);
    TargetIndex = ((TargetIndex + TargetIncrement) & 0xFF);
    RandomMoving = BufferRandom[SourceIndex];
    BufferRandom[SourceIndex] = BufferRandom [TargetIndex];
    BufferRandom[TargetIndex] = RandomMoving;
    Buffer[i] = RandomMoving;
  }
}


一開始在建構式中產生一個大小為 0 - 255 的表格並在其中放入 0 - 255 的數字當作索引。程式碼中 Seed 、 Multiplier 、 SourceIncrement 跟 Modulos 都是用來產生線性同餘法的亂數所需的參數,但是卻不能將之直接拿來使用,而是拿來當表格的互換索引,也就是說線性同餘法所產生的亂數不是拿來直接使用而是用做此演算法所需的奇點,這點有點像是洗牌法但不同的是洗牌法是要產生連續不重複亂數,而這個作法是為了要避免亂數進入循環,並且產生的數值愈多接下來產生數值的複雜度也就愈高,經測試這個亂數產生器能產生非常接近自然亂數的數值。