tag:blogger.com,1999:blog-85213248842761609182024-02-08T18:39:50.712+08:00Toy box for grapefruit623紀錄碰到的技術問題
個人隨筆grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-8521324884276160918.post-52367320598374405302016-07-23T16:56:00.004+08:002016-07-23T17:01:32.045+08:00cProfile: 可量測Pythonn函式效能的模組最近自己偶爾練習Python時,有時候會碰到效能不好<br />
這時候可以使用內建的cProfile模組來看每個function call所需的時間<br />
例如:<code>cProfile.run( 'function()' )</code><br />
<br />
可以看到像下面這樣的列表<br />
<br />
42333 function calls (42317 primitive calls) in 0.489 seconds<br />
<br />
Ordered by: standard name<br />
<br />
ncalls tottime percall cumtime percall filename:lineno(function)<br />
1 0.000 0.000 0.489 0.489 <string>:1(<module>)<br /> 2 0.000 0.000 0.001 0.000 arrayprint.py:175(_array2string)<br /> 32 0.000 0.000 0.000 0.000 arrayprint.py:208(<lambda>)<br /> 2 0.000 0.000 0.000 0.000 arrayprint.py:22(product)<br /> 6/2 0.000 0.000 0.001 0.000 arrayprint.py:246(array2string)<br /> 32 0.000 0.000 0.000 0.000 arrayprint.py:312(_extendLine)<br /> 10/2 0.000 0.000 0.000 0.000 arrayprint.py:320(_formatArray)<br /> 32 0.000 0.000 0.000 0.000 arrayprint.py:493(_formatInteger)</lambda></module></string><br />
<br />
能幫助分析是哪個函式造成效能瓶頸, 如果是使用物件的方法的話則必須寫成: <code> cProfile.runctx('self.method()', globals(), locals())</code><br />
否則cProfile會認不到method所在的scope
grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-88833327922337431692015-10-31T20:54:00.001+08:002015-11-01T15:30:53.746+08:00Python二維陣列寫法<h3 id="python實踐二維陣列的寫法注意事項">Python實踐二維陣列的寫法注意事項</h3>
<p>如果直覺地使用list, 可能會寫成</p>
<pre><code>twoDimArray = [[0]*3]*3
</code></pre>
<p>陣列的樣子會是 <code>[[0,0,0],[0,0,0], [0,0,0]]</code> <br>
看起來符合二維陣列的模樣, 但其中隱含一個問題 <br>
如果更改其中一個元素</p>
<pre><code>twoDimArray[0][0] = 1
</code></pre>
<p>結果陣列內容會變成</p>
<pre><code>[[1,0,0],[1,0,0],[1,0,0]]
</code></pre>
<p>如果使用id來看</p>
<pre><code>for row in twoDimArray:
print(id(row))
</code></pre>
<p>會發現id都一樣, <strong>每一列所指的都是同一個list!!</strong> <br>
這種bug可能會造成之後使用這個array時出現奇怪的錯誤</p>
<p>所以建議寫法應該改成</p>
<pre><code>twoDimArray = []
for rowCount in xrange(3)
twoDimArray.append([0]*3)
</code></pre>
<p>再一次檢查id, 可以發現到已經是不同的list object了</p>
<blockquote>
<p><strong>Tip:</strong> 或者乾脆使用numpy 套件更為妥當</p>
</blockquote>
<p><strong>11/1新增:在stackflow上看到的相關討論</strong></p>
<blockquote>
<p><strong>Reference:</strong> <br>
<a href="http://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists">http://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists</a></p>
</blockquote>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-50181288744549940972015-04-26T21:45:00.002+08:002015-05-01T21:35:34.822+08:00python 網路爬蟲避免被阻擋的方法最近手癢寫一小支網路爬蟲,但是會碰到被伺服器擋下的問題<br />
<br />
主要原因就是對方伺服器知道當前連線的程序是機器人<br />
處理方式就是讓爬蟲偽裝成真人<br />
<br />
<br />
python網路爬蟲常利用urllib2模組來實現, 但是預設的user-agent會註明這是一支python程式<br />
因此需要修改成常見到的瀏覽器<br />
<br />
例如:<br />
<script src="https://gist.github.com/grapefruit623/10b80e2f8d19b3f6d320.js"></script>
即可讓本次的Request被視為是linux系統經由Firefox瀏覽器所送出<br />
<br />
要注意:如果連線過於頻繁仍有可能被視為惡意攻擊
grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-3296241156640150672014-09-13T20:12:00.001+08:002014-09-13T20:12:08.067+08:00pip指令:freeze最近在django的教學中看到的pip指令<br />
freeze,能夠得知目前環境下透過pip安裝的套件<br />
看來以後要盡量用pip安裝套件,方便日後變更環境<br />
重新架設開發環境。grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-3906802597825169152014-05-10T20:50:00.000+08:002014-05-15T23:33:39.635+08:00撰寫python常見的十大錯誤原文如下:<br />
http://www.toptal.com/python/top-10-mistakes-that-python-programmers-make<br />
<br />
這篇文章列出了在撰寫Python時,常犯的錯誤<br />
內容也稍微帶出了一些Python內部實做的細節<br />
<br />
先寫下一點簡單的個人摘要,改天來翻譯一下好了<br />
<br />
1. 誤用函式的參數:<br />
python 的 函式參數是在函式宣告時就定義完畢,而且也只會定義一次<br />
(<em style="background-color: white; border: 0px; box-sizing: border-box; color: #303338; font-family: proxima-nova, Arial, sans-serif; font-size: 18px; line-height: 27px; margin: 0px; padding: 0px; vertical-align: baseline;">the default value for a function argument is only evaluated once, at the time that the function is defined.</em>)<br />
int, float參數是沒啥感覺,但在list時,很容易誤以為每次都會產生新的list<br />
實際reference是指向同一list<br />
<br />
2. 誤用 class 變數:<br />
子類別沒有特別override 父類別的變數時,子類別物件的變數其實都指向同一變數(即父類別的變數),會導致改了一個兒子,其他兄弟手上也跟著變<br />
<br />
3. 例外處理沒正確捕捉<span style="background-color: #fffffc; color: #657b83; font-family: inherit; font-size: 0.9em; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: 1.5em;"></span><br />
「except ValueError, IndexError:」的寫法只會看到ValueError, 後面的IndexError會被忽略,改成「except ( ValueError, IndexError ) as e:」就都能catch了<br />
<br />
4. 誤解了Python 的 變數Scope<br />
若想在函式內修改global 變數時,不要用assign operater (像是 += )<br />
在函式內使用 += 時是會看區域變數,實際上當然沒有這個local變數<br />
最後出現unboundLocalError, 畢竟等同於「尚未宣告就先指定值」<br />
<br />
5. 在迭代list時修改了它<br />
迭代過程中,刪除了list中的元素, 引發error<br />
它建議是另開一個list, 迭代原list,並將符合條件者存入<br />
反正沒被reference到的memory會被python的garbage collection回收<br />
<br />
6. 弄錯Python的Closures實做<br />
這部份要先去理解Closures(閉包),上次接觸這個名詞是在看JavaScript<br />
的書,我記得好像是跟變數的生命週期有關.......<br />
------待補-------<br />
<div>
<br /></div>
7. module互相引入<br />
在架構上要注意這點,如果出現了互相引用,大概代表<br />
功能之間的相依性有問題。<br />
<br />
8. 取名時不小心跟標準函式庫一樣<br />
盡量避免取什麼專有名詞的module吧<br />
<br />
9. Python2.x 與 Python 3的寫法有點不同<br />
說真的....我到現在都還是2.7版<br />
------待補-------<br />
<div>
<br /></div>
10.誤用__del__ method<br />
------待補-------<br />
<div>
<br /></div>
<br />
<br />grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-40343090703230424682014-03-02T22:53:00.001+08:002014-03-02T22:54:17.066+08:00python中zip函式的範例,matrix transpose 及 split string to same size chunk>>a = [ [1,2,3], [4,5,6], [7,8,9] ]<br />
>>zip( *a ) # 等同於 zip( [1,2,3], [4,5,6], [7,8,9] )<br />
>>[ (1,4,7), (2,5,8), (3,6,9) ] # 矩陣轉置<br />
<br />
zip 會擷取每個迭代物件所對應的元素放入tuple中<br />
第一個tuple 內含每個list的第一個元素,第二tuple 則是第二元素<br />
以此類推。<br />
<br />
>> s = 'abcdefghi'<br />
>>zip( *[iter(s)]*3 )<br />
>>[ ( 'a', 'b', 'c' ), ( 'd', 'e', 'f' ), ( 'g', 'h', 'i' ) ] # 字串切割成一塊塊<br />
<br />
將字串切成同樣字元數的範例原理是因爲迭代器 iter<br />
在每次呼叫時都會以 __next__ 取出一個元素<br />
<br />
而在 [ iter(s) ] * 3 這步驟,並不是生成三個迭代字串s 的list<br />
而是生成一個list, 裏面的三個元素的參照都指向同迭代器<br />
<br />
>> [ iter(s) ]*3<br />
>> [ <iterator object at 0xaddress>, <iterator object at 0xaddress>,<br />
<iterator object at 0xaddress> ]<br />
<br />
因此當zip 在生成第一個tuple時,在list元素一的iter 回傳字串的第一個字<br />
而去list元素二時,由於仍是同一個迭代器,此時會回傳第二個字<br />
以此類推。<br />
<br />
感覺像是這樣:<br />
<br />
tuple1 tuple2 tuple3<br />
---------- ---------- -----------<br />
<span style="color: red;">a</span>bcdefghi abc<span style="color: red;">d</span>efghi abcdef<span style="color: red;">g</span>hi<br />
a<span style="color: red;">b</span>cdefghi abcd<span style="color: red;">e</span>fghi abcdefg<span style="color: red;">h</span>i<br />
ab<span style="color: red;">c</span>defghi abcde<span style="color: red;">f</span>ghi abcdefgh<span style="color: red;">i</span><br />
<br />
<br />grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-66942397586464307992014-02-23T13:21:00.001+08:002014-02-23T13:21:19.349+08:00於python使用opencv的imread 可能會忽略的小地方 最近在利用python與opencv 在做影像相關的work<br />
其中我需要知道每一pixel在RGB下 ( B-R ) / ( B+R )<br />
的比例。<br />
然而跑出來的值非常詭異,在查閱文件後<br />
發現問題出在opencv的imread下<br />
imread 在讀檔後所回傳的資料為numpy.ndarray<br />
維度為影像的長乘上寬,每一element為一tuple<br />
但資料型態是 「numpy.uint8」,當在做pixel運算時<br />
如果有碰到負數則會出現錯誤的值。grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-71503524142624933242014-02-15T21:05:00.003+08:002014-02-15T21:06:39.830+08:00matplotlib的圓餅圖 修改字體大小matplotlib 是使用python來畫出圖表時常用到的套件<br />
<br />
其中只要 from matplotlib import pyplot<br />
再透過呼叫 pyplot.pie<br />
就能很簡易畫出圓餅圖<br />
<br />
但是去查看document時發現到它沒有直接調整字體大小的參數(在 pyplot.bar下 就有)<br />
導致圖上的文字說明,像是各類別名及所佔百分比的文字太小無法改變<br />
<br />
透過修改 pyplot.rcParams['font.size']的值 可以改變字體大小<br />
根據matplotlib的document來看, rcParmas是top-level module<br />
一些global 的參數 像是字體大小,線條長度,顏色都可透過它修改<br />
<br />
<br />
相關文件:<br />
http://matplotlib.org/api/pyplot_api.html<br />
http://matplotlib.org/api/matplotlib_configuration_api.htmlgrapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-64167797218898294092013-11-25T23:27:00.001+08:002013-11-25T23:47:35.772+08:00魔法少女學小圓 叛逆的物語 心得自從知道這部會在台灣上映之後, 就一直盡量不去看捏他文<br />
但多少還是有被雷到一點.........<br />
<br />
<br />
<br />
<br />
幸好畫面風格還是要自己看才算數<br />
這次劇場版畫面非常華麗啊! 不管是開頭的夢魘空間, 學姐跟小燄的<br />
gun kata對決, 現實與魔女結界混搭的城市, 還有五人戰隊變身的舞池<br />
<br />
每個鏡頭都相當豪華啊, 這次新房想必玩得很開心<br />
雖然當看完op時就有種非常不好的預感的,有種小燄這次要被虐得更慘的預兆, 整個op裡所有人的色調都是光鮮亮麗, 就只有小燄整個灰暗.....<br />
<br />
由於整座城市等於燄的內心投射, 整座都市風貌也一直在變化<br />
從開場的<strike>兼用卡</strike>老師與轉學生橋段(到這還很正常), 開始追查魔女的下樓場景(魔女結界開始混進來)到整個崩壞的大火<br />
<br />
根本就是看著小燄一步一步壞掉<br />
<br />
尤其是那句 "什麼時候 我連魔法少女都不是了"<br />
還絕望到拿槍崩掉自己靈核<br />
<br />
心靈支柱早就升天的小燄,唯一還能讓自己保持理性的依據,就只有以魔法少女的身份代替圓神保護世界的目的........<br />
<br />
連這也被剝奪, 她到底還剩下什麼?<br />
<br />
幸好小圓這時候給她拍拍, 但也種下燄魔化的伏筆<br />
(在那之後燄的對白都意味深重)<br />
<br />
該死的QB打算染指圓神, 小燄不惜變魔女也要救小圓那段又再度令人感受到小燄為了小圓, 真的什麼事都做的出來<br />
當時的小燄的聲音已經整個發狂了.....<br />
<br />
燄的魔女化則是充滿自虐與自責, 使魔拖著魔女上斷頭台是怎樣??<br />
真的不理她難不成真的會自滅?連怪都不用打就掉寶了<br />
<br />
接下來算是夢幻共演了 配上<span style="background-color: white; color: #777777; font-family: arial, sans-serif; font-size: x-small; line-height: 21px;"></span>梶浦大神的bgm, 整個充滿希望啊!<br />
當人魚魔女手持紅蓮長槍打破結界, 同時也象徵著自我封閉的燄終於能走出自責與壓抑的迴圈, 總算能抓到幸福了..........<br />
<br />
<br />
是啊........真的是親手抓到幸福了<br />
<br />
<br />
雖然早就被雷到但當燄整個魔化時還是很震撼......<br />
最後創出新世界讓小圓能當普通人.....哪怕反抗圓神也要做到<br />
這種覺悟真的很可怕, 感覺小燄已經跨過某條界線了<br />
在此之前都多少會顧及別人。<br />
<br />
不過看到QB被虐就是爽<br />
<br />
整部戲的總結:<br />
<br />
歷經不下百次loop的小燄終於理解自己的真心<br />
在老虛的劇本裡, 只有誠實面對自己欲望的人才能笑到最後<br />
<br />
<br />
<br />grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-5345281123274170492013-02-25T15:47:00.002+08:002013-02-25T15:50:20.011+08:00css相對定位參考:<a href="http://tw.myblog.yahoo.com/class2u-com/article?mid=10">http://tw.myblog.yahoo.com/class2u-com/article?mid=10</a><br />
<br />
css中相對於父元素的定位法<br />
父親: relative<br />
子: absolute<br />
如此一來 子在父親中的排版便會固定,可用在一些長寬可以不變,但不希望隨著視窗縮放而導致排版亂掉grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-6525793024037098932013-02-25T15:47:00.001+08:002013-02-25T15:50:05.010+08:00當ubuntu開機時,碰到grub_rescue的解決法<a href="http://blog.yam.com/kaidamy/article/30746129">http://blog.yam.com/kaidamy/article/30746129</a><br />
<br />
<br />
這是在重灌舊電腦時發生的情形<br />
相關指令的意義不是很懂,看起來是grub沒能找到ubuntu的磁區<br />
所以要重新掛載。grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-27420548851688290362012-11-01T21:37:00.000+08:002012-11-01T21:37:07.309+08:00ubuntu 套件資訊有時候會忘掉自己安裝過某些套件,在process中看到時還會疑惑<br />
啥時有這服務的?<br />
<br />
如果想知道套件安裝的資訊<br />
可以在/var/log/dpkg.log中找到<br />
在/var/log/apt中似乎可以找到更詳細的資訊<br />
<br />
檢查套件資訊可參考<br />
<a href="http://blog.xuite.net/jyoutw/xtech/39380855">http://blog.xuite.net/jyoutw/xtech/39380855</a>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-14089848116707589502012-08-23T09:39:00.001+08:002014-02-15T20:44:24.604+08:00ubuntu 12.04 固定ip 與 dns原先dns的設定是在/etc/resov.conf下<br />
<br />
但每次都會被洗掉,且系統也不建議直接修改<br />
<br />grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-62929459590336758332012-08-03T17:04:00.002+08:002012-08-03T17:04:34.736+08:00python regular expression "match" vs "search"常常弄混re.match 與 re.search的差別<br />
寫下來以免又忘了。<br />
<br />
re.match("pattern","string")是比對該字串的「開頭」是否符合該表示式<br />
<br />
re.search("pattern", "string")則尋找string中任何位置是否有相符者<br />
<br />
兩者皆回傳MatchObject,若找不到則回傳Nonegrapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-55528417910827744302012-07-15T13:26:00.002+08:002012-07-15T13:26:45.856+08:00開始學用ns2最近因為研究所的關係,開始學習這套網路模擬軟體<br />
安裝方面道是很簡單,在synaptic中搜尋ns2和nam(跑gui)就有了<br />
目前看起來是要先學寫.tcl檔交給ns2編譯後再讓nam跑圖形模擬<br />
<br />
就先摸索一陣子吧<br />
<br />grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-52968707125397131692012-06-18T23:58:00.000+08:002012-06-18T23:58:30.644+08:00thinkpad x220i 裝virtualbox今天想在x220i上裝virtualbox跑ubuntu 12.04 64 bit<br />
結果一直跑出vt-x錯誤, google一下發現似乎是cpu的虛擬功能沒開<br />
但是非常神奇的是 enable的選項居然在bios中security的分類下<br />
現在終於能裝ubuntu了grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-43741895332558447462012-06-08T18:54:00.003+08:002012-06-08T19:08:24.556+08:00讀書心得--Google總部大搜密最近跑去圖書館借書來打發時間,無意間看見這本「<span style="color: blue;">G</span><span style="color: red;">o</span><span style="color: yellow;">o</span><span style="color: blue;">g</span><span style="color: lime;">l</span><span style="color: red;">e</span> 總部大搜密」<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/9/0010523809.jpg&width=200&height=280&quality=80" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/9/0010523809.jpg&width=200&height=280&quality=80" width="141" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
這大概是我目前看過介紹google的書中最為詳盡的一本了</div>
<div class="separator" style="clear: both; text-align: left;">
不只介紹PageRank演算法的起源,google從草創到營利的過程</div>
<div class="separator" style="clear: both; text-align: left;">
最重要的是他們的企業文化,與一般大眾心目中的「大公司」不僅不同甚至可說是完全相反</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br /><br />
<div class="separator" style="clear: both; text-align: left;">
書不在手邊,憑印象寫下幾個印象深刻的點</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li><b><span style="color: #9fc5e8;">80 - 20時間</span></b>:這也不是啥新鮮消息了,他們的員工可以撥出20%的工作時間做自己的事,一般人可能會想:我讓員工做自己的事?產出下降怎麼辦?!但是反過來想,員工一定會偷偷在上班時做一點私事,尤其現在社群軟體這麼蓬勃發展,偷上facebook根本是常態,倒不如開放一部分時間,也讓員工比較心甘情願為你工作。最重要的是:他們可是才華洋溢的「Google 人」,怎麼會把寶貴的20%時間拿來做毫無意義的事情,關於這部份等下再詳談。</li>
<li><b><span style="color: #cfe2f3;">工程師在上,其他在下</span></b>:一般公司是先由管理階層定好方針或由業務員得到訂單後,再由programer負責實做,一不小心就可能變成外行領導內行,但是Google卻是先由工程師決定做什麼,並做出一定成果後,再由管理者進行評估,即使失敗了也能得到寶貴數據。</li>
<li><b><span style="color: #cfe2f3;">資料!數字!分析!</span></b>:Google相信的是客觀資料,使用者每次的搜尋與點擊,都會回傳給google的機器進行分析,這些數據就是google的靈魂,在google內如果有歧異意見,不以職務與頭銜決定,而是數字:可能營收,損失與成長幅度等。依照這些分析進行決議,以進行客觀驗證。</li>
<li><b><span style="color: #cfe2f3;">保密文化</span>:</b>雖然Google已是上市公司,但它仍只揭露法定最低限度的資料,也因此Google給人一種神秘的感覺。「如果對手不知道我們的預算,就無法因應對策,假如它們所花的比我們多,那我們就賺到了。比較少,就贏不了我們」。與之相反地是,Google內部卻透明化,資訊流通非常快速,除了非常重要的機密外,幾乎毫無秘密。</li>
<li><b><span style="color: #cfe2f3;">各部門間的競爭模式</span></b>:第四點有提到,google內部非常透明化,誰在做啥,規劃啥都一目了然,這讓google跟一般大企業比起來比較沒有隔閡,且為了保持小公司才有的機動性(google非常重視速度),各個開發團隊都能獨立運作,且互相競爭資源(像是人手與server或是一個月份的按摩卷),這使得google就像是一群小公司的集合體,只是為了一個遠大的目標而集中起來。</li>
<li><b><span style="color: #cfe2f3;">第二高價拍賣</span></b>:如果得標者出價20元,但第二高價者只喊了10元,想必贏的也不開心,為了吸引業者購買google的廣告(配合使用者的搜索而置入),得標者僅需付出比第二高價者多一點就行。</li>
<li><b><span style="color: #cfe2f3;">Google DNA</span></b>:高超的實力固然是重要考量(不如說是基本要求),但是google偏好剛畢業的新鮮人,以避免收到已被「一般大企業文化」影響的員工,google的用人法則總歸一句就是「熱誠」,對自己的工作有熱情,哪怕上司不允許也要據理力爭(拿出數據報告)就算是休息時間也在思考如何改進(20%的個人時間),擁有這種特質的人根本不把工作當工作,而是如呼吸一般自然,也因此維持了高效率的產出。即便他們離職,但是Google特質也深根於心中。</li>
</ol>
從以上幾點可以看出,google的標新立異,但是公司的營運方針為何???<br />
<div class="separator" style="clear: both; text-align: left;">
如果不以營利角度出發,怎賺錢? Gmail,Youtube,Google Map都是免費耶?</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
答案再次訝異!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Google的思考偏向如何使網路更加便利</div>
<div class="separator" style="clear: both; text-align: left;">
而不是獲取利潤,當購買他們的股票時,他們便會提醒你</div>
<div class="separator" style="clear: both; text-align: left;">
「我們會偏向放掉短期利益(=股東利益),但是能走更久(先別急著脫手)」</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
這裡解釋一下Google的主要營收方式:廣告</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
流程如下</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>業者標價買廣告,Google賺到錢</li>
<li>用戶使用Google搜索</li>
<li>配合用戶置入廣告</li>
<li>用戶點下去</li>
<li>業主與Google分得利潤,大家都攥錢</li>
</ul>
就這樣~沒了。而這一切取決於用戶是否願意使用Google<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
因此</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>廣設資料中心與改良演算法:Google變好用,使用意願提昇</li>
<li>提供眾多服務:大家更愛用Google</li>
<li>潛在用戶提高:越多人用Google,廣告越多人點</li>
<li>廣告曝光率高:業者願意砸大錢競標</li>
<li>點了廣告:賺錢~</li>
<li>資料回饋:點擊結果再度拿來分析與協助改進</li>
<li>回到第一點</li>
</ul>
注意到了嗎?google的獲利是建立在良好的網路環境下才能成立<br />
<div class="separator" style="clear: both; text-align: left;">
舉凡網速太慢,搜索結果不合需求,廣告被忽略...etc,都會影響獲利</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
結論:</div>
<blockquote class="tr_bq">
所有google所提供的免費服務都是會了讓更多人使用google,不以獲利為主要方針而以建構良好環境為目標,利潤自然滾滾來。</blockquote>
<blockquote class="tr_bq">
雖然Google以提供良好的網路服務為己任,但免不了有爭議</blockquote>
<blockquote class="tr_bq">
紀錄使用者的搜索軌跡與Gmail分析是否侵犯隱私,Google的搜索是否壟斷市場?</blockquote>
<blockquote class="tr_bq">
<strike>雖然我用得很開心</strike>。 </blockquote>
<blockquote class="tr_bq">
而且Google屢次拒絕提供用戶資料給政府(中國與美國),與中國的衝突最後Google黯然退出中國市場 ,但是這也牽扯到未來雲端產業的隱憂,你的個資都在雲上,隱私權的爭議與資安問題都是重點,Google只是走在較前面而已。</blockquote>
funny point:<br />
<blockquote class="tr_bq">
Android的誕生是為了讓更多人能在行動終端上使用Google,但也惹火了蘋果</blockquote>
<blockquote class="tr_bq">
布林與佩奇(Google創始人)沒有秘書,且神出鬼沒,Google內甚至有一專門確認他們行蹤的團隊。</blockquote>
<blockquote class="tr_bq">
chrome(Google 瀏覽器)的計畫早就想做了,但施密特(當時的執行長)擔心會惹毛微軟,所以較遲推出 </blockquote>
<blockquote class="tr_bq">
Google常常隱姓埋名去物色資料中心的建地,直到談妥了才揭曉,且資料中心到底有幾座仍是未知,有傳聞說Google買下了一艘廢棄油輪改建為海上中心(未證實)</blockquote>
<blockquote class="tr_bq">
Gmail的製作者是個22歲的新鮮人,當他知道他負責這麼重大的工作時,他嚇壞了</blockquote>
<blockquote class="tr_bq">
早期Google的伺服器都是裸機(沒裝在機殼裡),因此機架上能放更多台server,讓託管中心的人很無奈(於是後來決定自己蓋資料中心) </blockquote>
<blockquote class="tr_bq">
對於Google會去偷看用戶Gmail的說法,工程師說:我們怎麼有辦法一天看超過數億封郵件,內文分析都是讓機器在做的</blockquote>
<blockquote class="tr_bq">
布林與佩奇的最初目標「是有問必答的電腦」,而Google的最終目標是能自動幫你找資料的人工智慧(背後是世界級的資料庫與運算能力) </blockquote>
<blockquote class="tr_bq">
<strike>所以他們會做出天網或母體??</strike> </blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-41324671140287791972012-05-05T20:19:00.001+08:002012-05-06T13:34:06.254+08:00復仇者聯盟簡短心得週末跟朋友去京站威秀看復仇者聯盟<br />
只能說,在看以前有點擔心戲份比重<br />
畢竟<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://citytalk.tw/upload/event/169887/images/4f5efa514be0e.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://citytalk.tw/upload/event/169887/images/4f5efa514be0e.jpg" width="224" /></a></div>
<br />
這海報的構圖看起來就像:鋼鐵人與他的快樂夥伴們<br />
不過實際看完後印象最深的反而是浩克與看起來不起眼的鷹眼。<br />
以及<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://ipyshare.com/wp-content/uploads/2012/04/%E5%BE%A9%E4%BB%87%E8%80%85%E8%81%AF%E7%9B%9F-%E7%A5%9E%E7%9B%BE%E5%B1%80%E5%B1%80%E9%95%B7-1024x682.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://ipyshare.com/wp-content/uploads/2012/04/%E5%BE%A9%E4%BB%87%E8%80%85%E8%81%AF%E7%9B%9F-%E7%A5%9E%E7%9B%BE%E5%B1%80%E5%B1%80%E9%95%B7-1024x682.jpg" width="320" /></a></div>
<div style="text-align: center;">
神盾局局長<br />
<br /></div>
<div style="text-align: left;">
那種面對多方責難也面不改色的氣魄還有老奸巨猾(看過的都知道我在說哪段)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
基本上本次英雄集合的部份分為兩個階段</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
前半段:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: lime;">被脅迫來</span>,<span style="color: red;">不情不願的來</span>,<span style="color: blue;">充滿使命感的來</span>,<span style="color: #bf9000;">老闆命令來</span>,<span style="color: yellow;">不請自來</span>和被挖角</div>
<div style="text-align: left;">
<span style="color: #6aa84f;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #6aa84f;">洛基:居然想靠這群烏合之眾拯救地球???</span></div>
<div style="text-align: left;">
局長:是你逼我的</div>
<div style="text-align: left;">
<span style="color: #783f04;"><br /></span></div>
<div style="text-align: left;">
後半段:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
因為一些契機,英雄們從之前的不合到願意放下,最後決定攜手合作</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
台面上:正義 使命 親情 與悲天憫人的情操 </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
實際上:<span style="color: red;">我不爽你加上你想拆我家</span></div>
<div style="text-align: left;">
<span style="color: red;"> </span><span style="color: blue;">你幹掉我的fans</span></div>
<div style="text-align: left;">
<span style="color: blue;"> </span><span style="color: #bf9000;">你對我男人做什麼!!</span></div>
<div style="text-align: left;">
<span style="color: yellow;">家務事</span></div>
<div style="text-align: left;">
<span style="color: lime;">我只是想發洩一下</span><br />
<span style="color: yellow;"> </span>前面的幾位請排隊,我要第一個打爆他</div>
<div style="text-align: left;">
<br />
.........................................................................滿滿的怒火啊<br />
<span style="color: #38761d;"><br /></span></div>
<div style="text-align: left;">
偉大的<span style="color: #6aa84f;">洛基</span>使得一盤散沙得以凝聚,實是促使復仇者聯盟成立的一大功臣<br />
還連帶使外星人大軍損失慘重<br />
想必他一定是老奸的局長所安排的兩面諜<br />
<br />
由於本人對美漫不熟,對於那些被洛基招來的外星人大軍不熟<br />
只聽說那位boss似乎是規格外的bug角,至於那些被<strike>騙來</strike>的軍隊<br />
嗯...只能說還是去劇院看才能體會<br />
我只能說他們跟英雄們的對決不但刺激而且很賭命(對外星人來說)<br />
<br />
而本次重要的魔王角色<br />
<span style="color: #6aa84f;">洛基</span>的豐功偉業為<br />
<br />
<ol>
<li>想殺雞儆猴時被隊長用盾牌反攻</li>
<li>打得正開心時被隊長和東尼圍毆</li>
<li>怕閃電(<span style="color: #6aa84f;">洛基:</span>我不怕閃電!! 只是不喜歡接下來的東西)</li>
<li>被哥哥訓話</li>
<li>被套話</li>
<li>被放冷槍</li>
<li>嘴砲被東尼嗆(We have Hulk!!)</li>
<li>這一直很管用(男人嘛..每五個人..)</li>
<li>接住鷹眼的箭..........</li>
<li><span style="color: lime;">好弱的神</span></li>
</ol>
以一位喜歡玩樂的神來說,笑點滿滿</div>
<div style="text-align: left;">
也成功以謊言欺騙了外星人,真不愧是惡作劇之神</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
復仇者聯盟,一部娛樂性十足的電影</div>
<div style="text-align: left;">
<br /></div>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-42783006917152675442012-04-27T14:38:00.004+08:002012-04-27T14:38:44.211+08:00全域變數之我見最近找了一題acm的題目打發時間(<strike>高手一天三題,我三天一題)</strike><br />
其中為了省下打字麻煩,把一個會 「重複使用」 , 「傳入遞迴」<br />
的變數設定為全域變數,因此付出了80%的時間debug..........<br />
<br />
很多初步接觸程式設計的人常常會為省麻煩,而把常用變數設為<br />
全域,但這會造成管理上的問題。<br />
<br />
個人心得:<br />
<br />
1. 每個function都能存取與修改該變數,很容易在不知情的情形下<br />
誤改值,很難確認對其修改的權限歸屬<br />
<br />
2. 盡可能改以區域變數,一來是方便追蹤範圍與可能出錯的區塊<br />
二來只要生命週期結束,便不會造成多餘的影響<br />
<br />
3. 常數盡量以<span style="color: lime;">#define</span> 處理<br />
<br />
小地方多關心,bug遠離你....grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-69537702308787131222012-04-22T18:57:00.003+08:002012-04-22T18:57:50.000+08:00python gui排版最近嘗試用python寫gui程式<br />
使用Tkinter時,同時用了pack與grid設計排版<br />
結果程式整個跑不起來,後來才發現兩者不能同時共用<br />
<br />
參考來源:<br />
<a href="http://effbot.org/tkinterbook/grid.htm">http://effbot.org/tkinterbook/grid.htm</a>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-32332126367693735722012-04-19T23:54:00.000+08:002012-04-19T23:54:09.540+08:00Nikon S2600 get由於家人需要,所以幫忙挑選入門級的數位相機<br />
剛好燦坤週年慶特價就挑中它了,本來想要黑色的<br />
但是庫存沒了只好換選銀色(打死都不想挑粉紅色)<br />
<br />
之前都一直都是用手機在照相<br />
藉此機會來學點攝影好了,看能不能培養個興趣grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-44448457918259869112012-04-17T23:50:00.002+08:002012-04-17T23:59:08.756+08:00正規表示式配對標籤最近在寫<strike>別人的</strike>作業時,要用到正規表示式抓取成對標籤內的文字內容<br />
<div>
<br /></div>
<div>
例如說:<br />
<blockquote class="tr_bq">
<doc>段落一</doc> <doc> 段落二 </doc></blockquote>
</div>
<div>
<blockquote class="tr_bq">
直覺的想法便是用 " <doc>.*</doc>"分別捕捉到段落一與二</blockquote>
<blockquote class="tr_bq">
然而正規表示式具有 greedy 的特性</blockquote>
故實際配對為<br />
<blockquote class="tr_bq">
<span style="color: #cc0000;"><doc></span>段落一</doc> <doc> 段落二 <span style="color: #cc0000;"></doc></span> </blockquote>
<blockquote class="tr_bq">
如果想使用non greddy的正規表示式</blockquote>
<blockquote class="tr_bq">
需改寫為 "<doc>.*?</doc>" </blockquote>
配對結果:<br />
<blockquote class="tr_bq">
<span style="color: #cc0000;"><doc></span>段落一<span style="color: #cc0000;"></doc></span> <span style="color: #3d85c6;"><doc></span> 段落二 <span style="color: #3d85c6;"></doc></span><span style="color: #6fa8dc;"> </span></blockquote>
..........不過這樣寫能通,還是有點摸不著頭緒<br />
<br />
參考資料<br />
<blockquote class="tr_bq">
<a href="http://www.exampledepot.com/egs/java.util.regex/greedy.html"><span style="color: white;">http://www.exampledepot.com/egs/java.util.regex/greedy.html</span></a></blockquote>
<blockquote class="tr_bq">
</blockquote>
</div>grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0tag:blogger.com,1999:blog-8521324884276160918.post-55910872337651189222012-04-16T12:28:00.002+08:002012-04-17T23:35:23.324+08:00開始寫個部落格吧第一篇文章<br />
都已經大學要畢業了,一直以來在課業上<br />
碰到過許多問題,所幸網路上有許多無私的人<br />
分享他們的經驗。<br />
我也想像他們一樣能回饋他人。<br />
<br />
本部落格用來存放心情隨筆與碰到的技術問題<br />
目前學藝不精 請見諒grapefruit623http://www.blogger.com/profile/10817905999585242211noreply@blogger.com0