RAD Studio XE7 預覽研討會

報名網址點我進入

研討會內容:

XE7 持續強化 D2D,M2M 的功能,XE7 加入了支援藍牙和低耗電藍牙 (BLE),讓 App Tethering 可同時支持 WIFI 和藍芽。 XE7 的 FireMonkey 也再次進化並支援更多的強大功能,例如支援多螢幕顯示,支援 Immersive full-screen 模式,支援更多的 iOS 原生控制項等。XE7 的 IDE 也獲得了強化,例如支援 GIT 版本控制,新的專案管理員功能,加強的 Data Explorer 和許多其他新的功能。

“持續進化的完美” 是 RAD Studio XE7 的寫照,“持續強化的生產力” 是 RAD Studio XE7 的承諾。我們敬邀您一起來見證 XE7 再次令人驚嘆的進步,讓您在開發的領域中永遠遙遙領先。

同時我們將展示許多應用實例,包括整合各式硬體裝置廠商提供 .so 及 .jar 功能 (如:藍芽印表機、iBeacon 室內定位、條碼掃描器…等) 及網路攝影機 (IP Cam) 功能整合實機展示。萬勿錯過,請速報名。

主講人:
李 維 (Embarcadero 大中華區技術總監)

時間:
103 年 8 月 25 日 (一) 2:00~5:00pm (台北)
103 年 8 月 26 日 (二) 2:00~5:00pm (台中)
103 年 8 月 27 日 (三) 2:00~5:00pm (高雄)
103 年 8 月 28 日 (四) 2:00~5:00pm (新竹)

相關連結:

-弘光科技大學開發成功案例分享【行動點滴監控系統】
-教育部赴公民營研習會【行動 app 開發技術研習】
-Delphi XE6 FireMonkey for Mobile 六小時免費訓練
-網路研討會第二場 -雲端儲存 (範例程式下載)
-Delphi APP 開發入門連載
-Facebook 社團 -【Delphi & C++ 移動開發】

Delphi超強大日期函式庫

uses System.DateUtils;

[pascal]
// 取得某一天所在的星期一及星期天
procedure TForm1.Button1Click(Sender: TObject);
var dw1,dw7,dnow:tdatetime;
begin
dnow:=StrtoDatetime(edtnow.Text);
dw1:=(StartOfTheWeek(dnow));
edtw1.Text := Datetimetostr(dw1);
dw7:=(Endoftheweek(dnow));
edtw7.Text := Datetimetostr(dw7);
end;
[/pascal]

66 K 工作網


ROR好手xdite在2014.7.12更新了一則FB訊息「回到社會議題。又要炒冷飯。我覺得其實不應該做什麼 22K 薪資揭發網站,而是要做 66K 徵才網站。
一味打壓揭發低薪資,只會讓許多僱主知道,哦,原來社會可以這樣欺負弱勢族群和新入社會新鮮人。除了出氣,其實並沒有太多幫助。
做 66K 徵才網站才會讓大家知道,努力和有天份會有改變自身環境的一天。而且這個世界上很多人願意用高薪資爭取好人才。僱主要是自己不努力就等著被淘汰掉。但可惜大家在憤怒當下只做得出譴責 22K 網站。」
接著在7.13就更新了她花五小時做出來的66K工作網。
不由得佩服這位執行力超強的ROR高手 🙂

網址:http://66kjobs.tw/
Github原始碼:https://github.com/xdite/66kjobs

相關新聞
22K閃邊!66K工作網來了 給你好薪情

餐飲POS雲端叫號系統

好久沒更新部落格了!最近正陷入結案地獄中,不過在網路上看到之前曾提過的取餐叫號器的廠商,引進了新的雲端叫號系統。對於餐飲POS系統的服務又更加升級了,可以先電話預約訂購後,再透過網路知道目前的叫號,在接近時再繞過去拿就行了!這也可以運用在醫療系統上,在預約掛號後,知道目前的叫號號碼。分享給大家!

http://www.ehanway.com.tw/

1246dfb156eb4e0cbbee277485d18ecc

03a5a0f4e4654b9790791d76ee6d649b

XE6使用FMX(FireMonkey)取得系統字型列表(For Win/Mac OS)

早上看到大陸網友留言發問,在Delphi的VCL架構中,只要Screen.Fonts就可以取得系統的字型列表,那在FMX(FireMonkey)架構裡沒有Screen.Fonts,該如何取得系統的字型列表呢?壽山做了一個簡單的程式做回應跟說明囉:)

首先我們新增一個FireMonkey Desktop Application專案
螢幕快照 2014-06-21 上午11.54.13

 

 

接著在畫面上放三個元件,Listbox、Label以及Button螢幕快照 2014-06-21 上午11.56.45

 

首先,在Uses的下面加上

  {$IFDEF MACOS}
  MacApi.Appkit,Macapi.CoreFoundation, Macapi.Foundation,
  {$ENDIF}
  {$IFDEF MSWINDOWS}
  Winapi.Messages, Winapi.Windows,
  {$ENDIF}

接著我們要寫一個CollectFonts的函數,讓程式在不同平台可以抓到字型。

主要運用的技巧是

Mac OS裡的NSFontManager
Windows裡的EnumFontFamiliesEx

{$IFDEF MSWINDOWS}
function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
  FontType: Integer; Data: Pointer): Integer; stdcall;
var
  S: TStrings;
  Temp: string;
begin
  S := TStrings(Data);
  Temp := LogFont.lfFaceName;
  if (S.Count = 0) or (AnsiCompareText(S[S.Count-1], Temp) <> 0) then
    S.Add(Temp);
  Result := 1;
end;
{$ENDIF}

procedure CollectFonts(FontList: TStringList);
var
{$IFDEF MACOS}
  fManager: NsFontManager;
  list:NSArray;
  lItem:NSString;
{$ENDIF}
{$IFDEF MSWINDOWS}
  DC: HDC;
  LFont: TLogFont;
{$ENDIF}
  i: Integer;
begin
  {$IFDEF MACOS}
    fManager := TNsFontManager.Wrap(TNsFontManager.OCClass.sharedFontManager);
    list := fManager.availableFontFamilies;
    if (List <> nil) and (List.count > 0) then
    begin
      for i := 0 to List.Count-1 do
      begin
        lItem := TNSString.Wrap(List.objectAtIndex(i));
        FontList.Add(String(lItem.UTF8String))
      end;
    end;
  {$ENDIF}
  {$IFDEF MSWINDOWS}
    DC := GetDC(0);
    FillChar(LFont, sizeof(LFont), 0);
    LFont.lfCharset := DEFAULT_CHARSET;
    EnumFontFamiliesEx(DC, LFont, @EnumFontsProc, Winapi.Windows.LPARAM(FontList), 0);
    ReleaseDC(0, DC);
  {$ENDIF}
end;

最後在Button1Click事件加上

procedure TForm1.Button1Click(Sender: TObject);
var fList: TStringList;
    i: Integer;
begin
  fList := TStringList.Create;
  CollectFonts(fList);
  Label1.Text := '系統字型數量'+ IntToStr(fList.Count);
  for i := 0 to fList.Count -1 do
  begin
     ListBox1.Items.Add(FList[i]);
  end;
  fList.Free;
end;

在Windows及Mac OS執行的畫面如下
10374079_10152084884031541_8800976866348499936_n

10402863_10152084884291541_3407519286840592873_n

GitHub >> https://github.com/superlevin/XE6FMXGetFonts

取得vine影片的og:image方式


Youtube影片在分享時,是很有規則的縮圖
http://img.youtube.com/vi/VIDEO_ID/#.jpg
0.jpg (預設)480×360
1.jpg 第一張縮圖
2.jpg 第二張縮圖
3.jpg 第三張縮圖
以及依品質的縮圖
default.jpg
hqdefault.jpg
mqdefault.jpg
sddefault.jpg
maxresdefault.jpg
不過vine沒有這樣的規則,所以只好自己抓取影片頁面裡的og:image了!
建立一個 get_vine_thumbnail.php

function get_vine_thumbnail($id){
	$vine = file_get_contents("https://vine.co/v/{$id}");
	preg_match('/property="og:image" content="(.*?)"/', $vine, $matches); 
	return ($matches[1]) ? $matches[1] : false;
}
$id1 = $_GET['id'];
header('Content-type: image/jpeg');  
$image = imagecreatefromjpeg(get_vine_thumbnail($id1));  
imagejpeg($image); 

使用時就是 get_vine_thumbnail.php?id=xxxx就可以了!

相關連結:
https://developers.google.com/youtube/v3/

http://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api

https://developers.google.com/youtube/2.0/developers_guide_php?csw=1

Facebook臉書一掛點~所有用到外掛的網站也哭哭了

facebookdown02

facebookdown01
一向是台灣朋友依賴的臉書(Facebook),在下午接近四點全面性的癱瘓!有網友猜測是不是網軍的DDos攻擊,目前不得而知~
不過plurk、twitter等其他社群真的是一片哀嚎,許多人甚至把資料都丟在上面~結果完全找不到了!而許多利用facebook社群外掛的網站,除了版面大亂外,使用facebook登入機制的網站也不得其門而入…..

Delphi XE6透過backendpush發推播訊息

昨天在Codedata發表的那篇「Delphi APP 開發入門(七)通知與雲端推播」,網友問說可不可以自己寫一個Windows程式推播?當然是可以的!

一、到 Kinvey 中Addons -> Business Logic -> Custom Endpoints

Custom-Endpoints01

二、按下New新增,增加一個名稱為sendMessage的Endpoints

Custom-Endpoints02 Custom-Endpoints03

三、建立完成後在函數裡面加上下面的程式碼(如果對Custom Endpoints有興趣可以參考Custom Endpoints guide

Custom-Endpoints04

  var iOSAps = request.body.iosaps;
  var push = modules.push;
  var iOSExtras = request.body.iosextras;
  var androidPayload = request.body.androidpayload;
  var androidmessage = androidPayload.message;
  var message = request.body.message;
  push.broadcastPayload(iOSAps, iOSExtras, androidPayload);
  response.complete( 200 );

四、接著回到程式部份,我們要在KinveyProvider1的PushEndpoint 屬性設定為在kinvey新增的endpoint名稱’sendMessage’。接著在畫面上增加BackendPush1,將Provider 設定為 KinveyProvider1

五、在畫面上新增Edit元件以及Button元件,在Button的onclick元件中寫上程式碼如下

procedure TForm1.Button1Click(Sender: TObject);
begin
  backendpush1.GCM.Message := edit1.Text;
  backendpush1.Push;
end;

這樣就可以了!一樣附上原始碼供大家參考
https://github.com/superlevin/XE6KinveyPush

Xcode 6 beta下執行XE6 iOS程式問題解決

螢幕快照 2014-06-18 下午3.23.12

因為學習Swift語言的關係,就把XCode6 beta版本也安裝上來!不過卻發生要在iOS Simulator執行程式XE6開發的程式時,出現”Can’t load simulator framework’的錯誤訊息。

因為在網路上遍尋不著解決方案,索性自己發揮柯南精神解決。於是把問題鎖定在XCode的command line上面,在一番測試後果然找到問題就是它了~

在Xcode的Preferences中,有個Locations頁籤,裡面有command line tool,預設是 xcode6。改回成Xcode 5.1.1就可以了!分享給各位~

螢幕快照 2014-06-18 下午3.23.31 螢幕快照 2014-06-18 下午3.23.45