2011.0714

昨天跟許饅頭跟竹科部門遠端連線emeeting開月會的一個心得 (只有聽的到竹科那邊的聲音)

JK :每件事情都想要做自動化 但是考慮做自動化的開發維護成本 做自動化就有利益嗎?

許饅頭: 主管也許不把開發人力視為成本...


今天又被叫去聽南科部門的月會 昨天聽到的主管聲音 今天下來南科這一場現身了
今日重點在於 "練兵時期 又會有一堆奇奇怪怪的自動化需求會被提出 ...."


我想
考慮自動化成本 是件應該思考的問題

prague12 發表在 痞客邦 留言(0) 人氣()

數字型態與Bytes 的互轉



Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
' 數字轉成 Bytes
Dim iCountS As Single = 45.11
Dim iCountD As Double = 45.11 ' single 相當於 float 是4個Byte
Dim byInputDataS = BitConverter.GetBytes(iCountS)
Dim byInputDataD = BitConverter.GetBytes(iCountD)


'Bytes 轉成數字
Dim iCountSS = BitConverter.ToSingle(byInputDataS, 0)
' Dim iCountDD = BitConverter.ToSingle(byInputDataD, 0) '跟原本型態不合 轉換後會數值錯掉
Dim iCountDD = BitConverter.ToDouble(byInputDataD, 0)


MsgBox(iCountSS)


End Sub
End Class

prague12 發表在 痞客邦 留言(0) 人氣()

2011.0714
晶圓偵測資料格式解碼

後記:4Byte表示ULong數值

今天繼續解的二進位檔案STDF格式的SDR Type,遇到了4Byte的Ulong整數轉換成10進位的問題,照常跟許饅頭討論完畢後,再經過一連測試,這個問題也是在3小時內被解掉了.
來做個描述:

一般16進制的表示法 是從高往低排 以4個Byte來表示 相當32位元

比如 :
&H00 00 01 00 = 256
&H00 00 01 10 = 256+16
&H00 00 01 11 = 256+16+1

但是當寫入二進位檔案時 會是 由低位Byte寫到高位Byte

也就是原本&H12 34 56 78 >> 寫入檔案是 &H78 56 34 12

因此在讀回檔案資料時, 必須做一個反向排列的動作

將檔案內讀出的&H78 56 34 12 反排成 &H12 34 56 78 才是原始數據

prague12 發表在 痞客邦 留言(0) 人氣()

2011.0708


JK說: .... 畢業以後 進公司 又都被綁住

許饅頭: 不會被綁住 只要有規劃 工作兩年再出國 很多人都這樣

突然有一種被激發的感覺 我真是幸運跟到好主管 !!!!

prague12 發表在 痞客邦 留言(0) 人氣()

參考: http://rfid-fantasy.blogspot.com/2009/07/byte.html 字串轉bytes

using System.Text;
String name = "張京介";
Encoding.UTF8.GetBytes(name); // {229, 188, 181, 228, 186, 172, 228, 187, 139}
Encoding.Default.GetBytes(name); // {177, 105, 168, 202, 164, 182}
Encoding.Unicode.GetBytes(name); // {53, 95, 172, 78, 203, 78}

'------byte陣列轉字串--------

MsgBox(Encoding.Default.GetString(item_bytes))



以下是應用範例


'-------針對RecodrType來做 frame內部項目分離------------------------
Select Case Record_type
Case "MIR"
item_list = Class_stdf_MIR.decode_MIRtoCP(Bcontent)
Dim iss = 0

'---組合item 字串------------
'
' frame/
' frame/
' item->item_str
' item->item_str
Dim item_str(31) As String
For j = 0 To item_list.Length - 1
Dim mm = item_list(j)
Dim item_bytes = Class_stdf_MIR.get_frameBuffer(Bcontent, mm, Bcontent(mm))
Dim str As New StringBuilder(50) '假設item最大長度50

'------byte陣列轉字串----------
'法1:
For Each m In item_bytes
str.Append(Convert.ToChar(m)) '轉換BYTEtoCHAR to組合每item字串
Next
'法2:MsgBox(Encoding.Default.GetString(item_bytes))
'------/byte陣列轉字串/--------
item_str(j) = str.ToString
ListBox1.Items.Add((j + 1).ToString + "_" + item_str(j).ToString)
Next


'---------填入 CP 項目表---------------
MIRtoCP.LOT_ID = item_str(0)
MIRtoCP.PART_TYP = ""
MIRtoCP.NODE_NAM = item_str(2)
MIRtoCP.TSTR_TYP = item_str(3)
MIRtoCP.JOB_NAM = item_str(4)
MIRtoCP.JOB_REV = item_str(5)
MIRtoCP.SUB_ID = item_str(6)
MIRtoCP.OPER_NAM = item_str(7)
MIRtoCP.FAMLY_ID = item_str(12)
MIRtoCP.FACIL_ID = item_str(17)
MIRtoCP.FLOW_ID = "CP1"
'--------/填入 CP 項目表/--------------


'---/組合item 字串-/--------------
Case "WIR"

Case "MRR"

Case "SDR"

Case "WRR"

Case "WCR"

Case "HBR"

Case "SBR"

Case "PRR"

End Select
'-------/針對RecodrType來做 frame內部項目分離/------------------------
-----------------------------------------

prague12 發表在 痞客邦 留言(0) 人氣()

silverlight4 調用 WCF 的模式都是屬於非同步

如果要想取回WCF非同步回傳值 在silverlight專案裡必須使用事件完成模式來取回
這跟 多執行緒 BCAKGROUNFWORKER 的用法是一樣的 感覺

在這裡已經隱含了跨執行緒介面傳遞



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
'------模式判別----------------------
Dim srv = New ServiceReference1.Service1Client 'WCF類別
Dim mode As String = "0"




'---------對非同步的Completed事件 掛上委派動作-------------------------
srv.jk_getisTimeModeAsync(Label_ID.Content)
AddHandler srv.jk_getisTimeModeCompleted, Sub(sd, parameter)
mode = parameter.result
' MessageBox.Show("isTimemode=" + mode)
If mode = "1" Then
' MessageBox.Show("isTimemode=" + mode + ",啟動計時")
Label_isTimemode.Content = "isTimemode=" + mode + ",啟動計時模式"
timer_RTime.Interval = TimeSpan.FromMilliseconds(30 * 1000) '15秒檢查一次是否為預設時間
timer_RTime.Start()
Else
' MessageBox.Show("isTimemode=" + mode + ",不啟動計時")
Label_isTimemode.Content = "isTimemode=" + mode + ",不啟動計時模式"
timer_RTime.Stop()
End If


'------/模式判別/----------------------
End Sub
'---------/對非同步的Completed事件 掛上委派動作/-------------------------


''---------對非同步的Completed事件 掛上委派動作-------------------------
' srv.jkget_sessionIDAsync()
'AddHandler srv.jkget_sessionbyNameCompleted, Sub(sd, parameter)
' mode = parameter.Result
' MessageBox.Show(mode + "=mode")

' End Sub
''---------/對非同步的Completed事件 掛上委派動作/-------------------------



End Sub


End Class

prague12 發表在 痞客邦 留言(0) 人氣()

在silverlight專案檔下 引用WCF類別

需要使用非同步的機制來取得WCF回應的結果 非同步寫法需要委派掛上事件的動作 JK:"委派"相當於是掛上記憶體涵數指標

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
Dim srv = New ServiceReference1.Service1Client 'WCF類別
Dim sID As String = "NN"

'---------對非同步的Completed事件 掛上委派動作-------------------------
AddHandler srv.jkget_sessionIDCompleted, Sub(sd, parameter)
sID = parameter.result
Label_ID.Content = sID
End Sub
'---------/對非同步的Completed事件 掛上委派動作/-------------------------

srv.jkget_sessionIDAsync()

End Sub

prague12 發表在 痞客邦 留言(0) 人氣()

2011.0707
任務一之晶圓針側自動化測試資料

正式入部門第二天,今天上午許饅頭給了我一堆半導體晶圓針測的資料和整個晶圓由生產到出貨的整體流程的教育訓練文件,讓我對晶圓生產整體有概念,下午許饅頭花了兩小時跟我簡報關於晶圓偵測的自動化檢測細節,通過講解,對一些專有名詞的深層意義才有一種恍然大悟的感覺
Wafer (晶圓)
Die (wafer 上的小矩型電路元件區塊)
Software Bin (高解析)
Hardware Bin (低解析,混和多個softBin 成一個hardBin)
Datalog (保有所有測試項目的數據)
Lot (放置wafer披薩的盒子,至多25片)

關於以上機台檢測Bin的資料,需要透過檢測程式來控制機台去測試die取得
取得的測試資料,又不同機台有各種的輸出格式,
其中一種輸出標準,是一種二進位格式 .stdf
而我的第一個任務就是去解讀 這種二進位格式的來源檔,進而轉換成ascii明碼的數據資料

因為以前解過雙頻DGPS Raw Measurment 的二進位檔案 ,還有以前跟LD研究過的FAT16檔案系統,再加上16位元單晶片記憶體數值運算的經驗.由以上三大內功加持下,在跟許饅頭簡報討論結束後,仔細交叉比對這個.stdf格式的規格書和一個完成轉換輸出檔案,比了兩個小時後,又到了下午六點這個放飯時間了,也差不多搞懂了規則.

其中關於”用兩個Byte來表示一個數值”的表示法,透過許饅頭的高低位元交換的觀念提點後,讓我回家後還是忍不住做了些coding測試其證明所言屬實,在這部份我著墨了一些說明,有興趣的可以繼續往下看看.

關於:
由2個Byte來表示一個數值Int16
Int16 的範圍 255*255 = 0 ~ 65535
也就是16位元記憶體的數值表示方式 0xFF


‘=======JK解說時間==================================
一個Int16 Type 的數值是由兩個Byte 來表示
比如: 00 FF = 255
FF 00 ‘低8位 + 高8位 當寫入二進位檔案時會先寫低8位元(FF) +高8位元( 00 )

01 00 =256
00 01 ‘寫入BinaryFile時的樣子

01 02 =258
02 01 ‘寫入BinaryFile時的樣子


反過來說 讀取二進位檔案的2個Byte 型態的數值 比如Int16 (16bit=2Byte)
在BinaryFile 裡的 02 01 (先低再高)
要解讀成 01 02 ‘先交換Byte的高低順序 (左高右低)
16^3 * 0 = 0
16^2 * 1= 256
16^1 * 0= 0
16^0 * 2= 2

Sum=0+256+0+2=258 ‘此Int16 數值=258

了解這樣的高低位交換規則後,其實也可以不需要做交換一樣可以計算出數值.
在BinaryFile 裡的 02 01 (先低再高)
‘-------高位 01 --------
16^3 * 0 = 0
16^2 * 1= 256

‘-------低位 02 --------
16^1 * 0= 0
16^0 * 2= 2

‘===========/JK解說時間/===================================

prague12 發表在 痞客邦 留言(2) 人氣()

2011.0706

CIM部門認領

很符合預期的,今天無疑我是拿到的遲到王的頭銜了,而且我還沒吃早餐….今天到公司A棟三樓訓練教室時,教室裡已經坐滿滿的了,推開門望眼探去也只剩下第一排右手邊一個空位,這個就是跟講師面對面的公媽位,不過也只好就對號入座.咦,當我坐下,我還沒回神,右手邊傳來聲招呼”嗨”,這才發現旁邊4個人也是實習生,而且就是昨天坐我後面聊天聊的很嗨的那四個.隨便入座也又坐在附近,也是一種緣份了.下課時間簡單的跟旁邊的聊了一下,旁邊這位名字最後一個字還跟我同字的御琦同仁是微電子所的而且還想簽博士班,這讓我想起了以前的一個念光電系的紅寶石同學,突然有感而發的清醒了起來聊了幾分鐘.接著又開始上毒物課,大家就又開始陷入缺氧狀態了.

早上結束了”危險化學毒物的課程”的三小時昏昏欲睡的時段,下午開始終於開始各部門的認領實習生的動作,就跟在幼稚園下學爸爸媽媽來接小朋友一樣,各部門的秘書一個一個出現來接走屬於該部門的暑期實習生,不過來認領我的卻不是秘書,是之前面試的主管,也是我的直屬饅頭(Mentor)”許志欽”,許饅頭說我們的CIM部門秘書剛好有事不在,所以許饅頭親自來接我,先回部門跟二級主管和多位三級主管打過招呼,許饅頭變身導遊開始帶我環繞聯電三棟大樓做介紹,這才發現除了A棟餐廳以外還有第二餐廳和第三餐廳,也去了有落地窗的七樓健身房,韻律教室,85度C,許饅頭請我喝咖啡,還說”累了的時候,就可以來85度C這邊放鬆一下,愛睏的時候,也可以來這裡瞇一下.”從這一刻開始,我突然開始覺得UMC這裡真是個幸福的工作環境.導覽結束後回部門,CIM部的美女秘書出現了,是的,是超正的穿著漢堡神偷黑白條紋裝的美女秘書.隨後跟許饅頭開了一場跟竹科同單位同事的網路語音視訊會談,竹科那邊傳來的聲音一直處於很嗨的狀態,我想,竹科那邊要嘛是一個很開心的工作環境,要不然就是這些人應該都是壓力太大以致身心精神都處於一種極亢奮的紓壓型態而久久不能自已.

prague12 發表在 痞客邦 留言(0) 人氣()

0704
向左轉向右轉
---------------------
早上七點五十分,七月的台南一大早就開始熾熱,從永康市公所前直走,會遇到永大路,如果往左轉,五分鐘後會切入台一線往新市的方向,順利直攻南科園區;很不幸的,頂著烈日我暈了頭往右轉,往右轉直走10分鐘後可以遇到大灣路,順著大灣路再10分鐘可以繞出王行路外環道接上台一線往新市方向,目的地一樣是南科園區,只是向左走向右走差很大,再這種烈日下多吸收了15分鐘的殺死人不償命強力放射紫外光,到了南科聯電大樓啪好車,有一種我還活的好好的真是奇蹟的感想,門口警衛還是沒收了我的有照相功能的手機,拿起手機才發現剛剛的向右轉走冤旺路讓我已經遲到了五分鐘,趕緊跑向聯電12A大樓大廳去報到,好死不死我後面還跟著一個人走進來,所以我沒拿到遲到冠軍,

之後很快的聯電暑期實習生14位同仁和9位正職新人一起走進了三樓會議廳開始了一天的報到過程,聯電全球介紹,廠區介紹,公司福利制度說明,工安訓練,火災講習.還有中午去吃同一棟大樓內的公司餐廳,一整天都關在裝潢富麗的大樓裡聽課,因為手機被收走了沒有時鐘可看,再加上連續講習課程的疲勞轟炸,格外有一種時空錯亂的感覺,終於到了放我們走出大樓的時間,是下午六點,太陽這下才展現溫和紅潤的一面,有人等著搭園區的交通車回南科火車站,大部分的人跟我一樣跟警衛取回我的手機,這才有了時間感,跨上機車,才想起脖子上還掛著一條umc藍條紋的員工識別證.就是這樣嗎?科學園區生活,落日餘暉撒落,林立的大樓玻璃反照著紅光.民國100年七月四日,JK聯電暑期實習日記第一篇正式登場.

往後這兩個月,我會強迫我繼續寫下去的…(突然有點心虛 三天至少寫一篇好了).公司有交代,薪資為最高機密,你不用問我了我是不會回答的.

prague12 發表在 痞客邦 留言(0) 人氣()

免費版本的MS SQL EXPRESS 2008 R2 版本下載連結在此
(網路上很多 SQL Server2008 EXPRESS 的連結都是引自微軟官方的網頁 可是也無法下載)



目前只有R2 版本的可以正常下載
free with Microsoft SQL Server 2008 R2 Express
有分好幾種版本 基本上是有含管理TOOL 和沒有含管理TOOL 兩類

R2 連結
http://www.microsoft.com/sqlserver/en/us/editions/express.aspx

prague12 發表在 痞客邦 留言(0) 人氣()

臨碑做了18小時的期末專題簡報 一大早睡眠不足的跑去教室要報告 居然變成老師去外校當口委 不用報告了交專題說明文件就好.....

( 我的嘔心瀝血PPT 當場作廢 ㄍ 我又那來的文件可以交.... )


這件事告訴我們

簡報隨時可能作廢..... 文件隨時要先寫....

最重要的 搞清楚報告當天老師有沒有要去外校當口委....

prague12 發表在 痞客邦 留言(0) 人氣()

關於SQLserver2008 EXPRESS 帶有管理工具的版本
http://sharedderrick.blogspot.com/2008/09/sql-server-2008-express-edition.html

prague12 發表在 痞客邦 留言(0) 人氣()

ADO.net4  sqlAdapter+DataSet+Gridview 存取動作
1.Select
2.Update

JK test ok
'====================================

Imports System.Data.SqlClient
Imports System.Web.Configuration '.net4 可以會這樣把連線字串獨立出來
Partial Class Postpage
    Inherits System.Web.UI.Page
    Public ReadOnly Property pre_Control_Textbox1() As TextBox  '公開這個 TextBox1 控制項給 後頁去存取
    Get
    Return TextBox1
    End Get
    End Property

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    TextBox1.Text = "KQ"  '測試crossPost
    End Sub

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

    sqlAction_Select()  '依ID去查詢
    End Sub

    Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click

    sqlAction_update() '依ID去查詢
    sqlAction_Select() '把查詢後的欄位資料分離取出後  再做更新

    End Sub


    Public Sub sqlAction_Select()
    '依ID去查詢
    '-----------

    '可以先用sqldatasource元件自動產生連線字串  會放在web.config內
    Dim conn_str = WebConfigurationManager.ConnectionStrings("db_webcamConnectionString").ConnectionString '使用第一組連線字串 (也可以用name 目前也只有放一組 )
    Dim conn1 As New SqlConnection(conn_str)

    Dim cmdstr = "SELECT   Table_webcam.* FROM   Table_webcam Where UserName=@UserName"
    Dim sqlcmd = New SqlCommand(cmdstr, conn1)
    sqlcmd.Parameters.AddWithValue("@UserName", TextBox1.Text)

    Dim Adapter1 As SqlDataAdapter = New SqlDataAdapter(sqlcmd)
    Dim dataset1 = New Data.DataSet() '產生一個名為test 的 DataSet
    Adapter1.Fill(dataset1)


    GridView2.DataSource = dataset1
    If dataset1.Tables.Count > 0 Then '可以測試insert >> "的確有"回傳資料給 ds
    GridView2.DataBind() '更新網頁容器GridView2
    dataset1.Clear()
    End If


    '-----------取出每個row 的每個cell 的值----------------
    Dim rows = GridView2.Rows.Count

    Dim str_all As String = ""
    For Each mm As GridViewRow In GridView2.Rows
    Dim str_temp As String = ""

    Dim cells_colum = mm.Cells().Count
    For i = 0 To cells_colum - 1
    str_temp = mm.Cells(i).Text.ToString.Trim
    str_all = str_all + str_temp + "/"
    Next
    Next
    Dim str_all_array = str_all.Split("/")

    TextBox_area.Text = str_all_array(1)
    TextBox_fps.Text = str_all_array(2)
    TextBox_Meta.Text = str_all_array(3)
    TextBox_email.Text = str_all_array(4)


    '------------/取出每個row 的每個cell 的值/-----------------


    End Sub


    Public Sub sqlAction_update()
    '把查詢後的欄位資料分離取出後  再做更新
    '---------------------
    '可以先用sqldatasource元件自動產生連線字串  會放在web.config內
    Dim conn_str = WebConfigurationManager.ConnectionStrings("db_webcamConnectionString").ConnectionString '使用第一組連線字串 (也可以用name 目前也只有放一組 )
    Dim conn1 As New SqlConnection(conn_str)

    '   Dim cmdstr_select = "SELECT   Table_webcam.* FROM   Table_webcam Where UserName=@UserName"
    Dim cmdstr_update = "UPDATE    Table_webcam SET  area = @area, Email = @Email  WHERE UserName = @UserName "
    Dim sqlcmd = New SqlCommand(cmdstr_update, conn1)
    sqlcmd.Parameters.AddWithValue("@UserName", TextBox1.Text)
    sqlcmd.Parameters.AddWithValue("@area", TextBox_area.Text)
    sqlcmd.Parameters.AddWithValue("@Email", TextBox_email.Text)
    Dim Adapter1 As SqlDataAdapter = New SqlDataAdapter(sqlcmd)
    Dim dataset1 = New Data.DataSet() '產生一個名為test 的 DataSet
    Adapter1.Fill(dataset1)

    GridView2.DataSource = dataset1
    If dataset1.Tables.Count > 0 Then '可以測試insert >> "的確有"回傳資料給 ds
    GridView2.DataBind() '更新網頁容器GridView2
    dataset1.Clear()
    End If
    End Sub

End Class

prague12 發表在 痞客邦 留言(0) 人氣()

�ѦҦ�:
http://article.denniswave.com/5198
http://www.cnblogs.com/phpnuke/archive/2010/12/13/1904245.html


PHP ��}�r���ѭ��ի�URL
JK test ok
//======================================



ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow ugc noreferrer noopener">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml">




    function window.onload(){    //

prague12 發表在 痞客邦 留言(0) 人氣()