2014年12月13日 星期六

Mac Parallels Desktop 10 可回收的磁碟空間

這應該是個簡單的問題,但是在網路上好像很少人提到。自己試著找了一下,終於讓我發現如何解決這個問題。(SSD 的空間真的太珍貴了...)

Parallels Desktop 10 在控制中心裡,可以選擇回收磁磁空間


但是按了之後卻出現這個訊息,在 Parallels Desktop 9 之前是不會的。


但是在通用選項裡,卻可以看到可回收的空間,黃色部份。(因為已被我清除所以看不到了)

解決的方式如下:
在硬體的選項下,點選硬碟,接著再點選「壓縮」就完成了!你的空間回收了!

2014年6月30日 星期一

Swift Language - The Basics

Swift 是 2014年 WWDC Apple 發佈的新語言,可想而知,未來在 iOS/OS X 上開發程式,Swift 是必學的程式語言。Apple 網站上已有相關的文件可參考,電子書可從App Store下載(Swift 系列已經有兩集:第一集 The Swift Programming Language,第二集 Using Swift with Cocoa and Objective-C) 想加入 iOS/OS X App 開發嗎?快來學習吧!

基本語法介紹

let name = "Book"
var money = 100

使用 let 來宣告常數(Constants); 使用 var 來宣告變數(Variables)。
Swift 會自動推導常數或變數的型別,所以 name 它知道是 String,而 money 是 Int。

不過你也可以直接告訴 Swift 你要宣告什麼型別(這語法英文翻成 Type annotation)

var city: String

也可以使用 Unicode 字元來當做常數或變數

var 問候 = "你好"

println(問候)
// prints "問候"

2013年8月20日 星期二

String literals in C

先看一下以下的例子,你知道哪個可以改內容,哪個不能改嗎?

char *name = "Jack";

char name[] = "Jack";

在 C 裡很常會用到字串,使用的時候要注意,宣告時的不同,會造成使用上的不同。像上面的例子,char *name 是不能修改的;char name[] 才能夠修改。要區分它們,要了解它們在記憶體上的什麼位置。

2013年6月12日 星期三

Cocoa Objective-C Hierarchy for Foundation

學習物件導向程式時,其實也是在學習怎麼利用現有的物件,來實現你想要做的事。就如同在寫程序導向語言,像 C 這一類的程式時,我們也習慣會去找看看是否有現成的函式庫可用,而不需要再重新發明輪子。所以,要怎麼知道或找到現成的物件來用,我覺得是很重要的一件事!

Cocoa 和 Cocoa Touch 提供的 frameworks 何其多?想要了解就是多寫多用而已。Foundation Framework 是最基礎的一個,也許可以從這個 framework 開始深入。

在 Apple 官方網站裡已經有提供我想知道的資料,「所有在 Foundation Framework 裡的物件」。

藍色的部份是 iOS 和 OS X 都有的;而灰色的部份只有 OS X 才有。



FFmpeg 系列

FFmpeg 是著名的 Open source,主要用來處理影像和聲音,很值得研究及學習。為了方便查詢,在這裡整理了相關的文章。


在 Linux 平台上的實驗

FFmpeg tutorial practice - tutorial01
FFmpeg tutorial practice - tutorial02
FFmpeg tutorial practice - tutorial03
FFmpeg tutorial practice - tutorial04

在 Mac OS X 平台上的實驗

FFmpeg tutorial on Mac OS X - tutorial01
FFmpeg tutorial on Mac OS X - tutorial02
FFmpeg tutorial on Mac OS X - tutorial03

2013年5月18日 星期六

iTunes 11 切換 MP3 ID3 的版本

在家裡放了一台 Synology NAS 之後, 開始建立了個人雲端的環境。最近開始使用 Audio Station 的功能,這個功能就像 iTunes match,直接在線上聽音樂,只是它的來源是你自己的雲端資料庫。

當你把音樂放進 NAS 之後,可以開啟 Audio Station

2013年5月14日 星期二

如何知道程式所需要連結的函式庫

方法一:使用 ldd

$ ldd /usr/bin/python


linux-gate.so.1 =>  (0x007c4000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00d4c000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00755000)
libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0x00bea000)
libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0x00abb000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0x00dfc000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00110000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x002e3000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0030d000)
/lib/ld-linux.so.2 (0x00160000)

方法二:使用 lsof -P -T -p <Application_PID>

$ lsof -P -T -p 2047


方法三:使用 objdump -p

$ objdump -p /usr/bin/python

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x08059cd4
  FINI                 0x08177ffc
  GNU_HASH             0x080481ac
  STRTAB               0x08051374
  SYMTAB               0x0804a9d4
  STRSZ                0x00006d63
  SYMENT               0x00000010
  DEBUG                0x00000000
  PLTGOT               0x0826bff4
  PLTRELSZ             0x00000cf0
  PLTREL               0x00000011
  JMPREL               0x08058fe4
  REL                  0x08058fbc
  RELSZ                0x00000028
  RELENT               0x00000008
  VERNEED              0x08058e0c
  VERNEEDNUM           0x00000008
  VERSYM               0x080580d8

如果在 ARM 的平台上,使用 objdump -p 是比較快的方式。