我想知道我的網內通話時間、網外通話時間、市話通話時間各占多少
要去哪裡看?
網路客服 / 帳單服務 (要先登入)
帳單/通話明細查詢
話務分析 (似乎要先開啟電子帳單功能 才有)
選擇月份 / 瀏覽
結果 (似乎根據所選擇的方案會看到不同結果,似乎要是VIP才有此功能)
轉載時請轉載連結 謝謝
我想知道我的網內通話時間、網外通話時間、市話通話時間各占多少
要去哪裡看?
網路客服 / 帳單服務 (要先登入)
帳單/通話明細查詢
話務分析 (似乎要先開啟電子帳單功能 才有)
選擇月份 / 瀏覽
結果 (似乎根據所選擇的方案會看到不同結果,似乎要是VIP才有此功能)
轉載時請轉載連結 謝謝
我想知道有沒有方案是在任何情況下都是最好的方案
平均網內通話時數 > 7小時 選擇 一般月租1500
這是 台灣大哥大的iPhone 5特惠方案
大家都會算每個方案24個月總共要付多少金額然後挑最便宜的
如果按照這種方式去計算的話
得到下面這個表格
總支出 | 1100方案 | 1398方案 | 1667方案 | 2199方案 |
16G手機 | 35300 | 38952 | 40008 | 52776 |
32G手機 | 39300 | 43452 | 43908 | 52776 |
64G手機 | 43300 | 47452 | 47908 | 52776 |
(總支出 = 方案月租 * 24 + 手機價格)
然後一對照發現阿~原來1100方案是最便宜的
然後就選了 GG~
以下精算後的結論 :1100 方案真的是最便宜的
不想看分析文的可以不用往下看了
實際上
我們的總支出 = iPhone 5 + 月租費 + 上網費
但是因為我們主要是想買 iPhone 5 才會去選擇上面的方案
也就是說,無論如何今天 iPhone 5 跟行動上網的錢是付定了
所以我們排除iPhone 5在Apple官網上的價格和行動上網的價格(699*24)
得到這樣的表格
月租費總支出 | 網內一族401 | 通通省699 | 在地生活968 | 2199方案 |
16G手機 | -3376 | 276 | 1332 | 14100 |
32G手機 | -2976 | 1176 | 1632 | 10500 |
64G手機 | -2376 | 1776 | 2232 | 7100 |
實際月租 | 網內一族401 | 通通省699 | 在地生活968 | 2199方案 |
16G手機 | -141 | 12 | 56 | 588 |
32G手機 | -124 | 49 | 68 | 438 |
64G手機 | -99 | 74 | 93 | 296 |
(實際月租 = 月租費總支出 ÷ 24)
其實我們應該考量平常的通話量,然後選擇對自己來說最省錢的月租費方案
如何查自己的通話量
於是我們需要這樣的圖
假設我們只撥打網內 (在地生活只撥打區內) ,沒有撥打網外也沒有撥打市話
當然如果說完全無法控制網內不網內的話就免談了直接選在地生活就對了
從圖中可以看出通通省方案是最差的
而最佳的選擇如下:
平均網內通話時數 < 4小時 選擇 網內一族401
平均網內通話時數 < 6小時 選擇 在地生活968
在地生活968卻變成了最差的方案了
而最佳的選擇如下:
平均網內通話時數 < 1.5小時 選擇 通通省
平均網內通話時數 < 4.5小時 選擇 網內一族401
平均網內通話時數 > 4.5小時 選擇 一般月租1500
我發現學習一件事情需要很多東西的配合
人類作事情的流程我認為是這樣
環境的輸入 → 腦部演算法的運作 → 肢體的輸出
在學習一件事情時會先從最基礎的肢體輸出開始
速度、精準度和熟練度是重要的
直到腦中所想可以像反射動作一樣的迅速時
才能稱得上是一個良好的駕駛員
再來是根據環境決定該作出什麼策略
足夠了解自己機體的性能 根據機體性能不同 作出的策略也會不同
大部分情況是不了解自己機體的性能
所以要先從了解自己極限在哪開始
有時候看到高手作極限挑戰就覺得自己也可以
那些都是幻覺
最後是環境的輸入 有些參數是沒人提點的話 根本不會去想到要參考的
在資訊分析的初期就被我們遺棄的參數也許就是個重要的參數
這就要靠天份了 或者看看別人的演算法參考了那些環境變數
移除畫面上的 flash 時能夠清除 flash 所占用的記憶體
假設操作 HTML 字串等於操作記憶體
新增 Object Tag 增加記憶體使用量
移除 Object Tag 減少記憶體使用量
畫面上放兩個按鈕
addFlash
removeFlash
按一下 addFlash 新增一個 Object Tag
按一下 removeFlash 移除所有 Object Tag
=== HTML的部分 ===
add flash
remove flash
chrome, firefox, safari在按下removeFlash時
系統記憶體使用量在1秒內明顯下降,好像沒按過addFlsah一樣
但是 IE 不意外,在按下removeFlash時
系統記憶體使用量開始緩緩下降,過了一分鐘還沒降到該降到的位置
不知道 IE 怎麼達到移除 flash 時釋放記憶體?
(其實也不能說他沒有釋放,只是他釋放得很慢)
問題 :
如何根據使用者的滑鼠軌跡
得到一個二次貝茲曲線
flash graphics 的 curveTo 畫出的線就是二次貝茲曲線
這條線需要三個參數 p0, p1, p2
graphics.moveTo(p0.x, p0.y);
graphics.curveTo(p1.x, p1.y, p2.x, p2.y);
所以我們要解決的問題是給定一個滑鼠軌跡座標陣列 x0,x1,...,xk
求出 p0, p1, p2 的值
解法:
我發現這篇論文寫得很好
http://figment.cse.usf.edu/~sfefilat/data/papers/TuBCT10.16.pdf
他簡單假設
p0 = x0
p2 = xk
接下來只要解 p1, 用一個逐步逼近最佳解的方式, 先假設p1在某個位置
算出目前誤差值 e
應該偏移的方向 Δp
更新 p1 = p1 + Δp
重作上面三行直到 e 的值不再變小為止
作法很簡單
但這裡還有很多細節沒講到
有興趣的人可以慢慢看論文
利用這篇論文可以實作出適合用在 flash 上的手繪曲線程式
整天用電腦
整天吹冷氣
喝的是冰水
不知道三餐要吃什麼
想洗澡就洗澡 想吃飯就吃飯 想大便就大便
自以為家裡很整齊
時間過得很快
沒電腦
沒冷氣
喝的是溫水
三餐都吃冷菜
定時洗澡
定時吃飯 想大便要趁休息時間夠長的時候
所有的物品都放在指定的位置
時間過的超慢 成功嶺就跟精神時光屋一樣 但集合時間卻很趕
摸滑鼠感覺很陌生
吹冷氣會不舒服
喝冰水會不舒服
每間店都是人間美味
想洗澡就洗澡 想吃飯就吃飯 想大便就大便 超爽
忍不住就整理了起來 棉被的折法被制約了
發現一天24小時其實很長 到底是受訓時浪費時間還是受訓前浪費時間已經搞不清楚
碰冰的會不舒服 好像是感冒了 應該跟受訓沒關係 = =
https://etrex.tw/flash/missingmouse/missingmouse.html
為了瞭解人類有沒有所謂的絕對鼠感
我作了這樣的一個小遊戲
常玩遊戲的玩家們
你可以利用這個遊戲來練手感
也可以利用這個遊戲來調整出適合自己滑鼠移動的靈敏度
這是一個類似打地鼠的小遊戲
用滑鼠點擊黑圈進行遊戲
每次遊戲時間 45 秒
畫面上方的標題列變色表示時間流逝
遊戲結束後會顯示成績
連續正確點擊可累積 combo 次數
每次正確點擊會增加 combo 次數的分數
錯誤點擊時則會扣除 combo 次數的分數,並且 combo 次數歸零
所以錯誤點擊的損失是很高的
而遊戲難度會隨著 combo 次數調整
combo 01~05 次:滑鼠游標淡出
combo 06~10 次:滑鼠移到黑圈上的效果淡出
combo 11~50 次:黑圈的大小改變
我想買房子,看了幾間房子之後挑了一間決定買了,後來才看到更棒的房子和優惠方案
我想找工作,看了幾間公司之後挑了一間決定報到了,
後來才看到更好的職缺
我想買生活用品(like 衛生紙、沐浴乳),去賣場逛了一下之後決定買了,
後來才在其他賣場看到大特價
其實這是因為選擇性注意
我用這一張圖片來說明為什麼
因為從你開始注意到你下決策的時間太短了
重點是你下了決策之後還會持續注意這種機會
所以不用抱怨 因為這是常態
Signal 的命名採用[發生時間+主詞+動詞]
舉例 :
onClick
onKeyDown
beforeMouseDown
onMouseDown
afterMouseDown
只在對象為 this 時作 Event 轉 Signal
用 CJSignal 舉例 :
假設原先的 code 是這樣
public class Button extends Sprite { } public class Panel extends Sprite { private var button:Button = new Button(); public function Panel(){ button.addEventListener(MouseEvent.CLICK, function():void{ this.dispatchEvent(new Event("onButtonClick")); }); } }
改法1:
像這樣直接把 addEventListener 改成 signal 的作法不好
public class Button extends Sprite { } public class Panel extends Sprite { private var button:Button = new Button(); public var onButtonClick:NativeSignal = new NativeSignal(button, MouseEvent.CLICK); }
改法2:
應該這樣做
public class Button extends Sprite { public onClick:NativeSignal = new NativeSignal(this, MouseEvent.CLICK); } public class Panel extends Sprite { private var button:Button = new Button(); public function get onButtonClick():NativeSignal{ return button.onClick; } }
這是因為 button 可能會被 new 一次以上
如果用改法1的寫法
會產生多餘的 Signal 物件
也會造成程式碼重複
hinet 非固定制ADSL 是需要撥號連線的
會有一個連線按鈕給你按
圖可以參考 hinet 提供
即使你把網路連線放到啟動裡面
開機後執行也只是跳出這個框框
還是需要手動點一下才會連線
當然這個少點一下是可以避免的
不過就算你把他改成自動連線了
也是要在登入windows後 才會觸發啟動
問題來了
我有一台電腦從頭到尾就只想要用遠端連線
我需要一開機 在未登入windows之前就讓他連上網路
這樣我才能用遠端連線去登入windows
啟動辦不到 該怎麼辦?
答案是工作排程
我看了這篇文章後成功設定完成了
這樣我就不需要多買一組螢幕 鍵盤 滑鼠去控制第二台電腦
當初看到這篇文章的時候
覺得怎麼可能有這種拍賣網站
[密技公開] 如何以2元買到1990元的iPad周邊? 揭露以小搏大的競標真正內幕
這種類型的拍賣網站是這樣賺錢的
[人生智慧] 歷經十年的真實試驗-金錢拍賣會-讓你體悟人性陷阱
結果最近真的陸續看到這種網站的出現
BID & BUY
來福福袋
這兩個網站的遊戲規則不太相同
但本質是相同的
建議如果要玩的話
先看仔細遊戲規則再玩
--
感謝 plurk 上的網友提供關鍵字 : 競標網
因為這個東西寫了很久
一邊寫程式一邊進步
一進步就改變程式風格
又沒有良好維護 code 的時候
程式碼就會有風格不統一的情形
然後程式的命名就亂了
我在想要怎樣命名才是最佳解
我採用的事件流程是CJSignal
我的signal命名規則 :
signal的命名應該是 時間+名詞+動詞 的形式
比方說
onMouseClick
beforeMouseClick
afterMouseClick
onViewChange
函數本身則是避免使用這樣的形式
函數應該使用 動詞 or 動詞+名詞 的形式
比方說
mouseClick.add(onMouseClick); //這樣不好
onMouseClick.add(mouseClick); //這樣不好
onMouseClick.add(handleMouseClick); //這樣比較好
函數名稱盡量要跟函數內容有關 而不是跟函數執行的時間點有關
onMouseClick.add(goToHappyEnding); //這樣更好
當 try catch 遇到 EventDispatcher
public function TestClass() { try { eventDispatch().dispatchEvent(new Event("TEST")); } catch (err:Error) { trace(err); } } public function eventDispatch():EventDispatcher{ var ed:EventDispatcher = new EventDispatcher(); ed.addEventListener("TEST",crashFunction); return ed; } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); }
請問上面的程式會 ?
public function TestClass() { try { crashCallback(crashFunction); } catch (err:Error) { trace(err); } } public function crashCallback(f:Function):void { f(); } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); }
結果是 callback 會觸發 trace
於是自己做了一個簡單版的EventDispatcher
public class MyEventDispatcher { public var functionArray:Array = []; public function addEventListener(f:Function):void { functionArray.push(f); } public function dispatchEvent():void { for each(var f:Function in functionArray) f(); } } public class TestClass extends Sprite { public function TestClass() { try { eventDispatch().dispatchEvent(); } catch (err:Error) { trace(err); } } public function eventDispatch():MyEventDispatcher{ var ed:MyEventDispatcher = new MyEventDispatcher(); ed.addEventListener(crashFunction); return ed; } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); } }
結果也是觸發 trace
內建的 eventDispatcher 到底是.../]\?
我在2008年提過這個概念
svn 是版本控制軟體
他能幫你做程式碼的差異備份 但是前提是檔案名稱要相同
當我修改 Class1.as 的 package 路徑時
我被迫要移動
Class1.as 到正確的資料夾路徑 (對應 package)
因為移動檔案會被分解為刪除檔案和新增檔案這兩個動作
而刪除的檔案與新增的檔案無關
結果造成 svn 無法與先前版本的 Class1.as 作差異比對了
完全不曉得要怎麼解決這個問題
上次龍哥的意見是說把修改 package 的事情記錄在 svn 的版本說明裡
至少這樣還找得到先前的位置
不曉得有沒有其他更好的解法
var color1:uint = 0x01010101; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace(color1 == color2);
以上的程式輸出 :
false
var color1:uint = 0x01010101; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); bitmapData.setPixel32(0,0,color1); var color2:uint = bitmapData.getPixel32(0,0); trace(color1 == color2); trace(color1.toString(16)); trace(color2.toString(16));
以上的程式輸出 :
false
1010101
1000000
從這兩個 case 我們知道在 setPixel32 設定顏色跟 BitmapData 建構式傳入顏色是一樣的結果
var color1:uint = 0x010179ff; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace("color1 = " + color1.toString(16)); trace("color2 = " + color2.toString(16));
以上的程式輸出 :
color1 = 10179ff
color2 = 10000ff
var color1:uint = 0x010180ff; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace("color1 = " + color1.toString(16)); trace("color2 = " + color2.toString(16));
以上的程式輸出 :
color1 = 10180ff
color2 = 100ffff
從這兩個 case 我們知道他是根據 A 的值對RGB分別作某個四捨五入的行為
我猜是為了繪圖加速之類的事情作的吧
不過這個真的會害死人 = =
在 BlurFilter 的說明文件裡面提到
blurX 屬性
blurX:Number
語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9
水平模糊化量。
有效值為 0 到 255 (浮點)。
預設值為 4。
2 的冪次方數值 (如 2、4、8、16 和 32) 是經過最佳化的,
以便在顯示時會比其它值更為快速。
有效值最大為 255
但我需要值域不限制在 255 以內的模糊濾鏡
所以我準備自己實作一個 Filter
於是我去看了 BitmapFilter 這個 Class
BitmapFilter 類別是所有影像濾鏡特效的基底類別。
BevelFilter、BlurFilter、ColorMatrixFilter、ConvolutionFilter、
DisplacementMapFilter、DropShadowFilter、GlowFilter、GradientBevelFilter 和
GradientGlowFilter 類別都可以擴充 BitmapFilter 類別。 您可以將這些濾鏡特效套
用至任何顯示物件。
您無法直接實體化或擴充 BitmapFilter。
所以我無法自己實作Filter
請問我如果要對一個 Shape 物件使用值域超過255的 BlurFilter 要怎麼作?
我想到一個很蠢的方法
那就是
在此公布 Draw Something 的必勝法
我連圖片都不用看 就能猜到答案了
為什麼呢?
我們在猜題的時候,畫面下方可以看到12個候選字母
此時把12個候選字母記下來
然後重開遊戲再進入猜題
候選字母會跟上次不同,但是正確的字母每次都會出現
所以沒出現的字母就可以排除了
必勝法總共兩個步驟
Flash 的動態文字字型大小限制在 127 以下
以下實驗證明 flash 的動態文字字型大小是受限的
我用程式產生字型大小 116 ~ 130 的 TextField 並作滑鼠感應
當滑鼠移動到 TextField 上時顯示字型大小
證明字型大小最大只能到 127
demo
http://dl.dropbox.com/u/7377053/flash/textFieldFontSizeTest.html
Source
http://dl.dropbox.com/u/7377053/flash/textFieldFontSizeTest.fla
code
http://paste.plurk.com/show/948935/
tooltip.targetAlpha = 0; var textFormat:TextFormat = new TextFormat(); function getTextField(size:int):TextField{ var t:TextField = new TextField(); t.text = "A"; textFormat.size = size; t.selectable = false; t.setTextFormat(textFormat); t.autoSize = TextFieldAutoSize.LEFT; t.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); t.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); return t; } function onMouseOver(e:MouseEvent):void{ var t:TextField = (TextField)(e.target); tooltip.targetAlpha = 1; tooltip.t.text = t.getTextFormat().size; } function onMouseOut(e:MouseEvent):void{ var t:TextField = (TextField)(e.target); tooltip.targetAlpha = 0; } this.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(e:Event):void{ tooltip.x += (this.mouseX - tooltip.x) * 0.2; tooltip.y += (this.mouseY - tooltip.y) * 0.2; tooltip.alpha += (tooltip.targetAlpha - tooltip.alpha) * 0.2; } for(var i = 116 ; i <= 130 ; i ++ ) { var t:TextField = getTextField(i); var n = this.numChildren - 1; t.x = n % 5 * 100; t.y = Math.floor(n /5) * 100; this.addChild(t); } this.addChild(tooltip);
Try yourself
原理
html5 canvas 的橡皮擦怎麼作?
用context.globalCompositeOperation
根據Canvas Composite Operations Tutorial & Demo
我們知道只要寫
context.globalCompositeOperation = "destination-out"
就可以作出橡皮擦功能
但我們不直接用他
因為我們要透過 EaselJS 來操作 canvas
所以我們變成要寫
DisplayObject.compositeOperation = "destination-out";
demo
code
<html> <head> <title>title> <script type="text/javascript" src="../lib/easel.js">script> <script type="text/javascript" src="../lib/jquery-1.7.1.js">script> <script type="text/javascript"> $(function(){ var canvas = $("#canvas")[0]; var stage = new Stage(canvas); var shape1 = new Shape(); var shape2 = new Shape(); var color = "rgba(255,0,0,1)"; shape1.graphics.setStrokeStyle(16, "round", "round") .beginStroke(color) .moveTo(100, 300) .lineTo(300, 100) .endStroke(); shape2.graphics.setStrokeStyle(16, "round", "round") .beginStroke(color) .moveTo(100, 100) .lineTo(300, 300) .endStroke(); shape2.compositeOperation = "destination-out"; stage.addChild(shape1); stage.addChild(shape2); stage.update(); }); script> head> <body> <canvas id="canvas" width="640" height="480">canvas> body> html>
這是用 http://tohtml.com/ 貼code的功能,感覺還不錯
Canvas Composite Operations Tutorial & Demo (混色模式教學)
http://mrcoles.com/blog/canvas-composite-operations-demo-animation/
EaselJS新手上路
http://blog.eddie.com.tw/2011/09/10/introduction-to-easeljs/
HTML5 Canvas eraser demo using EaselJS (橡皮擦教學)
http://etrex.blogspot.com/2012/03/html5-canvas-raser-demo-using-easeljs.html