2014年1月21日 星期二

uclinux

Src:
http://www.uclinux.org/get_started/



Notes:


--------------------

SEEPROM access w/ Arduino

Src:
http://www.hobbytronics.co.uk/arduino-external-eeprom

Notes:



--------------------------

Adding External I2C EEPROM to Arduino (24LC256)
This tutorial was originally posted on the 10kohms.com website, which now seems to be no longer with us, so we have reproduced it here.
In my last post I discussed using the built in EEPROM to store permanent data on the Arduino. All though this is a very easy and effective way of storing data on the Arduino the built in EEPROM only offers 512 bytes of storage. When working with larger or more advanced Arduino projects we may need to store additional data so an external memory solution like the 24LC256 I²C EEPROM IC becomes necessary.
We’re using a 256kbit eeprom which is actually 32kbytes of space. 262,144 bits / 8 bits in a byte = 32,768 bytes. That’s 62 times the Arduino’s built-in storage!
Hardware Setup
In this example we’ll be using the Microchip 24LC256 IC. If you’re using a different IC please confirm that the pin-out and power requirements are the same so you don’t damage your chip.
eepromeeprom
The Microchip 24LC256 chip can be purchased in a 8 pin DIP package. The pins on the 24LC256 are pretty straightforward and consist of power(8), gnd(4), write protection(7), SCL/SDA(6,5), and three address pins(1,2,3). Before we get into the software part lets hook up the 24LC256 chip up to our Arduino.
eeprom
Using the image above as a guide lets begin to wire the chip. First connect GND and VCC, pins 4 and 8 respectivly. Next lets go ahead and connect the data pins to the Arduino board. Since we’re using the Arduino I²C bus we’re going to be using Analog pins 4 and 5. Connect the SDA pin on the 24LC256(pin 5) to the pin 4 of the Arduino. Then connect the SCL(pin 6) to pin 5 on the Arduino. Double check that you’ve connected the correct pins on the 24LC256 to the correct pins on the Arduino; strange things will happen if you have them reversed. After our data and power pins are connected we have four left on 24LC256 chip, the WP pin and the three address pins. The WP pin stands for write-protected and this allows you to control if data can be written to the eeprom or not. If this pin is low then writing is enabled but if it’s high then writing is disable; reading is always enabled. For the purpose of this tutorial we’re going to be writing to the eeprom so we can connect the WP pin to GND.
The last three pins set the address of the 24LC256 chip which allows us to target a particular chip on the I²C bus. This particular I²C chip comes pre-wired with four bits of it’s address already set(1010) and these can not be changed. The last three bits of the address however can be changed which allows us to run up to eight 24LC256 chips on the same I²C bus. This is a little confusing at first so lets look at the figure below to explain the address in a little more detail.

For the purpose of explaining how the address works we can ignore the Start and Acknowledge bits. The way the I²C bus works is a 7-bit address is passed along with a read/write bit that tells the chip if it should write the incoming data or read it and send it back. The Arduino takes care of the last R/W bit for us depending on what function we’re using so as long as you’re using the standard Arduino Wire library we don’t have to worry about this bit. This leaves us with the seven middle bits and as I mentioned above the first four bits(Control Code) are hard-wired and we can’t change these. The next three bits(A2,A1,A0) are the important bits that we can change so lets look at the simple table below to see what address the chip will have depending on what we set these pins to.
So, if we were to tie pins 1,2 and 3 on the 24LC256 to GND then the chip would have address 0×50 and if were to assign them all Vcc then the chip would have address 0×57 and every combination in between. To keep things simple lets just tie all pins to GND to make the address 0×50. In a future tutorial I will show you how to use multiple eeprom chips off the same I²C at which point we will be assigning each chip a different address but for now lets stick with 0×50. With the address pins connected the hardware part of this tutorial is complete and every pin of the 24LC256 should be connected to either Vcc, GND or the Arduino. Time to move on to software!
It’s been brought to my attention that some people use pull-up resistors on the data and clock pins to the Arduino. All though this would not hurt the circuit it’s not needed because when the Wire.h library is initialized it knows pins 4 and 5 are going to be used for I²C so it also activates the built-in pull-up resistors. For more information please read http://www.arduino.cc/en/Reference/Wire.
Arduino Sketch
Below is the entire tutorial code, scan over it and see if you understand it before I dive into what each section does.
Note: This is written for Arduino versions before 1.0. If you are using Arduino 1.0 and above then you need to change Wire.send to Wire.write and Wire.receive to Wire.read
#include <Wire.h>    
 
#define disk1 0x50    //Address of 24LC256 eeprom chip
 
void setup(void)
{
  Serial.begin(9600);
  Wire.begin();  
 
  unsigned int address = 0;
 
  writeEEPROM(disk1, address, 123);
  Serial.print(readEEPROM(disk1, address), DEC);
}
 
void loop(){}
 
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) 
{
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.send(data);
  Wire.endTransmission();
 
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.receive();
 
  return rdata;
}

In order to use the I²C interface we need to include the Arduino standard Wire library so first things first, include Wire.h at the top of the sketch. You’ll notice directly after the include we define a variable called disk1 and assign it a hex value of 0×50. When we setup the chip above we set the address of the chip to 0×50 by tying all the address pins to GNS so we simple set this variable to that address which allows us to access the chip from within our sketch. This variable is not required but it allows us to easily change the address we want to access without going through all of the code and replacing the value. Also, if you plan on adding more than one chip it’s easier to refer to them as disk1, disk2, etc rather than 0×50, 0×51 which might get confusing.
Moving on we have our standard setup and a loop functions, for this tutorial the loop function is left empty so we’ll just focus on the setup function. We first initialize our Serial connection for printing back to the computer and then we initiate the I²C connection by calling Wire.begin(). This enables pins 4 and 5 for I²C and also enabled the internal pull-up resistor(See note above). Next we create a new variable to store the address of the eeprom we want to write to(not the address of the eeprom IC itself but the address of the byte we want to read/write to). Since this eeprom has 32Kbytes of storage this address can be any number between 0 and 32,767; we’ll start with address 0. After we’ve initialized everything we call our two primary functions, writeEEPROM and readEEPROM which actually do the dirty work of writing and reading the bytes of data.
Lets first start off with the writeEEPROM function. This function takes three arguments, the device address(the disk1 variable), the memory address on the eeprom and the byte of data you want to write. The first argument is the address of the device you want to write to, in our case we only have one device(disk1) so we pass this on. The next argument is the address on the eeprom you want to write to and as stated above can be between 0 and 32,767. Finally we have to pass along the byte we want to store. So, writeEEPROM(disk1, address, 123) is going to write the decimal 123 to “address”(which is 0) on disk1(0×50). Lets jump into the actual writeEEPROM function to learn what it does.
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) 
{
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.send(data);
  Wire.endTransmission();
 
  delay(5);
}
We first call the Wire.beginTransmission function which sends the deviceaddress to let the chip know we want to communicate with it. Next we have to send the address on the eeprom we want to write to. Since our eeprom chip has 32,000 address locations we are using two bytes(16 bits) to store the address but we can only send one byte at a time so we have to split it up. The first send function takes the eeaddress and shifts the bits to the right by eight which moves the higher end of the 16 bit address down to the lower eight bits. Next we do a bitwise AND to get just the last eight bits. To illustrate this lets follow the steps below.
Lets say we want to write to address location 20,000 which is 0100 1110 0010 0000 in binary. We need to send the MSB(Most significant bits) first so we have to shift our address to the right eight bits.
0100 1110 0010 0000 (eeaddress)
After shifting 8 bits to the right we have
0100 1110
We now have the first half of the address, time to get the second half:
0100 1110 0010 0000 (eeaddress)
After we bitwise AND 0xFF with eeadddress we get
0010 0000
This means our 24LC256 chip gets the address 1001 1100 and then 0010 0000 which tells it to store the next byte in address location 20,000. Now that we’ve sent the address we send the data and then we end the process by calling the endTransmission function. The 24LC256 gets the data and writes the data to that address location. To finish up this function you’ll notice I’ve included a delay of 5 milliseconds. This allows the chip time to complete the write operation, without this if you try to do sequential writes weird things might happen.
Now that you’re data has been stored it’s time to get it back, lets examine the readEEPROM function.
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.receive();
 
  return rdata;
}
The readEEPROM accepts two arguments and returns on byte(the data). The arguments it accepts are the same first two arguments the write function, the device address and the address on the eeprom to read from. First we declare a variable to store the byte we’re going to retrieve. Next we start off just like we did with the write function by starting the process with beginTransmission and then we send the address we want to access; this works exactly the same way as the write function. Continuing on we end the the transmission and we’ve now set the 24LC256 with the address we’re interested in so now we just have to request and read the data. The next function requestFrom() sends the command to that chip to start sending the data at the address we set above. The second argument is how many bytes(starting at this address) to send back; we’re only requesting one. Finally we check to see if there is data available on the I²C bus and if there is we read it into the rdata variable. We return the byte of data and we’re done!
That’s all you really need to know in order to use and external I²C EEPROM chip with the Arduino. Take this setup and play around with it, see if you can figure out how to store more than one byte at a time or if you want a challenge try using more than one 24LC256 on the same I²C bus.
See also

2014年1月19日 星期日

net use command

src:
http://evil-ms.blogspot.tw/2010/05/windows-net-use-command.html

notes:



----------------------

[ cmd ] Windows 網芳 net use command 指令

雖然 net user 指令隨便 google 一下就有
但是還是紀錄一下常用的 cmd 好了 ψ(._. )>

net use * /del清除網芳所有記憶過的密碼,並中斷所有網路磁碟機
有時候連接網路上的芳鄰密碼輸入錯誤後,就連不上了,必須清除一下才正常

針對某個網路磁碟機中斷,如X槽net use X: /delete

或是針對某 ip 中斷也可以,兩種寫法皆可net use \\192.168.1.123 /delete
net use /delete \\192.168.1.123



手動掛載網路磁碟機相信不難,但 windows 有時候就會怪怪的
所以 cmd 掛載最快速,寫法如下net use Z: \\192.168.1.123\資料夾 /user:使用者名稱 使用者密碼
net use Z: \\192.168.1.123\資料夾 /user:kamancy password


也可以寫個 bat 批次檔,來建立網路磁碟機
可以先 delete 一下,避免 windows 鬧脾氣
沒有密碼以雙引號""代替net use /delete \\192.168.1.123\新資料夾1
net use Y: \\192.168.1.123\新資料夾1 /user:kamancy ""
net use /delete \\192.168.1.123\新資料夾2
net use Z: \\192.168.1.123\新資料夾2 /user:kamancy password
pause

2014年1月17日 星期五

PCIE debug - LTSSM

Src:
http://www.pcisig.com/developers/main/training_materials/get_document?doc_id=e203b4675da45408ca16d168053a5609be90d052

Notes:



----------------------------------



pcie - ASPM

Src:
http://diosbios.blogspot.tw/2011/05/pcie-aspm.html

Notes:


------------------------------------------------------------------------






2011年5月25日星期三


PCIE ASPM

最近常在找PCIE ASPM register,所以寫下來避免自己忘記。
ASPM control register 是存在PCIE Link Control Register。至於如何找到Link Control Register。
1.先找到PCIE Capability List Pointer Register ,而此Register 存在PCI Congfiguration Registers Offset 0x34
2.檢查Capability ID ( (1st byte))是否為0x10,如果不是,讀取Next Capability Pointer Register (2nd byte ),讀取下一個Capability.


3. 當Capability ID 為0x10時,Link Control Register就是在目前Capability的Offset+0x10為Link Control Register
     

4. Check Link Control Register bit[0:1]
   Bits              Definition
   00                Disabled
   01                L0s Entry Enabled
   10                L1  Entry Enabled
   11                L0s and L1 Entry Enabled

下面就舉個例子來看,比較容易清楚。
1.先找Capability List Pointer Register (offset 0x34), 此register 的值是0x60,表示Capability List 是從Offset 0x60開始。
   
2. 我們要檢查Capability ID是否為0x10,可以看到0ffset 0x60的值是0x01,代表不是PCIE Capability,所以我們要找Next Capability,而Next Capability在Offset 0x61 是0x68,
    同樣的Capaiblity ID 為0x05也不是PCIE Capability,所以要找下一個Capability為0x78.
    在Offset 0x78的值為0x10,代表是PCIE Capability ID,所以我們可以找到Link Control Register在Offset 0x88~0x89
    Check Link Control Register bit[0:1]為0,所以此PCIE Device ASPM 設定為 L0s and L1均為Disable





References:
  PCI Express System Architecture
  PCI Express 3.0 Spec

2014年1月1日 星期三

網路行銷


Src:
http://talkec.blogspot.tw/2008/11/v3.html

Notes:
網路改變行銷的定義,網路行銷不僅是在網站的架設就猶如商店不能僅有建物,如何能創造出想要的價值,需要多方的知識的結合.對許多人而言,它就像雲,但飛到雲裡就變成霧,站在巨人的肩膀可以加速解謎


-----------------------------------

2008/11/21


V怪客推薦3本網路行銷好書



2008年是我開始有系統地重新學習網路行銷(Online Marketing)的一年。

縱使在過去,我可能在行銷方面的能力不算太弱,能比一般的同業更快掌握到一些網路產業的生態、網站的傳媒特性,可以熟稔地用廣告行銷技法達到自己想達到的網路宣傳目的。 但捫心自問都是基於我一點的行銷悟性與天份。我從沒有認真學過網路行銷。

今年是徹底放空(其實以前也蠻空啦),重新有系統地學網路行銷。

自2006年起對部落格的著迷(*註),到目前擔任公司行銷Head,一路上讓我發覺網路行銷的世界,其實深度與廣度都遠勝於我過去在網路零售業多年所擔任的業務主管所接觸的領域。

像是又回到之前在網路圈的日子,瘋狂地吸收學習網路行銷產業的相關知識:閱讀台灣相關部落格文章(好的相當稀缺)、在台灣誠品旗艦店找網路行銷的書看(少得可憐)、在大陸網路書店找網路行銷的書看(比台灣多了幾倍,實在值得台灣出版界或網路界警惕),還不夠...繼續在大陸找相關的網路行銷部落格及論壇(數量還不少,好幾個論水平都比台灣強大很多),還不夠...繼續再按各種線索(比如靠網路專家推薦或自己Google搜尋)往國外找相關的網路行銷文章閱讀。目前,透過訂閱國外電子報以及Google Reader閱讀器,我每週都持續不斷地學習update網路行銷的相關Know-how。

2008年起我比較關注的層面包括:SEO搜尋引擎優化(Search Engine Optimization)、SEM搜尋引擎行銷(Search Engine Marketing)、電子商務顧客體驗、以及UCD(以顧客為中心的設計);而不用說,Traffic generation算是我的核心學習重點,同時這部份也是網路行銷的最精要部分。

很累,很爽,愈學愈覺得自己的短淺與不足。

於是我放緩了部落格發表的腳步,文章的更新頻率比以前又更慢更多了。請失望的老讀者原諒我,一個肚子裡沒東西的人,高頻率的發表部落格文章不僅丟臉且浪費別人的時間。我花了些時間在吸收與思索,花了些時間讓自己學到的相關Know-how,再與自己工作現場的實戰經驗相互驗證並互相挑戰,這樣學習我不敢說非常有效果,但確實是有趣多了。

在過去幾個月的網路行銷學習之旅內,我陸續讀了這三本行銷的書。不管是台灣還是大陸買的,這三本都是翻譯美國網路行銷專家的著作。分別是:

1.「網路行銷必修的10堂課」 (How to Win Sales & Influence Spiders, Boosting Your Business & Buzz on the Web)Catherine Seda著,楊雯祺譯,由台灣上奇出版社出版。

2.「Google關鍵字行銷」 (Ultimate Guide to Google AdWordsPerry Marshall跟Bryan Todd著,曹嬿恆譯,由台灣麥格羅‧希爾出版社出版。

3.「用戶體驗的要素 以出版為中心的Web設計」 (The Elements of User Experience User-Centered Design for the Web)Jesse James Garrett,中國大陸資深互聯網用戶體驗研究者范晓燕翻譯,机械工业出版社出版。

很慶幸自己在沒有網路專家推薦的情況下,憑感覺湊巧買對了這三本對了解網路行銷或者搜尋引擎行銷蠻有幫助的書。而我看的順序也對:先看最淺顯易讀的「網路行銷必修的10堂課」,對SEM搜尋引擎行銷、SEO搜索引擎優化、及網路行銷還有部落格行銷都有了寬泛的入門理解。

第一本「網路行銷必修的10堂課」作者Catherine Seda主要是談以下課題:

第一部分,利用網路公關讓你的公司不斷締造佳績
  • 何謂搜尋引擎行銷?為何要注重搜尋引擎行銷?
  • 搜尋引擎偏愛什麼內容與技術?搜尋引擎討厭或對哪些內容與技術反感?
  • 登陸頁面、與外部鏈結的重要性
  • 如何經營有商業動機的部落格?
第二部份,讓線上廣告成為你生意的推手
  • 談電子郵件行銷 (很淺),建議多寫文章、或發網路新聞(反正有助於SEO)
  • 聯盟計劃(Affiliated Program)的優缺點,如何善用?如何自組聯盟?
  • 自己購買Pay Search等高效率的付費廣告來幫自己的網站打廣告
  • 瞄準購物社群
這一本是每一個網路人讀起來都能輕易上手的入門網路行銷書,淺顯易懂,作者花比較多的篇幅反覆探討如何SEO,如何討好搜索引擎。即使沒有任何技術背景的人都可看這本(當甜點吧)。


而當我在中國互聯網公司開始投入SEM搜索引擎行銷時,我開始讀了第二本 「Google關鍵字行銷」。這應該是寫「Google Adwords學」寫得最棒的一本書,英文原名敢臭屁地用Ultimate Guide to Google AdWords,我認為還名符其實。作者Perry Marshall跟Bryan Todd不只精研Google AdWords,也對網路行銷領域經驗豐富,透過譯者文筆流暢地翻譯,讀起來很舒服,學起來很過癮。整本書被我用黃色螢光筆畫了無數的重點,也折了很多頁,準備有空時再重看這些重點書摘。

我邊看了這本,邊跟我所帶領的搜索引擎行銷主管相互研究與印證Google AdWords為主的Pay Search Marketing(付費關鍵字排名,也有人習慣稱之為PPC,即Pay per Click的縮寫)。我底下這名搜索引擎行銷主管有多年的SEM經驗,自認自己很強,雖然我及大老闆尚不特別滿足他在初期投放Google AdWords成效數字,但中國Google谷歌前陣子拍自家宣傳影片時,確實相中了他,專門到敝公司拍了一段由他所介紹敝公司對Google AdWords的行銷使用體驗與成效。我想,Google用人這麼龜毛,挑的產品見證人應該SEM功力還行吧。

我就是邊花PPC廣告預算、邊看這本書、邊跟這位搜索引擎高手切磋,把從作者及部屬的專業知識與每週廣告投放成效不斷交互比對的情況下,可能對SEM搜索引擎有了比一般人稍微到位的體認。 (其實最好的方法是,你就是那個親自操作設定成千上萬AdWords關鍵字的人)

我想,如果你真的沒有花點錢玩一遍Pay Search,你對這項PPC工具的原理、精準強大的優勢以及如何善用避免錯用的許多技巧恐怕是不容易吸收體會的,缺乏工作實務上的執行經驗,那你看這本書的興趣及幫助將都會減少許多。反之,這本書對以下的經營者就實在是難得一見的Ultimate Guilde了:比如說新創網站極欲透過搜尋引擎拓展流量,以及規模不論大小,需要透過SEM開發更多新客源的網站負責人或行銷執行者。



「Google關鍵字行銷」這本書大致會教你以下的重點:
  • Google AdWords的基本認識及如何使用。他介紹得非常細,包含介面、如何計價、成效遞減等特性什麼都談,不像Catherine Seda著的那本「網路行銷必修的10堂課」與此書相比就只是簡單的閒聊漫談搜索引擎行銷概念
  • 如何進行「分割測試」?如何聰明使用類似作者所謂「即撕即貼法」創造關鍵字廣告。
  • 怎麼寫高點選率或高轉換率的關鍵字廣告文案?有哪些工具可用?
  • 關鍵字廣告點選率(CTR)、轉換率(Conversion Rate)、與投資報酬率(ROI)的真義,與教你如何拿捏最佳的標準與成效。簡單的說,不是排名第一就最好,不是點選率高就好、不是轉換率最高就好,作者認為在適當的預算之下,吸引純度最高新訪客,達到最高的投資報酬率才是最好。再舉例講白一點,不是你花1塊錢創造10塊營收比5塊錢盈收厲害,而是你花1塊錢淨賺到最多的利潤才是關鍵。這邊有很多微調的不斷測試過程,作者會不厭其煩的跟你分享。(請你有耐心,前半部有點囉唆,後面愈來愈精采)
  • 付費關鍵字所帶來的顧客分析,及其對你網站貢獻度的探討。
  • 當然,登陸頁面(Landing Page)牽涉到關鍵字廣告的轉換率,作者也會分享如何做出高轉換率的登陸頁面。
  • Google AdWords獎賞優秀關鍵字廣告的特性,及如何往此殿堂邁進的方法。(意卽你沒有花最高的競標價格,純粹因為你設計的關鍵字廣告品質太優,與登陸頁面高相關性等因素,被Google天神從右側的競價排名廣告區恩寵召喚到比「自然排序」還置頂的最上方那個夢幻搜尋結果區塊)
  • 行銷人會犯下的最大網站錯誤
  • SEO的要訣(這不是本書的重點,不過他寫得還真棒)
  • AdWords關鍵字行銷的常見問題與解答(這章節非常棒)
如果說「網路行銷必修的10堂課」這本書是推薦給一般網路愛好者的「甜點」,那麼這本Perry Marshall領軍撰寫的「Google關鍵字行銷」可謂適合所有網商及SEM搜尋引擎行銷工作者必讀的「正餐」。這是我讀過寫AdWords寫最好的一本,我想你讀完應不會失望。惟獨要注意的是,如果你對關鍵字廣告真的沒興趣,那就不必看了,因為這本書80%全在講關鍵字廣告。
談談最後一本「用戶體驗的要素 ─ 以用戶為中心的Web設計」,這本書全書只在談一件事,就是作者即美國用戶體驗專家Jesse James Garrett所提出來的一個理論架構「the elements of user experience」(大致是將一個網站拆成五個由下而上的層面)。作者在出版這本書之前,他這個獨創的網站顧客體驗分析圖示模型已經在網上流行被下載被轉載很長一段時間。
這本不是很厚的書,就全講這個圖,一套他發明的以顧客體驗為中心的網站理論模型,一層一層的仔細講。乍聽起來「理論」應該很枯燥且充滿技術名詞吧?不會,這本書作者在序的地方就表明,這本書不會提到任何一個很專業的名詞以及任何一條程式語言。所言不假,確實是還蠻好讀的。
我讀這本書的時候,剛好負責公司購物網站大改版,所以交互對照體會也比較深。這又是我幸運的地方。
從筆者在台灣的網路從業經驗來看,「UCD(以顧客為中心的設計)」在台灣是一個不被重視的領域,不要說整個顧客購買環節體驗是否順暢,就連用戶「網站Visual翻頁的流暢性」也很少有網路公司重視,或者說一方面缺乏專業人才,一方面根本不認為這是一個網站比較高的priority。(但這卻是全球電子商務第一強Amazon公司最重視的前幾項競爭優勢)
美國是電子商務最成熟先進的國家,電子商務已經發展至專業細分的年代。光是專攻商務網站顧客體驗的公司就非常多,而台灣大概只有源自美系的Yahoo!奇摩eBay才有這方面的相關人員編制。
由於我尚未拜讀到UCD殿堂的聖經,即由Steve Krug着的「Don't make me think」,所以這本「用戶體驗的要素 ─ 以用戶為中心的Web設計」就成了我的顧客體驗思維啟蒙之作。我光看作者第一章「用戶體驗為什麼如此重要」的開場,我就被「煞」到了。從這一刻,我決定要開始好好研究「顧客可用性」(Usability)。唉,驚覺自己真是白癡,在網路圈虛耗這麼多年,才發現這個UCD領域的重要性。
如果你是資深的網路從業人員,或自我期許較高的網路設計工作者,都建議你看看這本書,或起碼認識一下這個網站理論圖示模型。台灣應沒出版這本書,如果有機會你可在中國噹噹網卓越亞馬遜買(超便宜),或者跟美國Amazon買。懶得買,就上網抓相關資訊吧。(文/V怪客)



註*:2006起在內湖學學文創聽了幾位知名部落客如迴紋針工頭堅艾瑪的課後,開始栽進部落格的迷人世界。
延伸閱讀他人心得:網路行銷必修的10堂課/當先生的實驗室

收進你的MyShare個人書籤AddThis Social Bookmark Button




FPGA UART

Src:
http://www.bealto.com/fpga-uart.html


Notes :
A good website for FPGA code study. Editor has some example for UART & DSP related module.
User start FPGA development w/ Xilinx Spartan-6 LX45


---------------------------------------

FPGA Simple UART

Eric Bainville - Apr 2013

Introduction

Curious about how the hardware I use (i.e. fight with) every day is designed, I decided to acquire a FPGA board and start programming it in VHDL. The long term objective is to design some kind of basic OpenCL compute device. I know it sounds a bit ambitious; we'll see how far we can get...
So, I ordered a Digilent Atlys Board from Amazon. This board is based on a Xilinx Spartan-6 LX45 FPGA, and provides a lot of features, including HDMI, audio, USB, Ethernet, and 128MB of RAM.
To use the board, you will need to download a few files:
The board comes with a preloaded demo displaying some basic color patterns, and controlling the audio and LEDs from the various switches and push buttons. This demo can be downloaded from Digilent site in source and binary form. The binary can then be re-programmed later into the board.
Next step is to run the Xilinx ISE Design Suite, and start writing some code. Mike Field's Hamsterworks site provides an excellent FPGA course, and a large number of sample projects. I started following the different modules of the online course, which got me up and running in no time. Thanks Mike!
Below is my first serious design: a very simple UART (Universal Asynchronous Receiver/Transmitter). Since this is my first design, I put this online mainly for the fun of updating my site after a very long hiatus. There are already plenty of more complete/efficient/flexible/tested UART designs on the Internet. If you are an FPGA expert and ended up reading this, please drop me a line if you see something really wrong...

Contents

Downloads

This archive contains the two entities described in this page, and the corresponding user constraints file for the Atlys board:  basic_uart-20130424.zip (3 KB)