神要試驗他們,使他們覺得自己不過像獸一樣

詩篇 1:1 不從惡人的計謀、不站罪人的道路、不坐褻慢人的座位、
因著這句話,我從上家公司離職。
但…
今天所尋的,往往變成明天所逃避的;
今天所希冀的,往往成了明天所害怕的。
找到了新工作,結果卻是屎缺。

——————加班——————
我心裡說、這乃為世人的緣故、是 神要試驗他們、使他們覺得自己不過像獸一樣。–傳道書 3:18

在時常加班,幹話不斷,碼農格局公司上班,
RD明明是用腦力而不是用體力,但這碼農格局的公司卻希望榨乾人的體力。
最後…就可以理解傳道書所說:使他們覺得自己不過像獸一樣。

最近看見一家鱔魚意麵有排隊人潮,猜想可能真的很好吃,所以也跟著去排。
結果才發現是老板手腳很慢,點完到實際拿到餐點要三十分鐘以上。
因老板一次只會煮一位客人,單執行緒,不會多位客人點一樣的,就同時煮。
加班文化也常是如此,那做事沒方法的人,導致要加班,
但若只光看表面看起來就很認真。
人潮 == 好吃。
加班 == 認真。

每家公司文化不同。有些不加班,貼的標籤是不努力。
有些加班則說是工作能力不足。說上班是不是在玩,看非相關網頁,才得加班。
不管說什麼,立場都是公司對。
這兩個標籤在不同公司我都被貼過,因著加班或是不加班,
都有過貼過很努力,也被貼過能力不足的標籤。

公司開會時間常訂在快下班的時間,
然後再說開會不能報加班、不能報補休。
若是這樣,代表認為開會沒有價值與沒有生產力。
既無生產力,卻又常在召開,拉一堆不相甘的人進會議室。

讓菜鳥羞愧於報加班,暗示之所以加班是能力不足,
這是在玩政治,還是在寫程式?
明明看見菜鳥有加班,但主管加班單沒有簽到,也是算了。
既然這個菜鳥不敢報,那就算了。
讓實際寫code的人覺得虧欠。
明明一套軟體賣百萬以上。
卻要用暗示與貶低來控制下屬,讓他覺得自己沒有貢獻度,
以致於不敢要求,讓他覺得不配得。

準時走,不幫忙別人就暗示這樣很自私?
每次開發新功能都要用到XML序列化。
竟有人不會,這是閃過多少次開發。
開發時常都讓這個人閃過,不幫忙這種懶惰鬼,反而是自私了。

許多code的困難點是我去突破,
卻要因菜鳥開發太慢,我不願一起加班,要讓我自覺慚愧,
一些模糊指責加在我身,說我們是一組,為什麼他常在加班。
並希望我因此感到愧疚,讓我被無意義的念頭糾纏。
我得加班是因為這個人在加班,這是什麼道理。

——————考試——————
面試考試考非常難,還拿google出過的題目來出。
然後進去後,發現寫的code像大學生在寫作業。
寫出浪費別人時間閱讀的程式碼,不註解,亂命名,亂縮寫,以此自得其樂。
寫了能跑的code,而不是易讀的code。

考試可以考出一個人的工作能力?責任感,配合度,進取心,對coding的執著?
考的出這人是寫出能跑的code還是可讀性的code?
考的出對掌握專案時間的能力?
考的出面對bug的態度?
考的出知道自己在做旁枝未節的事,而不做嗎?

因著出題者本身的平庸,所以出一些難題,以展現自己很厲害。
平庸工程師比較多,code不重視可讀性,以為讓別人讀不懂,自己才算是厲害。
甚至根本也不在乎別人易不易讀。

——————菜鳥——————
我問菜鳥上家公司離職原因,他說公司都沒指派他寫程式。
當時猜想他可能是希望自己能突破,要成長,才離職。
若只聽表象,就會覺得這個人應該是很認真學習。
不給寫程式就離職了。
相處久了才知道…讓這人寫code,維護與教的人,都會很痛苦。
因是個連google都懶的用的人。

一個善書之人,提筆剛寫了幾筆,旁邊便有一頑童來捉他筆桿,
拉他手臂,教他始終沒法好好寫一個字。
菜鳥不斷打斷高手在做事,雞毛蒜皮的事不google就再亂問。
讓高手時間被肢解,專注力被弄破碎,
菜鳥生出屎尿般無止盡的小事來中斷高手當前工作。
擴散問題,每件事都重要,
做事毫無脈絡可尋,
寫個code像報告班長,請示上廁所。
寫個code要問abc三個人才敢寫,有時三個人給不同答案,
但到最後一個也不採用。

code裡面是有一個"道"在其中。
沒有辦法提升別人寫code的"道"。
這必須自己去嘗試。
但這裡是碼農程度的公司,都是在抄學習與寫code的捷徑。
Survey是最另人厭惡的一種行為。

菜鳥因沒有相對能力,變成假鬼假怪,
有時會用星期六、日也主動加班或是中餐不吃,
來表示自己很認真,沒有功勞也有苦勞。

寫一段code可以看見背後心態。
不註解、亂縮寫、幾百行被註解掉的程式碼也commit上去。

我用Visual Studio2008開發很久,菜鳥當時還笑說:現在有什麼linq,許多新技巧。
好像沒用過這些,是我比較菜。
但其實重劍無鋒,大巧不工。
基本code邏輯與態度不好,再多花招也都無用,
這code職場裝神弄鬼的人多。

除錯通常佔據開發者大部分時間,而掌握技巧需要一輩子投入
技術是可練,但態度卻是要經歷許多事才能養成。

——————主管與公司文化——————

不要以為寫程式會帶來理性。這前提是錯誤的。

押不合理的開發時間。
有些功能主管隨意就押個二天就能開發完成,
這代表就是亂測與亂寫。認真就輸了。

主管十點交待一次,我回答好,有在處理了。
十一點又透過別人交待一次同樣的東西。
以為多說幾遍bug就解了

我看大部份104上都希望程式設計師要能獨立做事,
這家公司最妙,有問題不要自己嘗試解,不要自己找答案。
這真的很妙,麻煩跟我說一下那本小說、那個電玩的結局,因只要知道結局就好了。
我自己認為重點是找答案的過程,
不然那看一部電影就快散場時再進去好了。

有天一個主管加班,電腦主機有狀況,結果解法是出去買乖乖,
主管負責買乖乖,這種主管還真容易當。
把乖乖放上主機,只是羞辱自己而已。
看出一個人時間利用與價值觀。

擴散問題,每件事都重要,
下周要釋出,這周還再加新功能。
剩二天要到客戶端poc,還要加功能,
請他決定,加了還要時間測,可能會有bug,
含糊不清,怕做決策,解釋一堆摸不著邊際的東西。
怕做決策,因為決策要承擔責任。

不停中斷別人這種文化不制止,
不停製造噪音讓人難以工作。整個辦公室鬧哄哄的。
這公司花太多時間說話,誰都能中斷你目前的工作。
不尊重自己與別人的時間。
因為只在追求開發速度要快,但這樣就失去了深度。
趕快說完,趕快做事。
程式碼能跑就好。
抄近路,求速成,菜鳥在隨意拿些屎尿般的小事中斷人卻不能喝止。
縱容這種瑣碎事的文化。
這家公司文化,會帶走創造力
充滿死亡味道的Code文化
沒有辦法從寫code中找到樂子
願意待那邊的人,是沒有志氣之人。
屈辱高手的人,怎麼可能自己是高手。
這些人應沒有體驗過何謂寫程式的心流。

寫程式環境中有高手,那是一種看不見的引導,讓人想與之看齊。
但這裡沒有,抬頭舉目只見演員。

籍由創造得到快樂,但沒有提供這些。
推理與解謎,也沒有這些。
我應該要以完成的事而自豪,這裡沒有。
我應該以code能力感到自豪,對,這問題只能我能解。
但在這,卻害怕被別人知道進度超前,因只會加更多工作,而不是得到休息。
這裡….越夜越美麗。
一到下班時間,一群人就high起來。

104上這公司應該要打找奴材與娘們性格。
三大特質,能力強,奴性強,娘們性格
能力強不會有另兩種特質。
這是互斥。
高手不為奴,願為奴不會是高手。
好像寫code技能很容易掌握,才會這麼廉價。
充滿創造力的人,將在這環境中,扼殺掉自己的才華。

上位者求問交鬼與問咒的,怎期望有智慧與謀略。
我大概可以理解為何選擇偶像的人是可憎恨的。
用乖乖來解電腦問題。應該要列入大學的必修課。

不重家庭關係的主管,必也不重視員工,
但員工是花錢請來的,重視個屁。
沒有產值就是bye了

低估別人所寫程式的價值。
有些東西只是看起來表面簡單。
像許多軟體自己若沒有編譯過,或自己寫過,
用幻想的,想說應該很簡單。
幻想隨便從網路上抓了開源軟體,只要1小時,就可以編譯完成。
像我自己曾編譯一個開源軟體,Vistual Studio跳了四百多個錯誤,
一堆細部參數要調整,才知道原來這麼複雜。
若一個人經常做的事簡單,有時就會覺得別人做的事也一樣簡單。

碼農自己花了七天做,當說出來的時候,卻假裝只花七分鐘。
當類似的項目別人預計要花三天做時,
碼農跳出來說,花太多時間了。

笑傲江湖中的風清揚:世上最厲害的招數,不在武功之中,而是陰謀詭計、機關陷井。
倘若落入了別人巧妙安排的陷井,
憑多高明的武功招數,那也全然用不著了。
風清揚被騙去取妻…,以致劍宗全滅…
我則被騙去把專案完成,浪費了許多時間與好心情..

廣告

詭異的方法命名EnsureVisible

listview中,當項目超過可以顯示的數量時,
會自動出現scrollbar可以調整。
但有時要顯示的項目太多,
會希望能自動捲動scrollbar到所想要顯示給user看的項目。
總以為相關方法應該是autoscroll等之類的。
也的確有AutoScrollOffset這方法,但AutoScrollOffset根本無作用。
結果真正可用的方法是叫
EnsureVisible
妙了…
Ensure開頭的方法真是少見。
這不是對與錯的問題。而是這命名習慣問題。
雖然作者想怎樣取名都OK。
但一些方法總有些通俗使用慣例。
Visible只會聯想到UI隱藏與關閉。
根本聯想不到,它會自動捲動scrollbar的行為。

此實作不屬於 Windows Platform FIPS 已驗證密碼編譯演算法的一部分

政府組態基準GCB有一項標準是
系統密碼編譯: 使用 FIPS 140 相容密碼編譯演算法,包括加密、雜湊與簽署演算法
這個功能若開啟,.net平台就不能用md5
C#以及asp,還有IIS都會被限制,而丟出例外
只有.net平台受到限制,java與Python就沒有受到限制了。

可以自己看一下GPO的設定
路徑是 Security Settings/Local Policies/Security Options/
System cryptography: Use FIPS…..

GCB_FIPS設定

2003 or xp則可以看機碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\fipsalgorithmpolicy
是不是被改成1

反組譯.net4.0 的 System.Security.Cryptography.MD5CryptoServiceProvider
可以看見MD5CryptoServiceProvider的建構子

[SecuritySafeCritical]
public MD5CryptoServiceProvider()
{
//就是這個判斷式造成無法用md5的。
if (CryptoConfig.AllowOnlyFipsAlgorithms)
throw new InvalidOperationException(Environment.GetResourceString(“Cryptography_NonCompliantFIPSAlgorithm"));

this._safeHashHandle = Utils.CreateHash(Utils.StaticProvHandle, 32771);
}

.net4可以直接看是否有開啟FIPS的限制,這個屬性是public的
Console.WriteLine(System.Security.Cryptography.CryptoConfig.AllowOnlyFipsAlgorithms);

.net2的話比較煩瑣,要透過叫用NativeCode
[DllImport(“bcrypt.dll")]
internal static extern uint BCryptGetFipsAlgorithmMode(
[MarshalAs(UnmanagedType.U1), Out]out bool pfEnabled);

public static bool IsSecurityOptionsFIPSEnabled
{
get
{
if (Environment.OSVersion.Version.Major >= 6)
{
bool fipsEnabled;
uint policyReadStatus = BCryptGetFipsAlgorithmMode(out fipsEnabled);
return ((policyReadStatus==0) && fipsEnabled);
}
else
{
using (RegistryKey fipsAlgorithmPolicyKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa", false))
{
if (fipsAlgorithmPolicyKey != null)
{
object data = fipsAlgorithmPolicyKey.GetValue(“FIPSAlgorithmPolicy");
if (data != null)
return ((int)data == 1);
}
return false;
}
}
}

}

asp可以改用sha1,但還要在IIS電腦金鑰的地方做調整
電腦金鑰

或是在web.config的<system.web>屬性間加入一行
<system.web>
<machineKey decryption="3DES" validation="SHA1″ />
</system.web>

但我的工具是要與其它產品溝通,沒辦法要求對方也改sha1
所以我一樣得用md5,也可以先用c++寫成處理md5的dll,再來叫用這dll也算是一種解決方式

不過我是採用GNU on Windows的工具
https://github.com/bmatzelle/gow/wiki

md5sum來處理,有3個檔案要複製到
md5sum.exe、libiconv2.dll、libintl3.dll
把我要處理的字串,先存檔
再透過c#叫用此dos指令來計算md5,再濾掉一些不相干的字元