在Git中忽略已修改的文件
我遇到了一種罕見的情況,一個文件已經被修改,但是我不想將這個變更提交給Git。有各種方法可以實現這一點,比如使用.gitignore
文件。然而,如果文件已經被追蹤,這種方法就不起作用。
解決方案是通過執行以下命令來手動忽略文件:
要再次追蹤文件,您可以通過使用以下命令來撤消此操作:
如果您有任何問題,請隨時聯繫我。
我遇到了一種罕見的情況,一個文件已經被修改,但是我不想將這個變更提交給Git。有各種方法可以實現這一點,比如使用.gitignore
文件。然而,如果文件已經被追蹤,這種方法就不起作用。
解決方案是通過執行以下命令來手動忽略文件:
要再次追蹤文件,您可以通過使用以下命令來撤消此操作:
如果您有任何問題,請隨時聯繫我。
問題:有時候,當您啟動一個本地 Node.js 服務器時,它可能會繼續在後台運行。如果您嘗試再次啟動服務器,您可能會遇到一個錯誤,指出端口(例如,8080)已經在使用中並被鎖定:
解決方案:您可以使用 lsof
命令來識別鎖定端口的進程:
或者,您可以將 8080
替換為您想要調查的特定端口號。這將顯示當前使用該端口的進程列表。識別您希望終止的進程(例如,正在運行的 node
與 PID 6709
)並執行以下命令來將其殺死:
最後,重新啟動您的服務器。一旦端口被釋放,它應該可以正常運行。
作為一名軟件工程師,我知道與產品經理合作的感覺。借助多年的經驗,我遇到過優秀的產品經理(PM)以及一些不理想的PM。每天,我都會與PM進行合作,我了解到可能出現的挑戰,特別是當彼此的關係變得緊張時。在這篇博客文章中,我將提供一些作為一名軟件工程師如何有效與PM合作的建議。
與PM合作時可能出現兩個主要的困難。第一個問題是,沒有工程背景的PM可能無法理解你正在處理的技術復雜性,導致彼此之間缺乏尊重。第二,如果PM的職業生涯始於工程師,他們如果說出自己完全理解像區塊鏈、大數據或人工智能等技術主題,實際上卻不然,會讓人感到困擾。
要縮小這些隔閡,軟技能和溝通能力是必不可少的。
從PM那裡聽到最讓人惱火的一句話可能就是, "這只是一個簡單的按鈕。你確定你五分鐘內完成不了嗎?"之類的評論暗示著工作很簡單,並且你是無能的。但是,創建即使是一個簡單的按鈕也並非小事。例如,Google首頁的搜索按鈕不只是一個”簡單的按鈕”。必須要考慮各種狀況,如懸停、點擊、雙擊,以及像文本語言化,訪問性和多個屏幕寬度等其他因素。
PM負責產品,但他們不是你的老闆。在等級組織結構中或者是由外包廠商管理的內部PM中,這種誤解可能尤其普遍。採用像精益求精這樣的方法可以幫助設定邊界並管理期望。需求的頻繁變更可能對項目造成傷害,導致無法重用的代碼,錯誤和技術債務。
在PM沒有明確的願景並沒有定義具體的需求時,可能會讓人感到沮喪。工程師擅長解決挑戰並需要清晰的目標。需求定義不明會導致產品難以衡量影響和成功。
為了成功地應對這些問題,這裡有我的三個建議:
請記住,軟件開發是一個團隊運動。像任何隊伍一樣,成功取決於有效的溝通,合作和領導以實現共同的目標。
在Adobe Experience Manager (AEM) 中,Sling servlet可以被用來處理某些RESTful的請求-回應的AJAX調用。寫在Java編程語言中的Servlets可以被註冊為OSGi(開放服務網關協議)服務。在AEM中註冊servlet有兩種方法:1) 通過路徑,和 2) 通過資源類型。以下是兩種方法的詳細說明:
例如,如果您希望從客戶端發送一個表單POST請求到路徑/bin/payment
到Sling servlet類,您可以使用以下的註解:
@SlingServlet(
metatype = true,
methods = { "POST" },
paths = "/bin/payment"
)
public class YourServlet extends SlingSafeMethodsServlet {
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException {
// 在這裡執行你的任務
}
}
當有一個POST請求到 http://localhost:4502/bin/payment
時,servlet將被觸發,並調用 doPost
方法。
前提條件包括在端口4502上運行本地AEM實例,並通過Maven Bundle插件安裝bundle模組。您可以通過導航到 http://localhost:4502/system/console/bundles
來驗證bundle的安裝。如果沒有安裝,您可以手動上傳JAR文件。
如果您遭遇“禁止”的錯誤,無法服務 /bin/payment
的請求,請按照以下步驟操作:
http://localhost:4502/system/console/configMgr
。Servlet現在應該按預期觸發。
為了避免上述問題,更好的方法是通過資源類型註冊servlet。重構servlet如下:
@SlingServlet(
metatype = true,
methods = { "POST" },
resourceTypes = "services/payment"
)
public class YourServlet extends SlingSafeMethodsServlet {
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException {
// 在這裡執行你的任務
}
}
接下來,您需要創建一個頁面來觸發此資源:
http://localhost:4502/crx/de/index.jsp
的CRXDE Lite。/content
資料夾內,創建一個頁面(例如,http://localhost:4502/content/submitPage.html
)。services/payment
或其他匹配您上述的servlet。http://localhost:4502/content/submitPage.html
。 應該可以按预期工作。額外提示: 您也可以使用Apache Sling Resource Resolver來驗證servlet是否已成功註冊在http://localhost:4502/system/console/jcrresolver
。
如果有任何問題,可以在下面的評論中留言。
為了提高我的隱私,我決定減少使用Google產品。我用Firefox取代了Chrome,從Gmail轉到ProtonMail,現在正在使用Nextcloud而非Google Drive。Nextcloud允許自託管雲存儲並對我的數據進行控制。以下是在AWS EC2上安裝Nextcloud並配置它以使用S3存儲的步驟。
使用AWS Route 53,創建一個指向您的Nextcloud服務器的IP地址的A記錄。
設置Let's Encrypt的SSL證書:
點擊“Apps”並啟用“Default encryption module”和“External storage support”。
打開AWS IAM(Identity and Access Management)並創建一個具有程序化訪問的新用戶。
使用下面的JSON代碼創建一個新的策略,將NAMEOFYOURBUCKET
替換為您的S3桶的名稱。將此策略附加到新創建的用戶。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetBucketLocation", "s3:ListAllMyBuckets"],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::NAMEOFYOURBUCKET",
"arn:aws:s3:::NAMEOFYOURBUCKET/*"
]
}
]
}
在Nextcloud設置中,選擇“External Storage”。在“Bucket”字段中填入NAMEOFYOURBUCKET
。選中“Enable SSL”和“Enable Path Style”,然後使用您創建的用戶的憑證填入所需的信息。
你已經完成了!導航到你的d3
文件夾,你現在應該能夠上傳文件了。
在JavaScript中,你可以直接在瀏覽器中使用console.log('whatever')
進行故障排查。然而,當使用PHP時,需要一些小技巧才能達到同樣的效果。以下是操作步驟:
debug_to_console
的函數來處理輸出到控制台的內容。將此代碼添加到你的PHP文件中:function debug_to_console($data) {
$output = $data;
if (is_array($output)) {
$output = implode(',', $output);
}
echo "<script>console.log('Debug Objects: " . $output . "');</script>";
}
按照這些步驟操作後,打開你的瀏覽器的開發者工具。您應該能夠看到在控制台使用console.log
顯示的PHP物件。
我對 macOS Catalina 感到挫折,因此決定將 Ubuntu 設為我 13 英寸的 MacBook Pro(不帶觸控條)的主要操作系統。作為一名軟件開發者,我發現 macOS 會與 Xcode 一同打包許多工具,這將佔用多達10GB的磁碟空間。雖然磁碟空間並非我主要的憂慮,但有時候網路下載的速度會很慢,而更新也可能會卡住。在試圖完成工作時流失一小時是不必要的障礙。
我起初擔心專有硬體是否能與開源的 Linux 分佈版兼容。令我驚訝的是,許多功能在初次安裝後就可以立即使用,感謝社區的努力。這包括了螢幕、鍵盤、觸控板,以及 Wi-Fi。唯一不適用的功能是音訊,但我可以使用我的 USB Type-C 耳機或帶有喇叭的 HDMI 外接顯示器來解決這個問題。這個 GitHub 頁面提供了關於各種 MacBook 硬體與 Linux 兼容性的詳細文檔:MacBook 在 Linux 上的硬體支援。
如果你對在 MacBook Pro 上試用 Ubuntu 感興趣,請按照以下幾個簡單的步驟操作:
就是這樣!作為開發者,你可以透過執行 sudo apt install git
來快速設定這類必要工具。這比在 macOS 上更簡單,macOS會以各種方式來限制你的自由。不應該對任何一個平台過於依賴,因為不能一直相信大公司會為了你的最佳利益行事,例如保護你的個人資料不受政府監視。擁抱開源社區,欣賞選擇替代操作系統的自由。
附註 1: 若要讓藍牙運作,請在這個儲存庫中執行找到的腳本:
附註 2: 若要讓相機運作,請按照這份指南來安裝驅動:
我正在建設一個 Koa.js 服務器,並需要將其連接到 MongoDB 以儲存和檢索數據。以下是如何在幾個簡單的步驟中實現這一點:
步驟1:初始化 Koa 應用程序之前連接到數據庫
在 database.js
中,導入 mongoose。同時確保使用 npm install --save mongoose
進行安裝。Mongoose 是一個物件數據建模(ODM)庫。
const mongoose = require("mongoose")
import { connectionString } from "./conf/app-config"
const initDB = () => {
mongoose.connect(connectionString)
mongoose.connection.once("open", () => {
console.log("Connected to the database")
})
mongoose.connection.on("error", console.error)
}
module.exports = initDB
接下來,為您的連接字符串創建配置:
export const connectionString =
"mongodb+srv://" +
secret.mongodb.username +
":" +
secret.mongodb.password +
"@xxxxxx.mongodb.net/test?retryWrites=true&w=majority"
您可以運行本地 MongoDB 實例,或者使用 MongoDB Atlas 並將其託管在 AWS 雲上。您會在那裡找到包含在配置文件中的連接字符串。
步驟2:在 Koa 中創建一個 Schema
例如,讓我們在 /models/users.js
中創建一個用戶模式。
const mongoose = require("mongoose")
const Schema = mongoose.Schema
const UserSchema = new Schema({
username: String,
email: String,
picture: String,
})
module.exports = mongoose.model("User", UserSchema)
步驟3:創建一個服務來查詢數據
假設我們有一個 /service/user.service.js
。
import User from "../models/users"
export const getUserFromDb = async username => {
const data = await User.findOne({ username })
return data
}
export const createUserInDb = async user => {
const newUser = new User(user)
await newUser.save()
return user
}
步驟4:在 Koa 控制器中調用服務
例如,假設我們有一個 /controller/user.controller.js
。
import { getUserFromDb, createUserInDb } from '../service/user.service';
static async getUser(ctx) {
const user = await getUserFromDb(ctx.query.username);
ctx.body = user;
}
static async registerUser(ctx) {
const user = await createUserInDb(ctx.request.body);
ctx.body = user;
}
最後,您可以使用控制器註冊路由。現在,您應該能夠看到數據被存儲在數據庫中。如果您有任何問題,請隨時聯繫我。
Ghost 3.0剛剛被發佈 (https://ghost.org/3/)。我對Ghost比WordPress有強烈的偏好,因為它使用Node.js而不是PHP。Ghost不僅是開源的,還提供了非常酷的黑色主題。所以,我決定將我的部落格從Medium遷移出去。然而,該過程並不直接,也有一些相關的成本。下面是一些步驟幫助你導航遷移並重新控制你的內容:
步驟一:從Medium導出帖子
在Medium上導航到設置並找到允許您下載您的數據的部分:
步驟二:導入至WordPress.com並導出文件
在WordPress.com上創建一個免費帳戶。在導入部分,您會找到一個可以從Medium導入內容的選項:
成功從Medium導入內容後,你可以從WordPress.com導出文件:
步驟三:通過插件將文件導入至WordPress.org並導出文件
從 http://wordpress.org/ 下載開源的WordPress軟件並使用MAMP (https://www.mamp.info/en/) 在本地運行。複製所有的WordPress文件並將它們放在MAMP內的/ htdocs資料夾中。啟動服務器,您應該能夠運行安裝了MySQL的本地WordPress實例。
導航至導入部分,並選擇從WordPress導入的選項:
然後,從https://wordpress.org/plugins/ghost/ 安裝官方的Ghost插件,並使用此插件導出你的部落格文章:
雖然有一個下載Ghost文件的選項,但對我來說並未奏效。嘗試點選下載.json
檔案。
步驟四:導入至Ghost博客
轉到設置,然後轉到Ghost中的實驗室部分,並導入您的文件:
交叉手指!如果一切順利,您應該能看到所有您從Medium導出的文章現已遷移到Ghost 3.0。祝你寫博愉快 :)
在企業網路下工作可能相當有挑戰性,因為許多東西不會即刻就能運作正常。像是 npm install
等簡易指令可能都無法正常運作。以下為如何跨過代理進行工作的方法:
假設你已經成功在你所使用的企業筆記本電腦中安裝 node.js
,找出 .npmrc
檔案。在Windows系統中,該檔案通常位於 C:\Users\<your_user_id>\.npmrc
,而在Mac機上,該檔案則位於 Users/<your_user_id>/.npmrc
。
打開該檔案並加入下列行數:
https-proxy=http://yourcompanyproxy.com:80
proxy=http://yourcompanyproxy.com:80
strict-ssl=false
registry=http://registry.npmjs.org/
再試執行 npm install
,它應該現在可以運作了!
附帶一提的小提示:如果你在企業內部的 Nexus npm 倉庫有一些依賴關係,例如在 @npmcorp
範疇中,運行以下標令以指定正確的倉庫 URL:
npm config set @npmcorp:registry https://your-company-nexus:80/nexus/content/repository/npm-internal
這樣做應該就能解決任何 "依賴性未找到" 的錯誤。試試看吧!