2014年1月8日 星期三

將舊iPhone 專案 xib 加入 StoryBoard

Recently, I'm trying to update my app. To make it support iPhone. iTunes: 剪髮管理


When I try to add a storyboard to my current project like this:


But!!!  things never gone so well. 事情絕對不是我們所想這麼簡單的!

So I'm try to compare the default project for the latest Xcode 5.0. 

發現,這兩點已經悄悄的改變了。

ApplicationDelegate:
Before

After
 main.m:
Before
 After

特別的是第一點,從Xcode 4.x, 當StoryBoard被導入進來後,Default 的 ApplicationDelegate Class 從繼承 NSObject 改成 UIResponder。

Reference on Apple:

Note: In the current Xcode templates, the application delegate class inherits from UIResponder. This is so that the delegate instance can participate in the responder chain and so handle application-level actions. If you haven’t made use of this pattern in an existing application, there’s no need to adopt it for storyboards.
意思是說,若你以前的專案沒在用StoryBoard,你就繼續用Xib吧。 

目前是改到這樣,只是對於 iPad (走Xib)的會不會有什麼影響還不確定。





2013年11月22日 星期五

[Hacking] Undead Slayer iOS 版 破解 非JB, 洗錢

Hi

最近迷上一款手機遊戲,叫做Undead Slayer 大陸叫做亡靈殺手.

再簡單的操作裡,也可以有許多華麗的動作表現(使用Unity 3D引擎)。





每次玩遊戲都覺的,好不暢快,裝備,寶物,錢,特殊金幣也太難掉了!!

廢話不多說 ~正文開始
==============================

準備材料如下:
1. PC 一台 or Mac
2. 安裝 iFunBox or iExplorer
3. 裝有Undead Slayer的iphone

==============================
事先聲明,這招不是破解這遊戲,是洗錢!會讓你的錢和勾玉不會減少。

麻煩度
==============================

  • 把遊戲關掉(點兩下home鍵,找出程式關掉)。
  • 打開iFunBox or iExplorer, 找到 Undead Slayer的App,並且找到這個檔案<Library\Preferences\com.nhncorp.skundeadgr.plist>。在接下來的步驟我們會編輯它非常多次。
  • 接下來把它Copy到一個特定的資料夾,然後先在原地複製貼上,產生一個備份檔。


  • 用一個文字編輯器打開它,選擇文字編輯,在這裡用的是XCode。打開之後你會看到像圖下方式組合的 鍵 與 值 的對應 <key> </key> <string> </string>。



  • 這裡我們要找的是勾玉以及金錢的key值。分別是n24以及n17。意思就是<key>n24</key><string>aaaaxxxxxxxxx</string>, 以及<key>n17</key><string>bbbbxxxxxxxxxxxxx</string>.
  • 這時候我會把現在的錢 例如說1000元,記錄在記事本或是Word上,像是: 
n17 1000元
RSKv0E7wmnM3vf5nsi8wYis/pTGjdOJXMwMBXLFBBrw=
n24 7 勾玉
DXvsdNcHchz9b2UaizTkIw/obKW5LdwLjs99Vt4HgxY=

  • 所以假設你現在去遊戲裡面,花了500元之後,離開遊戲到主畫面,然後按Home鍵關閉遊戲。

  • 一樣,使用iFunBox, 找到 Library\Preferences\com.nhncorp.skundeadgr.plist.先存到某個資料夾,打開它,然後再n17的String值貼上RSKv0E7wmnM3vf5nsi8wYis/pTGjdOJXMwMBXLFBBrw=

  • 儲存檔案,再覆蓋過你手機的同樣檔案。
  • 打開遊戲!你會發現你這時金幣變成1000圓了。

小訣竅:
勾玉等於錢,錢不等於勾玉,但非常多的錢,有機會產生勾玉(靠搜尋寶物)。

刷勾玉方法,當你存到可以兌換勾玉的時候,把這個已經有10個勾玉的備份黨(就叫他A好了)存起來。
存起來之後,進到遊戲裡面,兌換勾玉變成13。然後回到主畫面,按Home鍵關掉遊戲,然後複製存在當前App中 com.nhncorp.skundeadgr.plist 裡面n24的值,也就是勾玉13的值,然後修改備份A的n24欄位,這樣就讓備份A變成,還沒兌換勾玉,但勾玉是13的備份擋了。
一直洗....
一直洗....
一直洗.... 像是這樣。

後面洗很快的原因是一直去搜尋寶物,使得寶物兌換那邊一次可以兌換10幾個勾玉。

That`s it!!.

2013年11月19日 星期二

[Coding] [Algorithm] Number-of-disc-intersections

For Interview purpose, right now I doing some online coding test: using codility

Here is the quesiton:

Given an array A of N integers, we draw N discs in a 2D plane such that the I-th disc is centered on (0,I) and has a radius of A[I]. We say that the J-th disc and K-th disc intersect if J ≠ K and J-th and K-th discs have at least one common point.
Write a function:
int solution(NSMutableArray *A);
that, given an array A describing N discs as explained above, returns the number of pairs of intersecting discs. For example, given N=6 and:
A[0] = 1  A[1] = 5  A[2] = 2 
A[3] = 1  A[4] = 4  A[5] = 0  
intersecting discs appear in eleven pairs of elements:
  • 0 and 1,
  • 0 and 2,
  • 0 and 4,
  • 1 and 2,
  • 1 and 3,
  • 1 and 4,
  • 1 and 5,
  • 2 and 3,
  • 2 and 4,
  • 3 and 4,
  • 4 and 5.
so the function should return 11.
The function should return −1 if the number of intersecting pairs exceeds 10,000,000.
Assume that:
  • N is an integer within the range [0..100,000];
  • each element of array A is an integer within the range [0..2147483647].
Complexity:
  • expected worst-case time complexity is O(N*log(N));
  • expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.
Copyright 2009–2013 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

Here is my solution write in Objective-C which only got 62 points in Codility(due to timeout error in some question.)
The time complexity is O(n^2)
Space complexity is O(1)

#import <Foundation/Foundation.h>
int solution(NSMutableArray *A) {
    // write your code in Objective-C 2.0
      if(!A || [A count] <1) return 0;
          long resultCount = 0;
          for(int i = 0; i < [A count] ; i++){
              for(int j = i+1 ; j < [A count] ; j++){
                    
                  if(([(NSNumber *)A[j] longLongValue]+[(NSNumber *)A[i] longLongValue]) >= j-i){
                      resultCount ++;
                        //NSLog(@"print i = %d, j = %d",i,j);
                  }
                  if(resultCount > 10000000)
                  {
                        return -1;
                  }
              }
          }
          return resultCount;
       
}
//Improvement, I think I can make some performance improve using sorting.
First, produce a sorting array I-A[I]( the left bound of each disk) and add I +A[I] also in the structure.
struct element{
      int leftBound; (leftBound as sorting index)
      int rightBound;
}
So, start traverse the left bound from X,
Pseudo code may be

for X = 1~ X
      for(Y = X+1 && element[Y].rightBound<=Y)
        counter ++


The series of discussion can be found in here :   Number of Disc intersection Discuss in Statck overflow

Here is another smart guy claims that he has  O(N+M) time complexity with O(N) space complexity.



###Updated:
When I`m trying  to implement the algo that I mention above, by using a self-defined  @interface in Codility (WT.....! they didn`t support....).
So I use struct instead, how ever, objective-C`s NSArray only support NSObject, Here is the solution: Wrap a struct in Objective-C

Another challenge is coming, When I sorting by NSArry using this function sortedArrayUsingComparator:NSComparisonResult............ Actually, it`s too slow....
So I drop the method, by using the default struct, and using native ..... qsort

Perfect!!! I got 93 score in Codility

#import <Foundation/Foundation.h>
struct _DiskBound{
    long long leftBound;
    long long rightBound;
};
typedef struct _DiskBound DiskBound;
    
int compare (const void * first, const void * second){
    long long f = ((DiskBound *)first)->leftBound;
    long long s = ((DiskBound *)second)->leftBound;
    //NSLog(@"Current Sorting %lld, %lld",f,s);
    if(f > s )return 1;
    if(f < s) return -1;
    return 0;
    
}

int solution(NSMutableArray *A) {
    // write your code in Objective-C 2.0
if(!A && [A count] < 1) return 0;

    int resultCount = 0;
    
    DiskBound diskBound[[A count]];
    for(int i = 0; i < [A count] ; i++)
    {
        diskBound[i].leftBound =i-((NSNumber *)A[i]).integerValue;
        diskBound[i].rightBound =i+((NSNumber *)A[i]).integerValue;
    }
    qsort(diskBound, sizeof(diskBound)/sizeof(diskBound[0]), sizeof(DiskBound), compare);
    
    for (int i = 0; i < [A count]; i++){
        long long currentBound = diskBound[i].rightBound;
        for (int jj = i+1; jj < [A count] && diskBound[jj].leftBound <= currentBound; jj ++)
        {
            resultCount ++;
        }
        
        if(resultCount > 10000000)
            return -1;
    }
    return resultCount;
}

Summary:

The performance with Objective-C in Codility is relatively slower than other language. Their measurement of time complexity is the running time not from the code, I guess. So facing these kinds of mathematical problem. Using native C language can help you to do more faster and get higher grades.



2013年10月3日 星期四

[Update] [2013/9/20~10/4] 近期感想

首先,先講一下最近忙什麼好了。

主要再弄Arduino Project.  跟幾個朋友開了一門Android & Arduino的Group.

我主要負責程式解說的部分,一方面也讓我重新去學習Java啦。

 
這邊主要 寫成,如果藍牙晶片接受到Information,然後LCD就可以Display什麼東西這樣。


真的蠻簡單的,LCD只要用這個Function 設定輸出的腳位。

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//LiquidCrystal(rs, enable, d4, d5, d6, d7) 
//http://arduino.cc/en/Reference/LiquidCrystalConstructor
//http://arduino.cc/en/Reference/LiquidCrystal

SoftwareSerial BT(10,9);
//Blue Tooth, 使用軟體模擬Tx(傳送端) Rx(接收端) 於第10, 第9孔

在void loop() function大概寫這樣。我是用手機的Bluetooth App 測試叫做 ”藍牙串口助手“
重點是 baudrate一定要設定對,才不會解讀出來是亂碼。

void loop()
{

 lcd.setCursor(0, 1);
 while(BT.available()>0)
  {
     val = BT.read();
     switch (val){
       case '0':
        lcd.print("BT disconnected");
        Serial.println("BT disconnected");
        break;
       case '1':
        lcd.print("BT connected");
        Serial.println("BT connected");
        break;
       default:
        lcd.print("No Input");
        Serial.println("No Input");
        Serial.print("In put failed");   
    }
}






原本的問題是這樣,在我打三國打到一半,開始出現嚴重閃爍,閃一閃最後螢幕就秀不出來
了。當下我以為壞掉,所以就放旁邊,想說要送修。

但google DIY修螢幕之後,找到這篇 ,好像可以自己試試看(自我感覺良好)。

就開始拆解螢幕,我覺得最難的是螢幕外殼,我的型號是Viewsonic的。

這個板子是處理電相關的,從插頭接來之後,右上角那個是突波器,原本以為壞掉,買了零件,還有綠色的大電容,以及中間一圈一圈的環形電感,我以為這三個壞了,跑了一趟電子零件行,還學了不少知識。也要靠一些有在搞這個的朋友教。

但實際接上電源要測試突波是不是壞掉,結果發現其實沒問題!?!?!

結果裝回去,就沒事了==。

還煞有其事買了安全護目鏡。

==============DIY修螢幕==================





2013年9月11日 星期三

向七年級生致敬<屬於七年級生的焦慮>


最近看了些許文章有感

分手快樂!在 Google 上班就像交了一個很帥的男友,但我一點都不快樂


Delay of confusion
我覺得,我們七年級生,有些人延後了許多焦慮以及困惑。
        對於每個階段的我們,總是因為社會壓力,同儕壓力,家庭壓力,而被迫選擇。有些事情不是不好,只是我們往往沒有意識到當下的決定是影響如此之深遠。我想不是很多人都很幸運,知道自己想做什麼,而且就去做了什麼,而這些沒有認真思考的日子,造就了我們成為這個社會上的浮動人口。
        或許有些人在幾經思考之後,放下手邊的工作,放棄以前所學的知識,回到家鄉,拿起鋤頭,奮力工作。或許有些人,幾經思量之後,決定放棄高薪穩定的生活,毅然決然地打包行李,飛向澳洲。
        我要跟這些人的父母說的是,不是我們的問題,是環境的問題。”政府的教育政策“,”技職體系被廢除“以及”社會的普遍價值觀都希望我們都成為白領“,這些問題,或說是陷阱,將我們一步一步推向無法回頭的深淵。突然發現,我們都含著牛的繮繩,辛苦地,緩慢的,摘拉著牛車前進。

The truth is....
        事實上是,這個社會本來就需要有多元化的人才,有人當廚師,有人種田,有人修車,有人做衣服。在這樣的環境下,導致還沒有找到自己真正興趣的人,全部都送到大學裡,而且如果你再認真一點,考研究所也不是特別困難的事情。最後在職場庸庸碌碌,載浮載沈,你才開始思考,到底是什麼東西澆熄了我們的熱情,最後你真正能思考你想要做什麼的時間,只能在你開始工作,擁有大部份的自主權的時候。

        研究所補習班的黃子嘉老師(已故):“上研究所之後有許多時間,要好好思考一下到底要做什麼”。黃老師他上課風趣幽默,教了很多除了課堂之外的許多課題,我想是人生的課題。
我原本以為他的意思是,上了研究所之後有許多方向,可以想想應該研究什麼方向,但是我想,他應該是看出這時代青年的迷惘。做很多事之前要想清楚。
有時候只是因為你沒有勇氣跨出去做決定,但不作決定的當下其實也是一種決定。
        如果你發現現在的你想當個廚師,你媽告訴你,你怎麼不高職就念餐飲科,但事實上,你要高職念餐飲科,代表你國中要混一點,也沒有認真考高中,這樣你才有機會進去高職念餐飲科,而你念了餐飲科後,可能要突破自己,考上餐旅學院,才有機會學到比較進階的餐飲管理課程。這.....不很矛盾嗎?
換言之,如果你今天只要認真一點,你是沒辦法走到這一步的。

七年級生受教育的環境
       在國中時期<那時候專科已經要招不到人,理論上只要認真一點,就可以上普通高中>
       高中時期<高中考大學那時期,已經聽說大學錄取率已經達到了9x%,換言之,只要認真一點,就有大學念>
       大學時期<快畢業那年,對於一些大學畢業的學生,因為聽說業界都蠻重視研究所學歷,所以就拼了一下考研究所,這時候出現區分,有的考上有的沒考上>
       研究所時期<那時流行考“研發替代役”,好處是少當一年兵,有能夠直接有工作經驗(好像很棒!?)>



所以該怎麼辦呢?
        像是離職Google的 Ellen Huerta,她不知道要做什麼事情之前就離職了,在離職後也嘗試了許多有興趣的小事情,像是:烘焙、閱讀、跑步、吉他等等,雖然最後半年過去,她還是沒找到她想做的事情,不過......就這樣吧......。
       

我喜歡鋼鐵人三的這一段。
<前情提要:Tony Stark 因為復仇者聯盟時期,看過太多具有怪力,例如雷神索爾,他開始害怕,開始覺得恐懼,覺得自己再也不是如此的所向無敵,因此有了恐懼症>。
而這單純的小朋友用了直白的語句問他:
“You’re a mechanic, right? Why don’t you just build something?”  

或許就像這樣吧,做些事情去解決你的困惑,做出許多嘗試,其他的事情,再說吧!

2013年9月3日 星期二

創業的心智模型(Mental Model)

複雜的大腦
心智模型是用於解釋個體為現實世界中之某事所運作的內在認知歷程 --- Wikipedia - 心智模型
以創業來說,心智模型像是你對於一個產業的了解(將資料分類以及理解的方式)。例如:一個行銷專家,醫生,設計師還有工程師在看好魚網

     

行銷專家
醫生
設計師 工程師
郭家兄弟近來開創許多xxx123的電子商務,有的成功有些收掉了,利用類似Groupon的團購方式降低貨品單價,以量制價。加上醒目的倒數提示,刺激買氣。 針對加拿大的柳葉魚,最近有許多新聞提到重金屬過高的可能性。帶卵的,膽固醇可能過高?而貨運運送的過程會不會造成不新鮮的問題? 這個界面跟以前的Groupon有點像,不虧是郭家兄弟,商品文案以及配色都是走台式網拍文宣風格。界面非常簡單。 這個網站看來很簡單,背後的商品應該只要開一個Table,這個網站我大概估三個禮拜兩個人就可以做完。

以上僅僅是Kuso亂舉例,別當真,意會就好。

       這個東西,重要嗎?
        如果你今天是一個創業的構想人,你想到一個絕世無雙,前所未見的Idea,然後你準備下去做了,但,請你在這時候反思一個問題,你對於你要創業的產業究竟了解的程度有多少,你是不是能夠瞭解你創業所需要的商業模式,競爭對手,市場定位,你是否能夠一眼看出這個對手的核心價值在哪(需要心智模型的累積),就像我們如果要做一個打敗Lativ的品牌的話,至少我們也要親自買過,用過,穿過,比較過其他,聽過消費者的心聲,而且這些都是基本。(講是這樣講啦,我也要加油@@")
        
        雖然根據統計,55%創業者不是在自己習慣的領域創業(參考1),但擁有對應的產業知識往往能夠拿到更多的創投資金。


        工商服務時間
        16年服務業經驗(從小六),2年網拍賣家經驗,3.5年工程師經驗。
        這種跨產業的經驗塑造我的心智模型嗎?所以我到底是當業務好還是繼續當工程師咧
                



2013年9月2日 星期一

<書摘>哈佛商學院最實用的創業課 -- <起手篇>


一句話書評:一本針對創業路上中各種不同決策的案例分析集。
 (本篇文章經過第二次修改,斜體字為新增的部分,也刪除了一些內容,改變一些編排方式,主要會有起手篇,合作篇,書中的內容還有許多,但這部分就留給您自己到書局翻翻看,值得再買囉)。

        這本書密密麻麻的文字,也不知道當初為什麼造孽)手滑買了他,但還好我翻開了它。
或許是剛好結束跟朋友的微創業(創業中途腰斬,這在書中也不算少數),看起來特別有心得。

       在第二次審慎考慮要給讀者什麼樣的訊息之後,我最後決定放棄使用這本書原本的編排方式。
(此書的編排的是以工具書的方式,根據你所在的處境,讓你找出類似的問題或困境。不告訴你對錯,只是用實例來說明。)
雖然此書編排的有條有理,但我覺得這本書比較像是一種故事,一本針對幾個大的創業團隊,以及他們所面臨到的問題,他們的抉擇造成什麼後果的一種故事。

我們都知道溝通很重要,你跟好友需要溝通,你跟家人需要溝通,你跟陌生人也需要溝通,有時候,你知道好友的底線在哪,所以在溝通的過程中你也會小心翼翼地不要觸及對方心中的那些地雷。但是,你也知道的吧,這樣,真的好嗎?
    

創業,創造自己的事業


動機篇

  • 心理層面(追求財富以及權力為主)
    • 根據書中統計,隨著根據不同階段的年紀會有不同的心理層面需求。
排名20~29 男性創業者20~29 男性非創業者20~29 女性創業者20~29 女性非創業者
#1權力以及影響力安全感自主獲得賞識
#2自主名望權利以及影響力聯繫
#3管人財務利益管人安全感
#4財務利益聯繫利他生活方式

無排名 30~39 男性創業者 30~39 男性非創業者 30~39 女性創業者 30~39 女性非創業者
自主 名望 自主 獲得賞識
財務利益 安全感 利他 安全感
管人 地位 權利以及影響力 利他
權力以及影響力 獲得賞識 變化 變化

  • 環境篇
    • 早年環境影響:隨著家庭環境的成長,若家庭環境較多人創業,往往容易建立創業者之創業心態。

  • 掙扎篇
    • 雖然創業者之心態可能早就建立,但隨著根據以下之決定因素,也往往讓創業者陷入掙扎(如下表所述),而通常伴隨的時間越長,等待之危險也更高。
立即創業先等等,直到
擺脫金手銬 (註1)建立更多人脈
趁自己還沒收到家庭束縛建立更多社會資本
趁工作還沒變得過度專門建立更多金融資本
趁自己還未過渡依賴僱主的資源
    • 等待的危險:
      • 工作太久,很難辭職;錯失自身最佳創業狀態:更強的家庭羈絆。
    • 解除創業掙扎的契機:
      • 解除職業羈絆的契機:
        • 就職公司失去前景、雇主策略改變、公司被收購、被開除或裁員。
      • 解除財務羈絆的契機:
        • 被裁員而獲得遣散費。
        • 繼承遺產或是突然獲得大筆資金。
      • 解除家庭羈絆的契機:
        • 伴侶開始工作。
        • 子女長大成人。
        • 移民到其他國家。
  • 小結
    • 在創業與否的決定當中,本書作者希望讀者儘量從客觀的角度分析自身情況,包含事業、個人及市場狀況(可參照下列問題),而若其中之一不足仍然要創業,就必須找到其他的對應方式,例如:市場經驗不足--->尋找長短互補,能提供構想的創業伙伴;伴侶或家庭無法支援--->探查伴侶恐懼,坦率商討解決辦法,務實評估創業投入的時間以及資源;技能不足-->尋找相關工作以填補職能或產業知識缺口
    • 怎麼評估創業構想 (市場狀況)
      • 市場潛力:目標市場是否正在成長?顧客是否願意購買?
        • 短評:先前想創業的目標市場是代購市場,而這個市場存在了一段時間,成長速度可能非常緩慢(也有可能是知名度太低或是購物體驗不太方便造成代購者少)。
      • 競爭環境:環境對自己的構想有利嗎?是否有許多公司在競爭逐稀缺的資源?
        • 短評:非常不利@@",代購市場的主要平台為Y拍以及露天所壟斷,加上也有類似競爭者做同樣的平台,眾人搶燒餅上的芝麻吃。
      • 計時鐘:我是否要快速行動才有希望創業成功?機會是否正在倒數?
      • 短評:是不用,但還是希望快速。
書中提到許多創業團隊面臨的溝通問題,不僅是朋友、同事或是家人,如何能夠探知在表面有共識底下的真正想法,並且消除疑慮,才是每一個創業者最需要知道溝通的課題。


同分類下一篇:<書摘>哈佛商學院最實用的創業課 -- <讓我們組隊下副本!>


(註1) 金手銬是指公司利用股票期權、獎金紅利等預期收入手段 from: 金手銬