2013年12月18日 星期三

動態自選欲連結網站的ip

最近發現,在連接gateway.sandbox.push.apple.com時,常常失敗。
經過追蹤後,才知道某些ip會連結失敗。
所以寫了一個 即時判斷的程式

$pushServer = 'gateway.sandbox.push.apple.com';
$host='';
$hosts = gethostbynamel($pushServer);
if (is_array($hosts)) {
  foreach ($hosts as $host) {
    $connection = fsockopen($host, 2195);
    if (is_resource($connection)){
      break;
    }
  }
  if($host=='')
    return;
} else {
  return;
}

2013年11月5日 星期二

2013年11月1日 星期五

自動將圖片 複製成retina專用的圖

在iOS中,Retina的圖都是以@2x為區分,
為了省去麻煩,我做了一個automator。

2013年9月13日 星期五

使用Bitbucket來免費託管靜態網站

很簡單,只要建立一個『你的帳號』.bitbucket.org的repository就可以了
詳細說明,看這裡

TortoiseHg 快速入門

  • Clone
    • 指令

      • hg clone https://yourdomain@bitbucket.org 
    •  TortoiseHg
      • 桌面滑鼠右鍵,TortoiseHg,Clone...
      •  貼上來源,拓製
  •  Commit
    • 指令
      • hg commit -m "Initial commit"
    • TortoiseHg
      • 在資料夾上,點滑鼠右鍵,commit
      • 選擇檔案,填上註解
  • push
    • 指令
      • pushing to https://yourdomain@bitbucket.org/
    • TortoiseHg
      • 在資料夾上,點滑鼠右鍵,Hg WorkBench
      • 選擇要push的branch,按push鍵

2013年7月12日 星期五

IOS autorelease 錯誤

使用autorelease一直有錯誤
ARC forbids explicit message send of'release'
'release' is unavailable: not available inautomatic reference counting mode

2013年3月11日 星期一

immediate mode? display list? vertex array?

  • immediate mode
    • The easiest way to do drawing in OpenGL is using the Immediate Mode. For this, you use the glBegin() function which takes as one parameter the “mode” or type of object you want to draw.
    • glBegin(GL_LINE_LOOP);//start drawing a line loop
          glVertex3f(-1.0f,0.0f,0.0f);//left of window
          glVertex3f(0.0f,-1.0f,0.0f);//bottom of window
          glVertex3f(1.0f,0.0f,0.0f);//right of window
          glVertex3f(0.0f,1.0f,0.0f);//top of window
      glEnd();//end drawing of line loop
  • display list
    • Display list is a group of OpenGL commands that have been stored (compiled) for later execution. Once a display list is created, all vertex and pixel data are evaluated and copied into the display list memory on the server machine. It is only one time process. After the display list has been prepared (compiled), you can reuse it repeatedly without re-evaluating and re-transmitting data over and over again to draw each frame.
    • // create one display list
      GLuint index = glGenLists(1);
      // compile the display list, store a triangle in it
      glNewList(index, GL_COMPILE);
          glBegin(GL_TRIANGLES);
              glVertex3fv(v0);
              glVertex3fv(v1);
              glVertex3fv(v2);
          glEnd();
      glEndList();
      ...
      // draw the display list
      glCallList(index);
  • vertex array
    • This means that your vertices and vertex attributes and indices are in RAM.
    • glEnableClientState(GL_VERTEX_ARRAY);
      glEnableClientState(GL_COLOR_ARRAY);
      glColorPointer(3, GL_FLOAT, 0, Colors);
      glVertexPointer(3, GL_FLOAT, 0, Vertices);
      glDrawArrays(GL_TRIANGLES, 0, 3);
      glDisableClientState(GL_VERTEX_ARRAY);
      glDisableClientState(GL_COLOR_ARRAY);
Vertex Buffer Object (VBO)

2013年3月10日 星期日

OpenGL Blend


glBlendFunc — specify pixel arithmetic
  • void glBlendFunc(GLenum sfactor, GLenum dfactor);
  • void glBlendFunci(GLuint buf, GLenum sfactor, GLenum dfactor);
Parameters
  1. buf
    • For glBlendFunci, specifies the index of the draw buffer for which to set the blend function.
  2. sfactor
    • Specifies how the red, green, blue, and alpha source blending factors are computed. The initial value is GL_ONE.
  3. dfactor
    • Specifies how the red, green, blue, and alpha destination blending factors are computed. The initial value is GL_ZERO. The following symbolic constants are accepted: 
      • GL_ZERO, GL_ONE
      • GL_SRC_COLOR
      • GL_ONE_MINUS_SRC_COLOR
      • GL_DST_COLOR
      • GL_ONE_MINUS_DST_COLOR
      • GL_SRC_ALPHA
      • GL_ONE_MINUS_SRC_ALPHA
      • GL_DST_ALPHA
      • GL_ONE_MINUS_DST_ALPHA
      • GL_CONSTANT_COLOR
      • GL_ONE_MINUS_CONSTANT_COLOR
      • GL_CONSTANT_ALPHA
      • GL_ONE_MINUS_CONSTANT_ALPHA

Qt5 + OpenGL


前幾天發現在Qt5裡,所有的fixed function pipeline都不能編譯了。稍微google了一下,才發現,原來Qt5所有precompile的安裝包,都是用ANGLE layer來實作OpenGL ES2,也就是你要寫的是OpenGL ES2,而不是OpenGL。所以一些fixed function pipeline的function,例如glBegin/glEnd都不能用了。

2013年3月3日 星期日

在Qt中,使用系統預設的圖示

QStyle定義了一些系統視窗相關的風格,像是圖示和gui的樣式。 qApp->style()->standardIcon(QStyle::SP_MediaVolumeMuted)
另外,也可以用 
QStyleFactory::keys();列出可以建立的style,例如"Windows", "WindowsXP", "WindowsVista", "Fusion"
QStyleFactory::create(QString style);
建立特殊的style,例如"Windows", "WindowsXP", "WindowsVista", "Fusion" 詳細清單

2013年2月28日 星期四

3D text on Qt with OpenGL


利用QPainterPath算出polygon之後,就可以畫出邊框
QPainterPath path;
path.addText(QPointF(0, 0), QFont("Arial", 100), QString::fromUtf8("你要不要喝紅茶ˊ_>ˋ?"));
GLuint id = glGenLists(1);
glNewList(id, GL_COMPILE);
foreach(QPolygonF polygon, path.toSubpathPolygons()){
    glBegin(GL_LINE_LOOP);
    foreach(QPointF point, polygon){
        glVertex3f(point.rx(), -point.ry(), 0);
    }
    glEnd();
}
glEndList();


最後再利用glu提供的tessellation功能,繪出文字

2013年2月23日 星期六

可在mac和windows上執行的安裝光碟

首先建一個iso檔
hdiutil makehybrid /source/folder/name/ -o outputfile.iso
打開檔案
hdiutil attach -readwrite outputfile.iso
將需要的檔案丟入光碟裡
在將非mac的檔案隱藏
SetFile -a V /path/to/your/folder/name-of-file-to-hide
設定放入光碟後,預設開起的資料夾
sudo bless -folder "/Volumes/discName" -openfolder "/Volumes/discName"

參考文件
Creating a dual Mac/Win Autorun CD
Creating Cross Platform Windows and Mac Installer CDs

2013年2月18日 星期一

QGraphicsProxyWidge在mac下無法調整大小

 
主要是Mac不像windows有邊框,所以不像windows只要
scene->addWidget(widget, Qt::Dialog);
就好了。所以需要加上QSizeGrip

2013年2月17日 星期日

發佈Qt應用程式到mac


在Mac上的應用程式,大多不是用安裝,而是解開dmg,將app拖到電腦裡。

2013年2月6日 星期三

html5版的馬賽克

  1. 利用 input type="file"選取本地端圖檔
  2. 用FileReader的readAsDataURL讀取圖檔
  3. 將圖畫到canvas
  4. 用range來當sliderbar,注意firefox不支援range
  5. 接下來就是拿canvas來做影像處理了
  6. 最後,再利用canvas.toDataURL("image/jpeg")轉回圖檔