二八 ‧ 年尾

工作近況

產品需求步入穩定,緊急的要求逐漸變少,但零星的硬體環境問題變多,這一類也不知道要怎麼交付給什麼人,只能硬著頭皮去做,甚至到自己要客制化 JDK 去解決問題,問題並不難,但網路上能用的資源很少,大部分只是花個時間解決那幾行程式小毛病。在 EDA 的場景下,大多的應用都不會接觸到如此大量資料、互動性高的桌面應用、有限的工作環境、穩定的作業系統。因此,相關資料少之又少,只能透過不斷地抽象化問題去找答案。

面試情況

陸陸續續收了不少來自 104 的履歷,普遍性都只是刷題達人。若問起最近讀了什麼書,當有一部分人答起《Cracking the Coding Interview》,都會懷疑只是剛好命中書中的內容,以至於在隨後問起簡單的問題時,大多都會想往極為教科書上的標準答案去想,現實世界並不是如此,有時只需要先把功能做出來,至於有沒有完美的複雜度,那又是另一個回事。別因為想不到完美的解法,而感到困惑,有信心地拿出自己擁有的武器解決問題,就只是這樣的要求。

有時不考慮看最後碩士的成績單,碩士班課程很多並不用寫程式,大多科目都像機器學習、人工智慧、深度學習、區塊鏈等,在高階語言流程上玩弄。對於 EDA 工作環境的話,那些毫無用武之地,這個產業就像傳統產業,已經有著二、三十年的歷史。調閱大學成績單,滿是基礎科目在及格邊緣的案例,在這樣的情況下,信任度便是問號。除了履歷上所列出的條目,沒有其他作品或著作,要在短短時間內認識一個人,只有推薦制度比較可靠。最終,基本上都會拒絕從 104 來的人選。也有收到一些經驗老道的特殊案例,許多四、五十歲的老大哥,工作經驗與年齡不符,好幾份工作都沒有超過三個月,原來世道如此險惡。

管理體驗

持續督促同事,那些應該在碩士班學習到的能力,基礎的寫作能力與閱讀能力,細心與自我研究,並超出管理指定的工作項目。不時,常常感慨「難道,以前我是這樣子的嗎?」對此毫無印象,也許是自己老了,也許時代變了,那都不得而知了。並非自願升上管理階級,但轉換職位的過程中,還是得下去寫比較複雜的部份、做一些技術指導,並不是只動一張嘴工作。許多管理階級要做的文書作業—評鑑評分制度,也開始接踵而來,處理請假事宜、採購設備等。

學校聯繫

接連收到幾次來自高中母校的電話,由以前資訊老師聯繫過來,想要我指導學弟相關程式問題,看著十年前拋出的程式設計問題,現在的學弟還能從中練習成長,原來以前的我做了不少事,而學校老師也還記得我。那些滿滿的黑歷史文章,看起來相當稚嫩。

年末時,有高中同學被班級導師邀回去分享經驗,而我這忙碌的小社畜自然不在其中,沒有這麼多悠哉的時間進行回校講座。過年也被老爸提前抓回去,說是要跟花中學弟一對一經驗談,同樣是考大學的成績不好,那時面臨到的極大壓力,要怎麼一路走過來,現在的我也沒有好的答案,至於我現在算不算過得好,心中仍沒有個底,畢竟每個人都不盡相同。

這回收到老師的邀請,要在二零二二的一月底寒訓回去跟資訊組的學弟妹們分享,至於為什麼合併花女一起,似乎只能在當下明白了。目前投影片的部分也準備了 連接,標題還在構思、內容還持續充實。沒有辦法像其他講者一樣,做著潮流項目 (如 NFT、比特幣、區塊鏈、機器學習、深度學習或人工智慧),只有一些老老的工作項目,倍感突兀。

生活歷程

處理完房子也過了快一年,大老婆還沒有娶,便開始著手小老婆,在十二月初跑去台北的 Lexus 營業所訂下了 NX 休旅車,最後考慮一次買到 NX 350 f sport,交車時間估計可以直接推到明年的生日禮物,恰好能持續堅持零貸款的生活原則。很多人也許會覺得為什麼要一次買這麼貴,想了想人生就這麼短,顧自己生命安全為主,也不要後悔做一些折衷的行為,好好地體驗人生。那為什麼不買歐系車?在臺灣水土不服的機率太大,還是買相近環境的車款吧,就像我們不該買俄羅斯產的汽車一樣,因為他們肯定沒有考慮散熱的設計,若是跑來這副熱帶島嶼國家,肯定毛病不少。

九月多邂逅了一個妹子,這中間的點點滴滴都在《批改娘串起得那段經歷》系列文中,有歡樂有哀愁,等到時機成熟,才會公開出來。在年尾慶生旅遊時,稱說「若寫到了二十篇,就跟我求婚」話可不能說這麼滿的,二十篇這個 KPI 要說難不難呢?不幸地,下一秒話就被收回了。

「在互相幫助的日子裡漸漸萌生戀情」—《無職轉生》

Read More +

《獻給某工程師的情書》

「有些情書,是無法唸出來的。」—《獻給某工程師的情書》

背景

近十多年前,看了一段來自 Matrix67 的一篇文章,並寫下了紀錄。那時,正值大二的我,對於 IOCCC 和 C 語言不夠了解,只做為一個基礎的認識並且記錄下,總幻想著以後有個機會用用。如今,在這個年底,一場邂逅,讓我想起了那好久好久以前的構思。

木製卡片之一

並且做成了一張木製卡片,最後挑了兩家廠商去做,擔心顯示的字型與雷雕技術之間造成難以成色的問題,因此在挑選字型時,也是偏向工業用字型。至於,被抱怨「編譯不起來」,那又是另一個故事了。

規格介紹

編譯

1
2
gcc main.c -o main
./main

限制

  • 這封情書只能容納 84 個字元
  • 字元只能以 ASCII 的形式儲存
  • 只能有 32 種不同字元。
  • ASCII 值會被忽略 < 36,即不可視字元以及特殊符號 !"#

原理說明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
main(h ,_,s) char*s;{return
h<1?main(*s,s[-h],"=a-1kj3gnm:q\
ebh_cf*<r.d>i^+?,()[0qTyrjuvcde'8\
h,Mk2polw-s1.t main(")&&s[-h]&&main
(h-1,_,s):h/2?_==*s?putchar(32[s])
:_%115<36||main(h,_,s+1):main(
0,h,"q>.#::##+b#:#(#k###+\
##h?.)+####b?(##rr###\
##?#,1#?r#<#g:#^#\
q?d?_#<kk##)#\
##>i#=fe#\
####")
;}

還原排版一下

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
main(h ,_,s) char*s; {
return
h<1 ?
main(*s,s[-h],"=a-1kj3gnm:qebh_cf*<r.d>i^+?,()[0qTyrjuvcde'8h,Mk2polw-s1.t main(")
&&s[-h]&&main(h-1,_,s) :
h/2 ?
_==*s ? putchar(32[s]) : _%115<36||main(h,_,s+1) :
main(0,h,"q>.#::##+b#:#(#k###+##h?.)+####b?(##rr#####?#,1#?r#<#g:#^#q?d?_#<kk##)###>i#=fe#####");
}
  1. main(h, _, s) char*s; 是主程式的進入點,相當於常見的 main(int argc, char *argv[]),因此 h = argc 也就是一開始程式的進入參數個數。
  2. ./main 執行時,傳進去的 h = argc = 1
  3. h
    1. 負號時,作為加密訊息的字元索引值 ()。s[-h]&&main(h-1,_,s) 則表示加密訊息非空,繼續推進下一個解析字元位置。
    2. 正數時,只標記狀態為 解密表格索引
  4. _ 作為當前加密訊息的字元
  5. s 作為傳遞資料的磁帶

暗碼對照表

1
2
encode: =a-1kj3gnm:qebh_cf*<r.d>i^+?,()[
decode: 0qTyrjuvcde'8h,Mk2polw-s1.t main(

加密訊息

1
q>.#::##+b#:#(#k###+##h?.)+####b?(##rr#####?#,1#?r#<#g:#^#q?d?_#<kk##)###>i#=fe#####

忽略 # 字元後,第一個 q 要去找 encode row 所在的位置

1
2
3
encode: =a-1kj3gnm:qebh_cf*<r.d>i^+?,()[
decode: 0qTyrjuvcde'8h,Mk2polw-s1.t main(
^this, get `'`

第二個 > 要去找 encode row 所在的位置

1
2
3
encode: =a-1kj3gnm:qebh_cf*<r.d>i^+?,()[
decode: 0qTyrjuvcde'8h,Mk2polw-s1.t main(
^this, get `s`

第三個 . 要去找 encode row 所在的位置

1
2
3
encode: =a-1kj3gnm:qebh_cf*<r.d>i^+?,()[
decode: 0qTyrjuvcde'8h,Mk2polw-s1.t main(
^this, get `w`

產生器


Read More +