撰文於銘 飄散隨風 心行無語 仰首蒼穹

Swift 踩到 Unicode 等價性與異體字的雷

FontForge 使用心得

前言

 

FontForge 是一支功能很強的字型處理程式,會接觸這支程式,主要是在學習由某些字型檔,取出部份字型,打造出一個 Web 開放字型 woff/woff2(Web Open Font Format),讓讀者在線上閱讀佛典時,可以在沒有安裝較新的 unicode 字型的情況下,也能看到這些字型,就是利用 Web 開放字型。

 

下載與安裝

 

FontForge 官網:https://fontforge.org/

 

下載後請依官網指示安裝及執行,重點提示:

 

  • 在安裝程式按右鍵,選擇「以系統管理員身分執行」。

 

image


 

  • 安裝後,開啟 FontForge 也是按右鍵,選擇「以系統管理員身分執行」,或是直接在捷徑按右鍵,選內容 -> 相容性,勾選「以系統管理員的身分執行此程式」。

 

image

 

如果要處理的字型很大,就需要 64 位元版的程式,可在這裡下載最新的版本:

 

https://sourceforge.net/projects/fontforgebuilds/files/x86_64/Portable/

 

不過作者有交待,64 位元不常更新,可能問題較多,請儘量少用。

 

重要度:
文章分類:

From Perl To Ruby - 從珍珠到紅寶石

這篇是因為同事果睿師兄發心要開辦內部的 Ruby 語言夏令營,要教導同仁利用 Ruby 處理日常工作遇到的問題,所以寫了一些自己所學一些程式的感想。

*** ***

先抄幾段 Ruby 在維基百科中和 Perl 有關內容

  • CPAN 上排名第一名,同時也是 Perl 6 的開發者的唐鳳(Autrijus / Audrey)說:「Ruby 就是『沒有到處打廣告的 Perl 6 』」。
     
  • 松本行弘在接受歐萊禮(O'Reilly)訪問時,提到「Ruby 借用了很多 Perl 的東西……,Python 遠比 Perl 要少……」、「我認為 Ruby 這個名字作為 Perl 之後的一門語言的名字真是再恰當不過了。」
     
  • Perl之父拉里·沃爾(Larry Wall)說:「很多方面上我還是很喜歡 Ruby 的,這是因為那些部分是從 Perl 借過去的。:-)」、「我還喜歡 Ruby 的 C<*> 一元星號運算子,所以我把它加到 Perl 6 裡面。」

我在寫程式的過程中,學習 Perl 是一個新的里程,過去寫程式到執行,是比較麻煩的,要開啟專用的程式,寫完之後要編譯成副檔名為 exe 的執行檔,然後再執行看看。有問題再重複一次,大一點的程式,編譯要好幾分鐘。

這種程式語言可以簡單稱為編譯式語言,後來學了 Perl,這種可稱為直譯式,就是隨便用個純文字編輯器,寫個幾行,就可以執行了,真的很方便。

重要度:
文章分類:

C++ Builder 處理無法載入專案的錯誤 Could not convert variant of type (Null) into type (OleStr)

今天要用 C++ Builder 10.2.3 開啟一個舊的專案時,卻突然跳出一個錯誤訊息。

 

 image

 

這個專案半年前有開啟過,並沒有什麼問題。C++ Builder 開啟其它專案也沒有問題,不知是哪裡出錯了?

 

找了許多資料,有許多都是在程式中或資料庫中遇到的,不是我這種一開始就打不開專案的問題。

 

終於在這個影片中看到一個解法

 

https://www.youtube.com/watch?v=WuA7nuADRx0

 

重要度:
文章分類:
電腦標籤:

在 Github 提交 Pull Request

這篇是介紹如何在 Github 上修改別人的專案。當然不是直接修改,而是送出建議,請對方修改。

 

底下是記錄實際操作過程,前置作業是以 cbeta-git 為對方代表,有一個 testpr 的專案。

 

heavenchou 是我方代表,首先要 Fork testpr 專案,並且在自己 Fork 的專案進行修改,然後提交、推送,和修改一般專案一樣。

 

此時到 Github 去看,可以看到有一個通知:

 

This branch is 1 commit ......

 

按下旁邊的 Contribute,會出現如下視窗,按下 Open pull request。

 

image
 

重要度:
文章分類:
電腦標籤:

Mac App 使用多個 Storyboard 設計畫面

Mac App 在使用 Storyboard 設計畫面時,預設是有一個主要的 Storyboard,裡面可以放置很多個 View,然而畫面一多,處理起來也是麻煩,本文是介紹如何使用多個 Storyboard,以及如何將原有的 Storyboard 分割。

 

測試程式

 

底下是示範操作。

 

首先,先做出第一個視窗。

 

image

 

接著,依傳統的方式,加入 View Controller 當做第二個視窗。

 

image

 

加入後,並在第一視窗的按鈕連上第二視窗,用來開啟第二視窗。

 

image

 

測試執行,果然可以順利開啟第二視窗。


 

image

 

重要度:
文章分類:
電腦標籤:

在 Mac 命令列使用 Github 的 Token 執行 Git Push

以前有寫過一篇「在 Xcode 操作 Git」,為什麼又要寫這篇在命令列的 push 呢?

因為今天用 Xcode v13.3 提交雖然有成功,但推送卻失敗,得到如下訊息。

 

image

 

在 stackoverflow 有看到有人也是今天提問,但還沒有看到回答。

 

https://stackoverflow.com/questions/71581440/q-an-unknown-error-occurred-user-rejected-certificate-for-github-com-17-on

 

所以決定先在命令列推送。

 

重要度:
文章分類:
電腦標籤:

在 C# 解壓縮整個檔案(可覆寫舊檔)

最近在用 C# 寫程式,處理到解壓縮的部份,雖然它有很方便的方法

 

ZipFile.ExtractToDirectory(壓縮檔, 目的目錄);

 

不過實測後,發現一個問題,若目的已有相同的檔案,則會産生錯誤,所以要自行解決這個問題。

 

我原本想過三個方法。

 

第一個是先解壓縮在其它目錄,再全部移到指定的目錄,但缺點是可能會佔用太多空間。如果原本的檔案就很大,要解開的檔案也很大,硬碟空間不夠的情況,解壓縮就會失敗,所以這個方法就先放棄了。

 

第二個方去是先逐一檢查檔案是否存在,存在就先刪除。如此一來,先把舊檔案刪掉,空間就會多一點,比較不擔心空間不夠的問題,最後再用 ZipFile.ExtractToDirectory 解壓縮至指定目錄。

 

第三個方法同上,只是突然想到,乾脆在檢查是否存在之後,就直接解壓縮該檔案,不用等到最後再全部解壓縮。

 

重要度:
文章分類:

使用 SSH 和金鑰登入 cPanel 主機

這篇是要介紹使用 SSH 和金鑰登入 cPanel 的主機,我是以 Buluhost 和 GreenGeeks 主機為例。不過有些主機商沒有提供 SSH 的功能,例如 Sugarhosts,我有幾個站放在那邊,它的最大的好處是可以用中文溝通,可惜 SSH 不支援。

 

底下是記錄操作過程。

 

要求主機商啟用 SSH

 

有網友說 Bulehost 預設 SSH 是啟用的,好像也看過官網如此提過。不過我在測試時,看到這個訊息:

 

Shell access is not enabled on your account!

If you need shell access please contact support.

 

所以就線上請 Bulehost 幫我啟用,幸好只用簡單的英文就完成任務,對方立刻就幫忙啟用了。

 

至於 GreenGeeks 則是在 Support 網頁按下 Open new Ticket,簡單寫著我需要 SSH 功能,對方也是很快就來信說已經啟用了。

 

查詢主機 IP、網址和登入帳號

 

在 cPanel 界面中,可以找到主機的 IP,也可以看到用戶名和網域,下圖紅色的文字是被我修改過的,看的出來那是不合理的 IP。 :)

 

image

 

重要度:
文章分類:

C# 使用 HttpClient 非同步下載檔案

因為所寫的 C# 程式需要由網路下載大的檔案,但官方文件所寫的內容不夠多,所以花了點時間,研究了 HttpClient 非同步下載,並且記錄了一些資料,以供自己未來複習及提供有需要的人參考。

 

WebClient vs HttpClient

 

在微軟官方文件中,一開始有找到了 WebClient 和 HttpClient 二種類別,結果在 WebClient 的官方文件中,看到這一段:

 

 

我們不建議您將類別用於 WebClient 新的開發。 請改用 System.Net.Http.HttpClient 類別。
 

 

所以就放棄研究 WebClient,直攻 HttpClient 了。

 

HttpClient 及注意事項

 

HttpClient 雖然比 WebClient 好用,但有一些事要注意。

 

首先是不要大量使用新建立的 HttpClient,底下是官方文件的說明:

 

 

HttpClient 的目的是要具現化一次,並在應用程式的整個生命週期中重複使用。具現化每個要求的 HttpClient 類別,將會耗盡繁重負載下可用的通訊端數目。這會導致 >socketexception 錯誤。以下是正確使用 HttpClient 的範例。
 

 

 

public class GoodController : ApiController

{

    private static readonly HttpClient HttpClient;

 

    static GoodController()

    {

        HttpClient = new HttpClient();

    }

}

 

不過,在實測中,最多同時只能開啟二個連結。

 

查了不少資料,才知道有個變數 ServicePointManager.DefaultConnectionLimit,官方說明

 

 

ServicePoint 物件所允許的同時連線最大數。 ASP.NET 裝載的應用程式預設的連線限制為10,其他則為2。

 

 

所以若要多開啟幾個連結,不知如何做才好?目前我只找到二個方法:

 

1. 增加 ServicePointManager.DefaultConnectionLimit

2. HttpClient 每次都建立新物件,就沒這個問題了。

 

 

在網路上也查詢了其它文章,有人提到若用 static 的方式來執行 HttpClient ,也會有一些限制,例如長期連線時,可能因為網路上的 DNS 更新後,HttpClient 沒有更新解析 DNS,就會有問題。

 

因此有人介紹更好用的 HttpClientFactory,不過官方文件我只有查到 IHttpClientFactory,而且看起來有點複雜,反正我目前的程式不會用到大量的連線,也不會需要長時間使用,不用擔心 DNS 更新的問題,所以決定還是使用 HttpClient 即可。

 

另外,官方還有這個建議:

 

 

想要下載大量資料 (50 mb 或以上的) ,則應用程式應該串流這些下載,而不使用預設的緩衝。如果使用預設緩衝,用戶端記憶體使用量將會變得非常大,可能會大幅降低效能。

 

 

這也是我需要測試的,因為我需要下載的檔案會有超過 GB 的大小。

 

重要度:
文章分類:
電腦標籤:

頁面

借我放一下廣告
訂閱 人生海海 RSS