hoamon's sandbox

"sandbox" is a jargon of Version Control System.

如果你得了武漢肺炎~

隨著武漢肺炎病毒不斷地變種,現今的 Omicron 傳染力極其強大。我已經接收到不少朋友、親戚、小孩同學、…等人確診的訊息。是時候,再為自己補上最後一道防線了: 心理建設。

../../../_images/wear_mask_and_hat.jpg

戶外還是戴好口罩及有前緣的帽子,這種帽子再加眼鏡可再多擋些氣溶膠,也有助於提醒人「不要用手揉眼睛」

Read more...


健康碼、實聯制、社交距離APP之比較

../../../_images/3dozes.jpg

已施打三劑高端武漢肺炎疫苗

強國強制使用的「健康碼APP」,本質上,是一張*正常人*的電子通行證,其稽核個人的移動路徑、武漢肺炎篩檢報告、人際接觸情形、疫苗接種紀錄、…等,再經運算(或是隨便計算)顯示成「綠碼、黃碼、紅碼」,惟有綠碼可暢行無阻,其餘在「進入商家、機關、乘坐大眾運輸工具、辦理業務…」皆有所限制。

「健康碼APP」與過去土改、三反、五反、反右、大饑荒、文革、…時期,所用之「路條」是相同的工具: 讓特定的人(正常無特權之人)不得自由移動。「健康碼APP」是否能「防疫」? 沒有明確的數值可證明,但在「減少人際交流、縮短移動距離、剝奪人民自由權」上,效果十分顯著。

Read more...


一切都是剛剛開始

../../../_images/math.jpg

9 天有 216 個小時

  • 女兒跑來問我: 『你知道 9 天有幾個小時嗎? 有 216 個小時喔~ 媽媽教我的。』邊問邊把媽媽教她的紙張拿給我。
  • 我心裡想著: 『這些直式真亂,如果要算的天數更多,這樣表示早晚會把自己搞亂。』
  • 所以我說: 『妳知道哪個 24 小時是指第幾天的嗎? 來,我們把它標上圓圈1、圓圈2、…圓圈9,這樣才不會加到亂掉。』

邊標記的過程中,再跟女兒確認一下,她是不是明確地知道什麼加上什麼後是得到什麼。因為我是個機車的人,並不能滿足得到正確的答案,推導過程也得是正確的。

而且在我用了近 40 年的數學後,經驗是: 規矩是算數的基本、算數是數學的基本,數學要好,規矩不能少。

這裡先補充一個概念: 用直式教學並不是「錯誤的」,直式在進位表示上,對學習者有利,易於教學 。只是在多數值的累計上,無法簡單地、整齊地呈現問題的核心。

在整理完紙張上半部的直式計算式後,我接著要向她說明使用橫式計算式來完成這個問題。

Read more...


我對臺灣 2018 地方大選及公投選舉結果的看法

已經過了投票截止時間了,雖然某些投票所還在繼續進行投票作業,但現在我們尚未得知最終投票結果。所以我先把結論寫在這裡。

Read more...



唷喔! 你憑什麼能管理軟體工程師?

../../../_images/0412.jpg

工商廣告: 敝司持續徵求全端工程師,主要語言: Python(Django) / Javascript ,主要平台: Ubuntu Linux on AWS ,月薪是 2.5 ~ 8.5 萬之間,敬請瀏覽指教 敝司徵才網站

就像歷史一樣,看得短點的人,跟看得長點的人,所分析出的結論會不一樣。

不同時期認識我的人,對我也會有不同的看法。目前主要把人生花在軟體工作上,在這邊所接受到的回饋會比較多,等將來把時間多花在政治工作上,相信也會有不少人質疑我,年輕時不是個民進黨狂熱支持者,怎麼現在完全不一樣了!

回到標題的問題上,在大學時期以前就認識我的人,都會知道我讀的是土木工程學系,是一個誤把土木系當土地開發系的傻蛋,在百般懕惡力學下,大學時期的教科書讀的是二二六六。我無法求解靜不定結構、測量平差、滲透流量…,甚至在大學三修流力後,也還是到博士班時,才從碩班學弟口中聽到水錘現象。

因此當我開了軟體公司,聘請員工後,就常面臨老朋友們的一項質疑: 『唷喔! 你憑什麼能管理軟體工程師?』

這裡先簡單回答: 「我沒這能力。」但如果看倌有點時間的話,就請繼續看下去,了解一下 「一個沒能力管理軟體工程師的人,究竟是憑什麼?」

Read more...


一個小小的格式錯誤

一個小小的格式錯誤,我查了一整天。前句當然是誇飾法,畢竟我一整天還是得吃飯、上廁所、站起來走來走去,最重要的是不能忘了呼吸。

(ap.example.com-env) ubuntu@ip-172-16-32-60:/var/www-aps/ap.example.com-36-81a1/trunk$ ./manage.py runserver 0.0.0.0:8000 --nothread
Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 195, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 39, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 16, in <module>
    from django.db.migrations.executor import MigrationExecutor
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 7, in <module>
    from .loader import MigrationLoader
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 10, in <module>
    from django.db.migrations.recorder import MigrationRecorder
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 12, in <module>
    class MigrationRecorder(object):
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 26, in MigrationRecorder
    class Migration(models.Model):
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 27, in Migration
    app = models.CharField(max_length=255)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1072, in __init__
    super(CharField, self).__init__(*args, **kwargs)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 166, in __init__
    self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 55, in __getattr__
    self._setup(name)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 43, in _setup
    self._wrapped = Settings(settings_module)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 116, in __init__
    setattr(self, setting, setting_value)
  File "/var/www/ap.example.com-env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 85, in __setattr__
    raise ImproperlyConfigured("If set, %s must end with a slash" % name)
django.core.exceptions.ImproperlyConfigured: If set, STATIC_URL must end with a slash

Read more...


將錯就錯: 子類別(derived class)覆載(override)父類別(inherited class)函式

多年前,寫了一個內部用的除錯系統,因為有可能登入模組本身就是有 bug 的,為了降低系統的複雜性,所以不以 django auth 架構作身份驗證,單純檢查 remote_ip 有沒有在 settings.INTERNAL_IPS 裡來達到安全性檢查:

# ho600_lib/views.py
from django.conf import settings
def check_internal_ips(function):
    def _inner_function(*args, **kw):
        request = args[0]
        if (hasattr(settings, 'INTERNAL_IPS')
            and request.META.get('REMOTE_ADDR')
                in settings.INTERNAL_IPS):
            return function(*args, **kw)
        else:
            return HttpResponseForbidden(
                'You have no right!!!')
    return _inner_function


@check_internal_ips
def list_bugrecords(R):
    """ list the latest 10 records
        about automated bug tracker
    """
    pass


# settings.py
INTERNAL_IPS = ['127.0.0.1', '192.168.1.1',
                '192.168.1.2', '192.168.1.254']

但這有一個問題,每次家裡 IP 有變動,或是在別的地方處理 bug 時,就得先登入機器內部修改 settings.py 才能從網頁上閱讀 bug 紀錄。實在不方便,大概拖了近 10 年之久了,今天終於改良了這個功能。

Read more...


可匿名的公平筆試網站上線了

../../../_images/signed_words.png

既然用了私錀簽章。所以本句話,我負責。

再次廣告: 敝司徵才網站 ,主要語言: Python(Django) / Javascript ,主要平台: Ubuntu Linux on AWS ,年薪是 60 萬以上,敬請瀏覽指教。

搭配徵才網站的筆試系統,其述求重點在於 完全匿名 下,允許應聘者與考試委員準確交流。

就目前的信箱服務來說,如果在註冊新帳號時,完全給 假的資訊 ,不也是很容易就可以拿到一組信箱來作為 匿名考試 的工具嗎? 然則就算全部用假資訊來註冊,現今的信箱服務也往往會要求作手機號碼的驗證,無法完全匿名,於此,若是在筆試網站上是要求應聘者須提供個人信箱,來作為試題往返的管道,不免還是會洩露部份個人資訊,假使我能駭進他的信箱伺服器的話。另外給假資訊的方法,難免有違反信箱系統的會員使用條款,敝司不過是要徵個才,何必讓人落得作了個欺騙的動作呢?

況且,將匿名責任交由應聘者自行處理,成果也會參差不齊,如果有人就是大刺刺地用了 i_am_linus@gmail.com 的信箱來應聘,我是該信還是不信呢? 畢竟他透露出獨特資訊,這對我還是會造成錨定效應。

話說重頭,敝司徵才為什麼要搞得這麼複雜???

Read more...


為什麼給一個在埔里工作的軟體工程師如此高的薪水?

../../../_images/why_give_such_high_salary_for_a_software_job_in_puli.png

年薪:60萬+ ; 每週工時:40小時- ; 週休 3 日; 學歷/科系/性別/年齡/...: 不限;

標題是敝下夫人給我的問題。所以好吧! 不解不行,請看下去我是如何求解的。

Read more...


Fork me Related Posts Plugin for WordPress, Blogger...