TensorFlow Lite Tool: Toco (轉換器)
toco是用來生成一個可供TensorFlow Lite框架使用tflite文件。
bazel 編譯方式
$ bazel build tensorflow/lite/toco:toco
程式位於tensorflow/lite/toco資料夾下。Toco有三個主要功能,即匯入、匯出和轉換。匯入將輸入轉為Model類別,匯出將模型轉為flite模型或是grpahviz。轉換以輸入標示為基礎對模型操作,並且它會刪除未使用的運算元等。
TensorFlow Lite Tool: Toco (轉換器)
toco是用來生成一個可供TensorFlow Lite框架使用tflite文件。
bazel 編譯方式
$ bazel build tensorflow/lite/toco:toco
程式位於tensorflow/lite/toco資料夾下。Toco有三個主要功能,即匯入、匯出和轉換。匯入將輸入轉為Model類別,匯出將模型轉為flite模型或是grpahviz。轉換以輸入標示為基礎對模型操作,並且它會刪除未使用的運算元等。
Build TensorFlow Lite Static Library on Raspberry Pi 4
I found a very useful resource about installing TensorFlow Lite 2.* on Raspberry Pi 4 as follows: https://qengineering.eu/install-tensorflow-2-lite-on-raspberry-pi-4.html
It's about to build TensorFlow Lite static library in version 2.4 :
So far as we have known that Raspberry Pi 4, which is based on ARMv7 Processor rev 3 (v7l), has much more CPU computing power than previous generations. Neural Compute Stick 2(NCS 2) is a Plug and Play Development Kit for AI Inferencing via USB. Fortunately, I have both of them. Because of that, I was just wondering how to use them at the same time. The first idea coming to my mind is about AI inferencing. If we can have Tensorflow installed on it and do inferencing using NCS 2, that will be great.
之前曾經動手實作並測試Golang with Cgo 動態連結(dynamic linking) 與 靜態連結(static linking)函式庫範例用在Windows環境,相關內容整理在這篇:
[Golang] Golang with Cgo 動態連結(dynamic linking) 與 靜態連結(static linking)函式庫範例與筆記 in Windows environment
最近看到一篇 "最简单的cgo示例",既簡單且完整的示範了Golang with Cgo 動態連結(dynamic linking) 函式庫範例在Linux環境,個人將其改寫並放到github上:
Golang應用程式使用TensorFlow 或是 Tensorflow Lite(TFLite) 的前提是必須要有Tensorflow C 函式庫 或是 TensorFlow Lite C 函式庫,一般來說,比較少情況會是用Golang應用程式使用TensorFlow透過TensorFlow C 函式庫,因為未經過最佳化而效能不佳。Golang應用程式使用TensorFlow Lite(TFLite) 透過TensorFlow Lite C 函式庫會是效能較好的其中一種方式。以下將整理相關資訊來說明:
資安議題已經是越來越火熱的項目,本篇主要目的是進行eBPF、K8S與Offensive Security相關議題之研究,以便於掌握目前之發展狀況。
Surftrace 是由系統運維SIG 推出的一個ftrace 封裝器和開發編譯平台,讓用戶既能基於libbpf 快速構建工程進行開發,也能作為ftrace 的封裝器進行trace 命令編寫。
Surftrace 在網絡層面的增強,使得用戶只需要有相關的網絡基礎和一定的內核知識儲備,就可以用較低編碼工作量達到精準追踪網絡報文在Linux 內核的完整處理過程。適合用於追踪Linux 內核協議棧代碼、定位深層次網絡問題。
前言
本篇是個人進行初探Kafka using Golang時,把遇到坑填平後的結果紀錄。
Kafka 基本知識
網路上已經有很多相關文章,故不贅述。
前陣子因為交接別人的應用程式,有幸(被迫)接觸到RedisGraph這個東西,為了能讓自己快速上手這玩意,便做了一些小研究。
甚麼是RedisGraph?
RedisGraph 在 Redis 上實現了一種高效能記憶體圖資料庫。該專案作為 Redis 模組開源提供,支援 openCyper 查詢語言,可完成圖的建立、查詢、條件匹配等操作。為支援高效的圖搜尋操作,RedisGraph 底層實現了一種稱為 Hexastore 的三元組儲存結構。
之前用GoPacket去抓device name 為 "any" device interface (Pseudo-device that captures on all interfaces),"any"可以透過 tcpdump -D 查看到:
"any"這個device interface可以抓到經過所有interfaces的封包,部分程式碼如下:
前陣子花了一些時間在找一種方式,可以透過寫程式的方式抓取進出於任何device interfaces on Linux主機上的封包,目前主要是有這兩大作法: Raw Socket v.s. libpcap
檢查IP 是否在特定範圍內,的最快方法是什麼?例如,給定範圍192.168.1.1至192.168.10.254,如何檢查給定的輸入IP是否在該範圍內?以下是簡單範例:
因為工作上需要查看主機上所收到任何的LLDP封包,故在網上搜尋了一下資料與範例程式碼,組成下列一個簡單範例。
本程式會找出所有在此本機上的Net Devices ( Interface ),並依序收集封包,一旦發現有LLDP則會列印相關資訊在console上。
本篇將提供一個 Docker Compose YAML file 的範例,可產生 DroneCI + Gitea + Docker Registry + Docker Registry Web 的 CI/CD環境
Gitea 是蠻多公司的選擇,所以我選用它。同時,在這個講求效率的開發時代,必須要搭配一個 CI/CD 的平台。Drone CI 這是一套開源的持續整合框架,可以幫工程師節省非常多上版的時間,從測試、包版、image化到部屬全部一條龍服務,而且非常容易上手,易於維護,因此我們選用作為平台。
另外,Docker Registry 這就不用再多說了,而方便查詢Registry的Web可以提供快速與便利的介面來查看在Registry內的Docker Images。
先整理一下 Port Mapping List:
前陣子發現在Github上有個open-source projects: Parca (包含Server & Agent ),扒文了一下,Parca是Solar Signals的一個開源項目。它是持續分析存儲、查詢引擎和一個基於eBPF 的profiler。其目的在通過系統地測量代碼性能將可觀察性空間提升到一個新的水平,使每個人都能夠優化他們的代碼。
Parca 旨在將持續分析技術帶給所有人;其打包了許多開箱即用的功能,包括收集、存儲和提供可用於長期查詢的profiles 的能力— 包括CPU 分析,以確定CPU 執行一段特定代碼所需的時間。相關資源如下:
在開始說清楚講明白什麼是libbpfgo之前,我們可以先看這一投影片介紹初學者使用Go開發eBPF程式指南: Beginner's Guide to eBPF programming with Go,此作者也提供 GitHub: https://github.com/lizrice/libbpfgo-beginners,可體驗一下用libbpfgo開發的小範例程式Basic eBPF examples in Golang using libbpfgo.
看過了簡單的小範例之後,接下來這篇文章主要是解釋什麼是vmlinux.h 以及為什麼在編寫 eBPF 程序時應該開始使用它: What is vmlinux.h and Why is It Important for Your eBPF Programs?
重點如下:
當前端(Frontend) Web App 需要使用到多個API Servers時,最快的方式就是使用API Gateway 作為前端的進入點,透過URI Route的設定與對應後端的API & Server。
根據Janus's Github 上官方的描述, 它是一個輕量級的 API Gateway和 管理平台,可控制訪問 API 的人員、訪問時間以及訪問方式。Janus 還將記錄有關使用者如何與你的 API 交互以及何時出現問題的詳細分析。
官方文件: https://hellofresh.gitbooks.io/janus/content/
下面段落將說明如何快速制定與使用Janus API Gateway。
GraphQL系列文章
本篇內容將提供快速的指引,使用Golang Gin Framework來建置GraphQL的API Server。
Apollo Client 與 UI 框架無關 (可與 Angular.js、Vue.js、React 甚至原生 iOS 和 Android 應用程序一起使用)。
GraphQL系列文章
本篇內容將提供快速的指引,使用Golang Gin Framework來建置GraphQL的API Server。
GraphQL API Server主體上來說是參考下列文章的方式來建置:
第 1 天 - API 服務器(Go,GraphQL) - 第 1 部分
第 2 天 - API 服務器(Go,GraphQL) - 第 2 部分
Golang Gin Server網路上已經有很多資源,我們假設已經有的前提下,如何來建置GraphQL的API Server。首先,先安裝所需的模組:
我們需要準備下列檔案:
我目前Golang的版本如下:
本篇內容將提供快速的指引,包含相關需安裝的套件,從無到有建立全新的 React 應用程式( single-page application, SPA)
Tracee 是一個用 於 Linux 的執行時安全和取證工具。它使用 Linux eBPF 技術在執行時跟蹤系統和應用程式,並分析收集的事件以檢測可疑的行為模式。本篇對於Tracee這open source project進行了編譯與初步測試,在此做個筆記以防忘記。後續將針對源碼進行分析。
Github 位置為: https://github.com/aquasecurity/tracee
網路上已經有不少的相關文件資源可以參考,在此不重覆贅述,如下所示:
我在O`REILLY出的一本書 "Go學習手冊"內有看到一個很有趣的段落: 指標傳遞性能 ( Pointer Performance )
我把這段的重點直接整理下來(因為很重要) 如下:
重溫DoS時期的遊戲: 殖民帝國 Colonization
這套遊戲盒裝內的說明書、磁碟片(3 1/2吋)等等的相關的東西都有很完整保存下來,不信的話請看下圖:
由於這遊戲是執行在DoS 作業系統上的,所以我們需要在Windows 10上安裝DOS模擬器,並用此模擬器玩遊戲,執行步驟如下:
透過變數宣告時,需要在型別前面加上 * 符號,代表是指標型態,用來告訴編譯器這變數是某種型別的指標變數。
給值時也要給值的位置,我們在值前面加上 & 符號(位址運算子)。請看下面例子:
使用命令 kubectl taint 可以給節點(Node)增加一個污點。
比如:
說明:
給節點 node1 增加一個污點,它的鍵名是 key1,鍵值是 value1,效果是 NoSchedule。這表示只有擁有和這個污點相匹配的容忍度的 Pod 才能夠被分配到 node1 這個節點。
若要移除上述命令所添加的污點,你可以執行:
最常用的例子就是把 Master Node 改成有 Worker的屬性
[更新]
在K8S v1.24之後默認kubeadm取消taint,之前版本使用node-role.kubernetes.io/master標籤,在Kubernetes 1.24版本中,label標籤已經修改為node-role.kubernetes.io/control-plane
查看node節點所有標籤
我們可以直接查看master節點污點情況
生成污點
取消污點
Reference:
kubectl 備忘單
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/
How to use Informer to avoid frequently getting Pod and Service List via clientset.CoreV1()?
[情境]
之前開發Kubernetes相關的系統有遇過這種情況:
需要不斷的輪詢(Pooling) Kubernetes API 去獲得最新的 Pods 與 Services List,例如是每2秒。但輪詢是比較沒有效率的做法,因為很有極大的可能是,大部分的輪詢結果都是沒有變化的。
使用Informer來解決此問題。
[前言]