老朋友都知道,我現在是一家軟件公司銷售部門的項目經理和全棧開發工程師,就是這么“奇怪”的崗位,大概我是公司銷售團隊里比較少有技術背景、銷售業績又不那么理想的銷售。
近期在某個票務系統項目上駐場,原來我是這個項目的項目經理(從去年10月份做項目經理,到今年3月份),因為種種復雜的原因,我轉為駐場開發工程師,專門負責解決打印模塊。
這件事原來我一直以為比較簡單,因為十幾年前就做過某合作社的存單打印,b/s的項目,調好頁面中打印參數設置,直接用瀏覽器打印就可以了,打印按鈕直接調用ctrl+p 。 但項目的開發經理認為不能這樣,他也有他的理由,我看了現在的票務系統的打印流程,考慮到實際場景,比如多張票連續打印,瀏覽器自帶的打印功能確實不合適。
接下來準備自己用node.js開發一個打印的本地服務,給票務系統的相關頁面提供接口,接收要打印的信息,驅動打印機打印。但開發時間相對較長,時間成本上合適,于是發現了QZ Tray,一個很成熟的第三方解決方案,可以很好地與web進行交互,支持原始的打印命令驅動,方便定制打印模板。
打開Cursor,說干就干。沒多長時間就做好了演示模板,但問題出在了中文亂碼,不論我怎么調試,中文總是亂碼。
于是我把自己的AI員工問了一個遍,分別有谷歌的Gemini、DeepSeek,還有Qwen,甚至豆包。問他們同一個問題,得到了不同的答案,但一直沒有最優的解決方案。
后來終于在我反復推進提問中,找到了一絲線索,關于“字體”設置。雖然我在QZ Tray中一直設置各種編碼,可是我忽略了字體的設置。
打印機是TSC TTP-247,又經過N小時的探索,下載并使用了TSC Console V3.2.6.0,使用它的“點陣子工具”,自定義了一款中文字體,下載字型到打印機閃存中,才解決了這個問題。
這個問題說起來簡單,實際困擾了我兩天。這兩天讓我很煎熬,不能回到我銷售的崗位上,我又很惦記我的銷售業績,還有別的項目的任務等待我去推進,所以當解決問題之后,心里異常開心。
也許是QZ Tray使用的人相對比較少吧,能查到的資料真的不多,感謝幾位AI小伙伴。
可沒想到解決了以為是最大問題的中文亂碼問題,后邊的二維碼問題才是真正的問題。
TSC TTP-247是支持TSPL2打印語言的,所以不論是Cursor來寫代碼,還是我自己改來改去,直接用QRCODE的命令應該就可以。順利地生成了二維碼,看起來是沒有問題。不過二維碼這東西,人的肉眼怎么能一眼掃出問題呢?我隨手測試掃了一下,滿以為會隨著就能聽到“滴”的一聲,然后解析出二維碼的內容,但是,但是攝像頭在二維碼面前拍半天,愣是沒反應。
加起來就這么幾個參數,X,Y的坐標,容錯級別,大小等等,我來回把幾個參數從小調到大,從高調到低,打了幾十張測試票,就是不能掃碼成功。
甚至我把相同內容的二維碼,在電腦上生成,然后和打印出來的二維碼“人肉”對比,還是不行。
這個問題又困了我一整天。我最后以為這是打印機的問題,后來想想這種可能性太低了;
難道是這臺打印機生成的二維碼,只能檢票機器才能解碼?
這也不科學呀,技術上說不通,也沒必要。
除了用手機掃碼,還用草料網等在線解碼,甚至讓AI用算法解碼。
折騰得我快沒脾氣了,但一直沒放棄,有一點辦法都要去反復測試。甚至把二維碼先生成位圖圖片,再讓打印機去打印這個位圖,但結果慘不忍睹,打印質量像是一個密碼二維碼。
今天下午突然想到用官方的標簽工具來生成二維碼做測試,于是下載安裝了BarTender2022_92912,用它生成了二維碼再打印,這次居然成功了。
這說明打印機硬件是沒問題的,打印機只是一個輸出終端,一個輸出設備,為什么我在網頁用它的標準命令生成的二維碼就不行呢?
我想到了打印機日志。
于是打開打印機日志,再用BarTender打印了一張正常的二維碼,果然生成了一個改變此次事件的日志。
打開日志后如下圖:
上面的亂碼不重要,可以忽略,紅框是關鍵,就是這一行代碼,是BarTender向打印機發送二維碼的關鍵命令,和我在網頁中發送的命令,果然是有區別。
我參考這段命令完善了我的代碼,果然解決了這個問題。當我來質問Cursor時,它居然還振振有詞地說:
意思是我一開始給它提供的命令就是簡化版的,我一個大無語,你說面對這么一個AI員工,我能怎么辦?扣它工資?不存在,根本不存在工資和績效,罵它?那會讓AI覺得我沒素質,沒準以后不配合我工作,也不是咱的風格,真拿這家伙沒辦法。
最后我的收獲是,目前的AI水平真不能代替人工,不論是駕駛還是寫代碼,人臉的創造力是AI所不具備的。遇到問題的發散性思維,是作為一個人類工作者最寶貴的東西。
好久沒遇到過這種難題了,這事甚至讓我今天這個工作日請了病假,可能是壓力太大,腸胃不舒服又有些低燒,精神太差,撐不到正式工作場景,可下午實在氣不過(放心不下),又起來折騰,終于解決成功了。
回頭看看,很簡單的解決方案,看著這400來行的代碼(主文件)簡單,一看就懂,但是想要寫出來,真是有點考驗腦筋。
好了,不夸自己了,連夜寫篇總結,給后來也許會在b/s架構項目中用到QZ Tray的朋友提個醒:
解決中文亂碼問題,要在打印機生成中文字體,記住字體名稱,在網頁中定義好。
解決二維碼問題,參數一定要完整,例如:QRCODE 566,160,L,4,A,90,M2,S7,”TEST123″
遇到問題不要慌,要堅信一定有解決的問題,也許這就是做技術和做銷售最大的不同。做銷售的感覺,并不是100%努力了就一定能解決問題,或者是說,需要努力的層面太大,更多的是要和不同的人去打交道。而做技術寫代碼,只需要搞定代碼就可以。
其實我即使解決不了這兩個問題,會有什么嚴重的后果呢?丟面子吧,反正不會丟工作。但面子比工作重要,怎么能解決不了呢?不用去想別人怎么想我,我自己都接受不了自己在技術上的失敗,也許這個固執的性格問題,是讓我來解決這個問題的根本原因。
時間不早了,不敢熬夜了,最近血糖從20多到7~8來回震蕩,我這身體真是有點受不住。今天雖然在休息,但老板依然找我,說有個國外的視頻會議的項目打算讓我做開發,一會說讓我做前端,一會兒也可以讓我做后端,其實我想自己做全棧,即前后端一個人全做了。并不是我有什么大俠情景,可能是因為一個人開發習慣了吧,異地遠程團隊辦公,是最后的選擇。
我還比較關心,如果我一個全包了這個項目的開發,能給我多少$,我是一個累不死的小強。