Select Page
Tripo3D評測:革命性的AI 3D建模工具,從2D到3D只需一步

Tripo3D評測:革命性的AI 3D建模工具,從2D到3D只需一步

在數字創作的世界中,3D建模技術的發展日新月異,Tripo3D憑藉其獨特的AI技術,成為了這一領域的新星。Tripo3D是一個強大的平台,它利用最先進的人工智能技術,能夠根據使用者的文字描述或圖片,生成高質量的3D模型。這不僅為設計師和藝術家提供了無限的創造可能,也為3D建模領域帶來了革命性的變革。

技術創新

Tripo3D的算法結合了技術和數據的優勢,建立了一個擁有千萬級別3D原生數據庫的強大後盾。這意味著,無論是從文字還是圖片出發,Tripo3D都能精準理解用戶的需求,快速生成相應的3D模型。這種能力不僅基於現有的數據庫,更是依賴於其不斷進化的AI算法,使其能夠不斷學習和適應新的創作需求。

功能豐富

除了能夠從文字描述或圖片生成3D模型的基本功能,Tripo3D還提供了從圖片到3D模型的直接轉換功能。這一點對於需要將現有圖片或設計快速轉換為3D物件的使用者來說,極大地提升了工作效率和創作的靈活性。無論是設計師想要將自己的素描轉化為立體模型,還是藝術家希望將靜態圖像變成可觀賞的3D藝術品,Tripo3D都能夠提供強有力的支持。

使用簡易

使用Tripo3D極為簡單,用戶只需要輸入相應的提示(prompt),即可快速獲得所需的3D模型。這種簡潔直觀的操作方式,降低了3D建模的技術門檻,使得更多非專業人士也能夠輕鬆進入3D建模的世界。不論是初學者還是專業人士,都能在Tripo3D上發揮創造力,將想象中的世界轉化為觸手可及的三維現實。

相關主題

如何變動在 linux 中的預設 php 執行檔?

如何變動在 linux 中的預設 php 執行檔?

在 Linux 中更改命令行的預設 PHP 執行檔,通常涉及更新系統的 PATH 環境變數或使用 update-alternatives 工具(如果你的系統支援)。以下是幾種常見的方法來變更預設 PHP 執行檔:

方法 1:使用 update-alternatives(適用於 Debian、Ubuntu 及其衍生系統)

如果你的系統安裝了多個 PHP 版本,可以使用 update-alternatives 工具來設定預設的 PHP 版本。

列出所有可用的 PHP 替代版本

sudo update-alternatives --display php

設定預設 PHP 版本

使用下面的命令設定預設版本。將 phpX.Y 替換成你想設定為預設的 PHP 版本號,例如 php8.2

sudo update-alternatives --set php /usr/bin/php8.2

如果你想要在可用選項之間手動選擇,可以使用:

sudo update-alternatives --config php

方法 2:直接修改 PATH 環境變數

你可以通過修改 PATH 環境變數來讓系統首先找到你想要的 PHP 版本。這可以通過在你的 ~/.bashrc~/.zshrc 或其他適用的 shell 配置檔案中添加一行來實現。

假設你想使用的 PHP 版本位於 /usr/local/phpX.Y/bin(將 X.Y 替換成具體版本號),可以添加以下行:

export PATH=/usr/local/phpX.Y/bin:$PATH

然後,執行 source ~/.bashrc(或對應的配置檔案)來使變更生效。

source ~/.bashrc

方法 3:使用符號連結

另一個變更預設 PHP 執行檔的方法是建立一個指向你想要的 PHP 版本的符號連結(symlink)。這通常涉及到刪除或重命名舊的 PHP 符號連結,然後創建一個新的指向你選擇的版本。

刪除或重命名當前的符號連結

sudo mv /usr/bin/php /usr/bin/php.old

建立新的符號連結

/usr/bin/php 指向你想要的 PHP 版本。將 /path/to/your/php 替換成你想要設定為預設 PHP 執行檔的完整路徑。

sudo ln -s /path/to/your/php /usr/bin/php

在進行這些變更後,你可以通過執行 php -v 來驗證新的預設 PHP 版本是否已正確設定。

php -v
使用 WP-CLI 管理 WordPress

使用 WP-CLI 管理 WordPress

WordPress 是全球最受歡迎的內容管理系統之一,提供了直觀的圖形使用者介面來管理網站。然而,對於開發者系統管理員來說,通過命令列介面管理 WordPress 也是非常必要的。這就是 WP-CLI 發揮作用的地方。WP-CLI 是一個為 WordPress 站點提供的命令列工具,允許用戶快速執行許多任務,如安裝和更新插件、配置多站點安裝、生成內容等,而無需使用 Web 瀏覽器。

WP-CLI 的優勢

  • 效率:通過命令列執行任務通常比使用圖形使用者介面更快。
  • 自動化:可以輕鬆地將命令腳本化和自動化,以便批量處理任務。
  • 無需 GUI:對於僅命令列介面訪問的伺服器,這是管理 WordPress 站點的理想選擇。

安裝 WP-CLI

WP-CLI 的安裝過程簡單直接,可以通過幾個簡單的步驟在任何類 UNIX 系統上安裝(包括 MacOS、Linux 發行版和 Windows 的 WSL)。

下載 WP-CLI: 首先,使用 curlwget 命令下載 WP-CLI 的 Phar 檔案。

使用 curl:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

或者使用 wget:

wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

驗證 Phar 檔案是否可執行: 執行以下命令測試 wp-cli.phar 是否正常工作:

php wp-cli.phar --info

將它變成執行檔: 將下載的檔案轉換為可執行檔案,並移動到全域路徑中,以便從任何位置訪問 WP-CLI。

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

驗證及測試WP-CLI: 輸入以下命令以確認 WP-CLI 正確安裝:

wp --info

會看到結果如下

以下示範一些簡單的功能

檢查 WordPress 核心檔案更新

wp core check-update

安裝插件

wp plugin install [plugin-name] --activate

更新單一外掛

wp plugin update [plugin-name]

更新所有插件

wp plugin update --all

創建新的用戶

wp user create bob [email protected] --role=author

WordPress 性能優化:使用 NGINX FastCGI Cache 提高頁面加載速度

在許多 WordPress 網站運營者的心中,提升網站載入速度始終是一項持續的任務。快速的載入速度不僅能改善用戶體驗,降低跳出率,還能在搜索引擎優化(SEO)上取得更好的成績。本文將引導您如何通過配置 NGINX 的 FastCGI Cache 來提升您的 WordPress 網站載入速度。

為什麼選擇 NGINX 的 FastCGI Cache?

NGINX 作為一款高效能的 Web 伺服器,其 FastCGI Cache 功能可以對動態內容(如 WordPress 生成的頁面)進行快取,從而減少對後端伺服器的請求,提高頁面載入速度。與其他快取方法相比,FastCGI Cache 直接在 Web 伺服器層面進行操作,能更精確地控制快取內容及其有效期。

步驟一:設定快取儲存路徑

建立快取存放的路徑,注意目錄擁有者是 www-data

sudo mkdir -p /etc/nginx/cache
sudo chown -R www-data:www-data /etc/nginx/cache

下面的設定是放在記憶體中的設定,如果你想要把快取放在記憶體內,要用下面這一個

sudo mkdir -p /var/run/cache/nginx
sudo chown -R www-data:www-data /var/run/cache/nginx

首先,您需要在 NGINX 配置文件中指定快取的儲存路徑及其他相關參數。打開您的 NGINX 配置文件(通常位於 /etc/nginx/nginx.conf),並添加以下配置:

http {
    ...
    fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=WORDPRESS_CACHE:100m inactive=60m max_size=256m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
    ...
}

這段配置創建了一個名為 WORDPRESS_CACHE 的快取區域,並將其儲存路徑設定為 /etc/nginx/cachelevels=1:2 定義了目錄結構,keys_zone 指定了快取鍵的儲存空間大小,1 MB 的記憶體大約可以存放八千個左右的鍵值,也就是說若設定為 16 MB 的話(16m),大約可以快取 128,000 個左右的網址,max_size 是設定快取檔案的總容量上限(也就是放在 /etc/nginx/cache 中的檔案大小上限),inactive=60m 表示如果快取內容在60分鐘內未被訪問,則會被自動清除。

步驟二:啟用 FastCGI Cache

接下來,在處理 PHP 請求的 location 塊中啟用 FastCGI Cache。這通常在您站點的伺服器配置中(例如 /etc/nginx/sites-available/yourdomain.com):

server {
    ...
    set $skip_cache 0;

	# POST 請求不用快取
	if ($request_method = POST) {
    	set $skip_cache 1;
  	}

  	# 若有 query 參數的網址不用快取
  	if ($query_string != "") {
      	set $skip_cache 1;
  	}

  	# 特殊的網址不用快取
  	if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
      	set $skip_cache 1;
  	}

  	# 已登入使用者、留言者不用快取
  	if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
      	set $skip_cache 1;
  	}
    
    #正在維護模式中也略過
	if (-f "$document_root/.maintenance") {
    	set $skip_cache 1;
	}

  	# 加入快取資訊表頭(除錯用)
  	add_header X-Cache $upstream_cache_status;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
    	include fastcgi.conf;
        
        # FastCGI 快取設定
        fastcgi_cache WORDPRESS_CACHE;
        fastcgi_cache_valid 200 301 302 1d;
        fastcgi_cache_bypass $skip_cache;
    	fastcgi_no_cache $skip_cache;
        
        # 可以加入除錯用的標頭
        add_header X-Cache "$upstream_cache_status From $host";
    	add_header Cache-Control  max-age=0;
    	add_header Nginx-Cache "$upstream_cache_status";
    	add_header Last-Modified $date_gmt;
    }
    ...
}

這裡,fastcgi_cache 指令啟用了快取,並指定使用前面創建的快取區域。fastcgi_cache_valid 200 60m 表示成功的響應(HTTP 200 狀態碼)將被快取60分鐘。

步驟三:細化快取規則

為了避免快取敏感內容或確保特定條件下的頁面不被快取,您可以進一步細化快取規則。例如,避免快取已登入用戶的內容:

fastcgi_cache_bypass $cookie_user_logged_in;
fastcgi_no_cache $cookie_user_logged_in;

這些指令確保當 user_logged_in cookie 存在時,快取將被繞過。

清除快取

利用指令清除所有的快取

rm -rf /path/to/your/nginx/cache/*

利用 API 清除快取

首先去取 nginx 的 config 檔案中加入以下設定

location /purge_cache/ {
    allow 127.0.0.1; # 允許本地
    allow '多個主機ip';
    deny all; # 拒绝其他所有请求
    fastcgi_cache_purge WORDPRESS_CACHE $scheme$request_method$host$request_uri;
}

接下來就可以安裝 Nginx Helper 或是透過呼叫API網址清除快取

curl -X GET http://your-domain.com/purge_cache/the_uri_to_purge

區分手機版本和電腦版本

map $http_user_agent $is_desktop {
    default 0;
    ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
    ~*spider|crawl|slurp|bot 1; # bots
    ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}

## Revert the logic.
map $is_desktop $is_mobile {
    1 0;
    0 1;
}
add_header x-ua-device $is_mobile;

# cache key 要加入 is_moubile
fastcgi_cache_key "$scheme$request_method$host$request_uri$is_mobile";

將快取放在記憶體,開機要自動執行

若是你把快取得存放路徑設定在記憶體中 /var/run ,那要記得設定重開機自動要建立該目錄,並且讓nginx重生效才行

先建立一個執行檔,執行重開機的設定

nano start-fastcgi.sh
chmod +x start-fastcgi.sh

start-fastcgi.sh的內容如下

mkdir -p /var/run/cache/nginx
chown -R www-data:www-data /var/run/cache/nginx
systemctl restart nginx

建立開機自動執行檔

sudo nano /etc/rc.local

rc.local 內容如下

#!/bin/bash
bash /home/yourname/start-fastcgi.sh

exit 0

設定開機自動執行

如果之前完全沒有設定過開機自動執行,那你會需要先設定開機自動執行的環境

rc-local 創建一個 Systemd 單元文件

sudo nano /etc/systemd/system/rc-local.service

將以下內容添加到文件中:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

啟用並啟動服務

現在您有了一個為 rc-local 正確配置的 systemd 服務文件,您可以啟用並啟動它:

sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service

常見問題

無法使用 purage_all 功能,可以重新編譯 Nginx ,加入參數 –add-module=/path/to/src/ngx_cache_purge-2.3.1

Nginx Helper 的替代 Nginx FastCGI Cache

開發人員必看的 Web Push 功能教學

開發人員必看的 Web Push 功能教學

Web Push 是一種標準的 Web 協議,允許網站向使用者發送推播通知。這項功能可用於各種目的,例如:

  • 提醒使用者有新的內容或更新
  • 提供即時通知,例如交易狀態或聊天訊息
  • 提高使用者參與度

準備工作

  • 前端訂閱推播服務的 js 檔案
  • 前端訂閱推播服務的網頁,需要包含訂閱服務的 js
  • 後端紀錄使用者訂閱資訊的服務
  • 後端推播訊息的服務
  • 後端註冊訊息伺服器的程式碼

建立前端網頁的訂閱表單

這個檔案將包含安裝、激活、攔截請求和推播事件的處理器。創建一個名為sw.js的檔案,並將其放在你網站的根目錄下

// 安裝Service Worker
self.addEventListener('install', function(event) {
    console.log('Service Worker 安裝成功');
});

// Service Worker 激活
self.addEventListener('activate', function(event) {
    console.log('Service Worker 激活成功');
});

// 監聽推播事件
self.addEventListener('push', function(event) {
    var title = '推播通知';
    var options = {
        body: '這是一條推播消息。',
        icon: 'icon.png',
        badge: 'badge.png'
    };

    event.waitUntil(self.registration.showNotification(title, options));
});

在你的網站上註冊一個Service Worker,這是實現Web推播的必要步驟。Service Worker將在背景執行,即使用戶沒有直接訪問你的網站也能接收通知。通常會把下面的 javascript 寫在首頁中,觸發訂閱的條件。

// 在主要的JavaScript檔案中
function urlBase64ToUint8Array(base64String) {
    const padding = '='.repeat((4 - base64String.length % 4) % 4);
    const base64 = (base64String + padding)
        .replace(/\-/g, '+')
        .replace(/_/g, '/');

    const rawData = window.atob(base64);
    const outputArray = new Uint8Array(rawData.length);

    for (let i = 0; i < rawData.length; ++i) {
        outputArray[i] = rawData.charCodeAt(i);
    }
    return outputArray;
}

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').then(function(registration) {
    console.log('Service Worker 注册成功:', registration);
  }).catch(function(error) {
    console.log('Service Worker 注册失败:', error);
  });
}
navigator.serviceWorker.ready.then(function(registration) {
  if (!registration.pushManager) {
    alert('此瀏覽器不支持推播通知');
    return false;
  }
const applicationServerKey = 'your publice key';
  
// 訂閱推播
  registration.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: urlBase64ToUint8Array(applicationServerKey)
  }).then(function(subscription) {
    console.log('推播訂閱成功:', subscription);

    // 發送訂閱資訊到後端
    fetch('https://your_webpush_server/subscribe', {
      method: 'post',
      headers: {
        'Content-type': 'application/json'
      },
      body: JSON.stringify({
        subscription: subscription
      }),
    });
  }).catch(function(error) {
    console.log('推播訂閱失败:', error);
  });

提供紀錄訂閱訊息的服務

這一段的作法很多,通常用你原本伺服器中的解決方案,例如 php,asp.net,nodejs,python,GO等,我這邊為了方便,用nodejs示範下

const express = require('express');
const cors = require('cors');

const bodyParser = require('body-parser');
const app = express();
app.use(cors());
app.use(bodyParser.json());

const subscriptions = {}; // 在實際應用中,應使用資料庫儲存訂閱資訊

const webPush = require('web-push');
    // 設置你的VAPID鑰匙
    webPush.setVapidDetails(
        'mailto:[email protected]',
      	'your publiec key',
      	'your private key'
      };

app.post('/subscribe', (req, res) => {
    const subscription = req.body;
    const key = subscription.endpoint; // 使用endpoint作為唯一鑰匙
    subscriptions[key] = subscription;

    console.log('subscripted');
    console.log(subscription);
    
    // subscription是從前端發送到後端的訂閱對象
    webPush.sendNotification(subscription.subscription, '消息內容')
        .then(result => console.log('推播成功'))
        .catch(err => console.log('推播失敗', err));

    res.status(200).json({message: '訂閱成功'});
});

app.listen(8060, () => console.log('伺服器運行在8060端口'));

其中 sendNotification 平常應該是要放在 webpush service中的,這邊加入是用來測試使用

生成VAPID鑰匙 (自願應用伺服器身份驗證)

大部分現代瀏覽器(如Chrome、Firefox、Edge)都支持Web推播API,但是如果你不用市面上的解決方案如 OneSignal 而是要直接與這些瀏覽器的推播服務交互的話,需要使用VAPID(自願應用伺服器身份驗證)鑰匙進行身份驗證。

生成 VAPID Key 的方法如下

npx web-push generate-vapid-keys

記住保存生成的鑰匙。公鑰將在前端用於訂閱推播,私鑰將在後端用於發送推播。


如果你無法使用npx(它通常隨npm自動安裝,作為npm 5.2.0及更高版本的一部分),那麼你可以通過下載最新版本的 nodejs

https://nodejs.org/

或是升級Node.js,或使用版本管理器如nvm(Node Version Manager)來管理不同版本的Node.js。

參考資料

https://developer.mozilla.org/en-US/docs/Web/API/Push_API