顯示具有 程式 標籤的文章。 顯示所有文章
顯示具有 程式 標籤的文章。 顯示所有文章

Nmap 網路診斷工具基本使用技巧與教學

Nmap 是一個開放原始碼的網路掃描與探測工具,可以讓網路管理者掃描整個子網域或主機的連接埠等,功能非常強大。


Nmap(Network Mapper)是一個開放原始碼的網路檢測工具,它的功能非常強大,這裡整理了許多使用範例,讓初學者可以快速上手。

Code School:網頁技術線上學習網站,提供 JavaScript、HTML、CSS 等教學

Code School 是一個提供各種網頁技術教學的線上學習網站,基本的課程可以免費觀看,進階課程則是需要付費。


Code School 中將教學的課程分為四大類,分別為 JavaScript、HTML/CSS、Ruby 與 iOS,另外也有一些其他領域的課程,例如 Git、R 等。

CodeCombat:透過玩遊戲學習 JavaScript 程式設計

CodeCombat 是一個開放原始碼的線上戰略遊戲,可以讓你一邊玩遊戲一邊學習 JavaScript 的程式設計。


一般初學者在學習程式語言的時候,通常都要經過一段漫長的時間去習慣程式設計的思維與邏輯,尤其是完全沒有寫過程式的人,會需要更長的時間,而這段時期通常都很枯燥乏味。

CodeCombat 是一個專門設計給初學者(或是小朋友)學習程式語言的戰略遊戲(strategy game),讓學習程式語言的過程可以更輕鬆、更有趣,而且整個學習的過程是真的在玩遊戲。

Codecademy:一個線上互動式程式設計學習網站(JavaScript、jQuery、PHP、Python、HTML/CSS、Ruby 等)

Codecademy 是一個線上互動式程式設計學習網站,它可以讓你在網頁上以互動式的操作,透過逐步的程式語言撰寫練習,很輕鬆的學會各種程式語言。

Codecademy 提供了各種程式語言的線上互動式學習課程,包含 JavaScript、jQuery、PHP、Python、HTML/CSS、Ruby 等程式語言,另外還有許多雲端服務網站的 API 教學。

自定 Google Chrome 網頁開發人員工具(DevTools)佈景主題教學

這裡教大家如何自定 Google Chrome 瀏覽器的網頁開發人員工具(Chrome Developer Tools)佈景主題。

在 Google Chrome 瀏覽器中有提供了一個 DevTools 網頁開發人員工具,它可以讓網頁開發者非常方便的在上面開發網頁或除錯,而這個工具在預設的情況下是使用白底灰字的布景主題,如果你是需要長時間使用這個工具開發的人,這樣的配色可能會讓眼睛很吃力。

這裡提供一些深色背景的布景主題與安裝教學,你可以從中選擇自己喜歡的配色主題來安裝在自己的 Chrome 瀏覽器中。

尋找 Google Chrome DevTools 佈景主題

首先第一步就是要找一個自己喜歡的佈景主題,這個通常用 Google 搜尋就可以在網路上找到很多,不會太難,而 DevThemez 這個網站也蒐集了很多很好看的佈景主題。

Google Chrome DevTools 的佈景主題其實就是一個 CSS 設定檔,當找到滿意的佈景主題之後,就把該佈景主題的 CSS 下載下來就可以了。

這裡要注意一點,有些佈景主題可能只會更改部份的程式碼配色或是特定的 panel 顏色,而有些則是會提供完整版面的佈景主題,讓整體感覺一致,在找這類的佈景主題時可以依照自己的需求選擇。

以下是一些不錯的深色佈景主題:

Zero Dark Matrix

Codacy:幫助程式設計師測試程式問題的服務平台

Codacy 是一個軟體測試服務平台,專門用來幫助程式開發者自動找出程式中的問題。


Codacy(原名 Qamine)是由 Seedcamp 所出資贊助的一項服務平台,目前的版本為尚未開放的 beta 版,這個平台的主要設計目的在於自動幫程式開發者檢查程式中可能出現的錯誤,降低程式 bugs 的發生率,同時也可以減輕程式設計師的負擔。

2013 年最熱門的程式語言:Python 排名第一

這張圖顯示了 2013 年最熱門的程式語言排行榜,第一名是 Python,佔了 29.8%。

Most Popular Coding Languages of 2013

在這個時代作為一個專業的程式設計師,通常都需要不斷的學習新的程式語言,如果僅僅只會單一種程式語言,通常是不太夠用的,通常除了專精一種程式語言之外,最好涉獵一些其他的語言作為輔助。

C 程式語言相關的面試問題與解答

這裡整理一些 C 程式語言相關的面試問題與解答,除了可以讓你增強 C 程式語言的能力,對於面試可能也有幫助。


gets() 函數

下面這段程式碼中有一個問題,你能找出來嗎?
#include<stdio.h>
int main(void) {
  char buff[10];
  memset(buff, 0, sizeof(buff));
  gets(buff);
  printf("\n The buffer entered is [%s]\n", buff);
  return 0;
}

答案
這裡的問題出在 gets() 函數的使用,這個函數會從 stdin 中讀取字串,但是卻不會檢查緩衝區的大小,這有可能會造成緩衝區溢位(buffer overflow)的問題,改用標準的 fgets() 函數會是個比較好的方式。

程式設計師面試時會碰到的十種常見問題

這裡是整理了一般程式設計師面試時會碰到的十種常見問題。


如果你是一個資訊背景的人,在面試程式設計師職缺的時候,通常會跟一般的技術職缺有些不同,這裡整理了十個很常見且應該要避免的問題。

沒有在紙上或是白板上寫程式的經驗

這是應徵者常會犯的毛病之一,一般的面試常常會使用紙筆或是白板讓應徵者作答,許多應徵者的程式設計能力很好,但是卻沒有這方面的經驗。

一個只會在電腦上使用 IDE 寫程式的人,突然被要求使用紙筆寫程式,會是一件有困難的事情,再加上這個場合是在面試,不是在自己的家裡,在如此緊張的氣氛中更加深了它的難度,而且在沒有編譯器的情況,面試者無法靠著編譯器幫他除錯,也會讓程式中很容易參雜一些平常不會注意到的錯誤。

第一次使用紙筆寫程式是有些難度的,我自己本身也有類似的經驗,在大學的時候修習系上開設的程式設計課程,平常上機的小考我都是輕鬆拿滿分,結果碰到期中的大考突然要在考卷上寫程式,一時之間還真的不會寫,考出來的成績就不是很理想。

建議如果沒有使用只比寫程式經驗的人,在面試之前可以自己在家練習一下,以免碰到類似的窘境。

如何在程式中不使用暫存變數交換兩個變數(適用於 Java 與 C/C++ 等語言)

這裡說明如何在程式中不使用暫存變數(temporary variable)交換兩個變數,這個問題也是面試時常問的問題。


在 C/C++ 與 Java 等程式中,如果要將兩個變數所儲存的值交換,最簡單的方式就是使用一個暫存變數,例如若要將 ab 兩個變數交換,則可使用:
tmp = a
a = b
b = tmp
其中 tmp 就是一個暫存變數,而這樣的方式也是最簡單、最直覺會想到的方法。但這裡會多使用到一個暫存變數,是否有辦法不要使用額外的 tmp 變數,就將 ab 交換呢?這個問題是許多程式設計面試時會問到的問題,以下有三種解決方法。

Linux 系統的內部(Internal)指令與外部(External)指令

這裡介紹 UNIX/Linux 系統中內部(internal)指令與外部(external)指令的差異所在。

一般的 UNIX 或 Linux 系統中的指令可分為兩種,分別為內部(internal)指令與外部(external)指令,對於一般的 Linux 新手而言,可能很少注意到這個問題,而了解它們之間的差異對於撰寫指令搞會有一些幫助。以下我們會說明這兩種指令的定義與其中的差別。

所謂的內部指令就是指內建在 shell 中的指令,也就是說當你執行這類的指令時,系統並不會因為要執行這個指令而產生額外的行程(process),所以內部指令的執行效率非常高,例如最常用的更換工作目錄指令 cd 就是一個典型的內部指令,執行這個指令時,不會產生任何額外的行程,只會單純變更工作目錄而已。除了 cd 之外,也有很多指令都是屬於內部指令,如:sourcebgfgpwd 等。

外部指令就是指那些不是內建於 shell 中的指令,這類的指令通常是一個二進位的執行檔或是一個可執行的指令稿(script),在執行這類的指令時,系統就會產生而外的行程,所以執行效率也就會比較低一些。一些常見的外部指令有:catmvsedperl 等。

Sublime Text -- 跨平台的專業文字編輯器

Sublime Text 是一個跨平台的專業文字編輯器,支援各種程式語言,非常適合程式開發者使用。

Sublime Text 文字編輯器

Sublime Text 支援 Linux 、Windows 與 Mac OS X 三種作業系統,以一個文字編輯器而言,其在功能上非常強大,可以媲美一般專業的程式開發軟體,像一般的自動完成(autocomplete)、多重選擇、多重視窗分割等功能都有支援。

wxHexEditor -- 跨平台的十六進位編輯器

wxHexEditor 是一個開放原始碼且跨平台的十六進位編輯器,除了用來編輯檔案之外,也可以直接編輯低階的硬碟磁區。

一般如果在開發比較低階的程式時,通常都會需要處理一些二進位檔案,而二進位檔案沒辦法以一般的文字編輯器來編輯,這時候就需要一個十六進位的編輯器了。

這裡我們介紹一個小巧好用的 wxHexEditor,它是以一套跨平台的 GUI 函式庫 wxWidgets 來開發的,所以它支援各種常見的作業系統(如 Windows、Linux 與 Mac OS 等)。

下面這個是在 Linux 系統中的使用畫面。

wxHexEditor 十六進位編輯器

C 語言中關於記憶體釋放的議題

這裡討論一些在 C 語言中關於記憶體釋放的議題,包含記憶體的重複釋放、敏感性資料的處理等。


在 C 語言中在使用完動態配置的記憶體時,我們通常只會記得將自己配置的記憶體釋放,避免記憶體洩漏(memory leak),然後就結束了,但是對於一些敏感性的資料而言,其實這樣還不夠。

這裡我們會討論一些 C 語言中關於動態記憶體的相關議題,像是處理敏感性資料的方法,如何讓資料不會外洩,確保資料的安全等。

以程式語言的觀點來看近 20 年內開放原始碼的發展狀況

這是一張以程式語言的觀點來看近 20 年內開放原始碼的發展狀況的圖形,其中可約略看出各種程式語言的發展趨勢。


現今資訊科技以爆炸性的速度發展,其歷史大約可以大約可以追溯到 80 年代末期到 90 年代初期左右,當時因為個人電腦與網際網路的發展,讓整個世界隨之改觀。

以廁所馬桶認識軟體工程:很搞笑,但也很切合實際

這是網路上流傳已久的一張圖,如果你不知道程式設計師在做什麼,看這張圖你就會知道了。


這張圖以一間廁所來比喻軟體工程,程式在開發時會有各種工具與組件,看這張圖你就會很清楚每個元件所扮演的角色與重要性在哪裡。

使用 DATA URI 將圖片以 Base64 編碼並內崁至網頁中,加速載入速度

這裡介紹如何使用 Data URI 的方式減少 HTTP 的請求(Request)數量,讓網頁載入速度變得更快。

為什麼要使用 Data URI?

網頁的載入速度對於一個網站而言是很重要的,在載入一張網頁時,瀏覽器會針對網頁中的每一個元素都產生一個 HTTP 請求(request),使用這些請求來跟伺服器取得這些元素,而網頁中的圖片就是最常見的例子,如果網頁中包含很多圖片,那麼網頁在載入時就會產生很多的請求,情況就會像這樣:


有一些網頁設計者會使用 CSS image sprites 的方式來避免產生過多的請求,而 Data URI 也是另一種很不錯的替代方案。

Data URI 是一種檔案格式,其資料全部都是經過 base64 編碼之後,以文字的方式來儲存的,這樣以文字方式儲存的好處就是可以直接寫進 HTML 或 CSS 中,不需要透過外部的檔案儲存。

Data URI 的格式長成這樣:
data:[<mime type>][;base64],<data>
下面這個是一張圖片使用 Data URI 的格式來表示的例子:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA6CAYAAADhu0ooAAAFP0lEQVR4nO2bX0gcRxzH...[略]
後面的資料因為非常長,所以就省略了,下面這張圖就是使用 Data URI 來表示的圖片:


看起來跟一般的圖片其實沒什麼兩樣,但是因為這樣的方式是直接寫在 HTML 或 CSS 中,可以省去原本抓取該圖檔的請求。

在 Eclipse 中設定 Java 函式庫(JAR)的 Source 與 Javadoc 檔案,讓寫程式時看說明更方便

在 Eclipse 中若安裝 Jar 函式庫而沒有設定 Source 與 Javadoc,就會無法看到函式庫的說明與程式碼,這裡教大家如何在 Eclipse 中正確設定 Source 與 Javadoc 的 Jar 檔。

在使用 Eclipse 撰寫 Java 程式時,我們常常會需要觀看類別的說明,正常來說在程式碼中,將滑鼠移到一個類別上就會出現類似這樣的類別說明:

程式設計師的生活寫照:經典電影片段

這裡搜集了一些很經典又很幽默的小動畫,反映了程式設計師的生活寫照,如果你也是程式設計師,你應該能體會。:)

以下每個圖都是一個動畫,如果你發現圖沒有在動,可以用滑鼠點下去看。

把一些寫好的東西放上去跑時:


Java Servlet 的 HttpSessionListener 的使用方式:監控與統計伺服器的所有 session 狀態

網頁的 session 概念是現在網路應用程式都會使用的技術,而在 Java Servlet 中如果想要監控伺服器所有產生的 session,並做一些統計分析或記錄,可以透過實作 HttpSessionListener 這個介面(interface)的方式來達到。

Java Logo

HttpSessionListener 這個界面中定義了以下兩個函數:
  1. sessionCreated(HttpSessionEvent se):用來處理每個 session 產生後,所要執行的動作。
  2. sessionDestroyed(HttpSessionEvent se):用來處理每個 invalidated 或 expired 之後的 session 所要執行的動作。
以下是實際的範例程式:
package com.sealmemory;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionCounterListener implements HttpSessionListener {

  private static int totalActiveSessions;

  public static int getTotalActiveSession(){
        return totalActiveSessions;
  }

  @Override
  public void sessionCreated(HttpSessionEvent arg0) {
        totalActiveSessions++;
        System.out.println("sessionCreated - add one session into counter");
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent arg0) {
        totalActiveSessions--;
        System.out.println("sessionDestroyed - deduct one session from counter");
  }
}
這裡我們除了實作 sessionCreated(HttpSessionEvent se)sessionDestroyed(HttpSessionEvent se) 之外,也令另外建立一個 totalActiveSessions 變數,記錄目前的 session 個數,在 session 時就加一,刪除時就減一。