Swift 裡的 單件模式

在寫代碼的過程當中,我們總會遇到需要保證全局只有一個實例的時候,這個時候就要使用單件模式。

單件模式——它確保了一個類只有一個實例,並提供一個全局訪問點。

那麼怎麼實現單件模式呢?我們來看看最經典的 Java 代碼,該怎麼實現這個 單件模式。

我們在網上隨便搜索“java 單件模式”就能找到不少現成的代碼段,這裡是其中隨機摘抄的一份:
[crayon-674289386e4525646[……]

點擊跳轉以繼續閱讀

把 Ubuntu Server 滾動更新 到 16.04

我們用vps,一般來講還是 Ubuntu 的好用,一方面是對新手來說更加友好,另一方面是一些常用的服務配置都可以一鍵安裝。再加上牛逼的 ufw,真是完美。

不過,現在並不是所有的vps服務商都能夠提供最新的 Ubuntu Server 16.04,真是遺憾。它有太多好處了,比如原生庫就是php7,不再需要額外編譯……

那麼既然是linux,就一定可以直接把它升級到新版本——我記得Ubu[……]

點擊跳轉以繼續閱讀

請謹慎使用 C# 裡的 var

我們都知道,比如 Swift 、 Python 裡,都不需要特別的去聲明一個變量的類型——它們雖然是類型安全的語言,卻可以動態地在上下文中幫你推斷變量的類型。

Python 不用你做什麼,寫一個名字就是默認聲明了一個變量;而 Swift,則更接近我們的題目,它也使用了

如果你有過 Swift 的使用經驗,再來使用 C#[……]

點擊跳轉以繼續閱讀

使用 Let’s Encrypt 在 VPS 上為 Nginx 配置 SSL

之前我們有講過如何給網站開啟全站 SSL 現在我們就一起來看看如何在 vps 上給 Nginx 開啟 Let’s Encrypt 證書並且自動更新。

這篇文章中的內容較舊,關於 letsencrypt 的配置文章,我寫了一篇新的,或許你可以參考看看:letsencrypt 工具改名 certbot

設置環境

首先,我們要準備一下安裝環境,這次我使用的是 CentOS 6.7[……]

點擊跳轉以繼續閱讀

用 python 寫一個功能變數名稱白名單爬蟲

前段時間我寫過一篇文章,說是時候使用白名單來翻牆了,不過那個白名單已經過期好久,用起來不是那麼順暢了,後來我就誇下海口說:我要自己實現一個爬蟲,來爬取中國的網站域名,好更新白名單。

好吧,總之這個爬蟲是寫好了然後上線爬取了一萬多的,不過最後我找到了前人做的更好的方案,於是這個爬蟲項目還是廢棄了。總之,白名單更強大了,只是沒有使用這個爬蟲而已。

爬蟲是用 Python 寫的,並沒有使用經[……]

點擊跳轉以繼續閱讀

在 Ubuntu 中搭建 Minecraft 服務器並掛載 Mod

最近室友在 Ubuntu的 上跑 MC,我幫著搭了一下,但由於包是他自己改過的,所以可能具體的運行過程並不通用,但總體環境配置還是比較通用的。

準備環境

首先 MC 是跑在 java的 環境下的,為了讓它跑的更加順暢,我們還是要在 Ubuntu 上安裝甲骨文的 java 環境:

驗證

安裝好以後,可以使用這個命令來驗證你的 j[……]

點擊跳轉以繼續閱讀

Python 字符串 與 字節數組 轉換

在使用 Python 做網絡編程的時候難免會遇到字符串與字節流的轉換,這裡我們記錄以下幾種常用的方法:

首先是字節數組轉字符串,也就是str:

然後是字符串轉為字節數組:

以上兩種方法不論哪種都是可以的。[……]

點擊跳轉以繼續閱讀

使用 fail2ban 防止 Bind9 被用於 DNS 放大攻擊

前言

我在阿里雲搭建的自用 dnsmasq 服務器,用來做免污染的 DNS,最近由於公開了IP,果然就遭到了攻擊——其實是被用於 DNS 放大攻擊。

由於 dnsmasq 本身就沒有設計為對外提供 DNS 服務,所以它對於安全方面的配置文件不是很多(根本沒有!),但它的解析策略又很方便配置(比如中國DNS解析白名單等),所以我在原本的基礎上,再加了一個 Bind9 作為前端來做安全。[……]

點擊跳轉以繼續閱讀