[Code Review Series] - Value Not Used [坑爹的代码] - 变量未使用


I thought it will be nice to share some code-review experience from time to time. A code-review is important and necessary for PR (Pull Requests) to merge to the development/release branch. But sometimes, a minimal 2 reviewers are not sufficient e.g. once, a PR with irrelevant change has been merged to development branch even with 2 reviewers ‘Approved’. Later… these reviewers were ‘punished’ by bringing in donuts


The feeling when you care so much to not break something and then you find out later that the value is not used. PS: It is strange that the R# has not identified these as useless code.



工作中代码审核是非常重要的,我觉得有时候分享这些坑是件很有意义的事情。有一次,有一个PR(代码提交)被2个工程师成功审核了,但是之后发现那个PR带了一些不该带的改动,结果就是那两个评审被惩罚带些吃的(甜甜圈)给大家分享。


每次你都很小心,生怕把功能给改错了(即使有少量的单元测试,但是你还是不放心), 后来你发现,这代码绝B是个坑,浪费了你大好的时间,结果这变量声明了根本就没有用到..


很奇怪的是, 像 Resharper这样的代码质量工具竟然没有把无用的代码给标灰。。。



 Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.  


// 已同步到我的中文博客英文博客。 



 近期热贴 Recent Popular Posts 




This page is synchronized from the post: [Code Review Series] - Value Not Used [坑爹的代码] - 变量未使用

别让SteemIt毁了你原本的生活 (新老用户都应该看一看) Don’t Let SteemIt Ruin Your Life!


 一个月前, 我的生活可不是现在这样, 周末陪孩子的时候是轻松的而不是像今天还会想着刷SteemIt 看看自己的帖子点赞有没有多, 和微信群的Steemians天南地北的聊. 



 Checking SteemIt on Weekend


至从HF19后 收益增多了, 大家一拥而上, 加入cn组织的朋友是一天比一天多, 自我介绍贴, 旅游贴, 各种 give-away 贴, 各种理程杯贴(什么 100个粉丝 500个粉丝 1000个粉丝 逢5, 10就来个贴), 还有搞活动的, 晒照片的, 各种机器人 只有想不到没有做不到. 但这还是个大鱼吃小鱼的残酷世界, 刚加入的新人newbie, 没有大鱼照顾着, 花了几个小时认真写的有内涵有深度的帖子很有可能石沉大海, 而大牛随便发个照片或视频, 上千个粉丝纷纷点赞(少则几百元多则上千元收入) 


 没有针对谁, 但是这并不是很好的势头: 你花了很多时间在阅读大量无营养但收入颇高的帖子, 各种算计如何upvote才能有高的收益(curation), 然后你绞尽脑汁各种小技俩抱大腿:各种在大牛帖子下发言 各种群转发帖子 AT大神 各种交换点赞 (steemfollower) 各种称赞拍手叫好, 各种使用机器人顶贴, 各种租贷SP, 为了就是要提高暴光率 提高点赞数 提高收入 提高SP 进而迎娶白富美走向人生巅峰. 然而你渐渐的不愿意满足每篇贴子几十美元了, 你的味口慢慢的变大了, 每天你越来越多时间花在 steem 上, 甚至影响到你的工作和生活. 


 有一天, 你开始意识到你是不是在浪费时间, 或者你会安慰自己说, 花的时间都是碎片时间 用于玩 SteemIt 正正好, 也许你还会说 能借此锻炼自己的写作能力, 你也许还会说 这真是个交友的好平台 还有其它种种好处, 但是如果收益很少甚至没有, 扪心自问, 你还愿意花一样多的时间在这平台上么? 


 一个公司最根本的目的就是赢利挣钱, 有钱之后才能谈其它的目的: 为员工谋求福利, 造福社会等. 写文章为了挣钱没毛病, 问题是不应该在我们这个年纪花太多的时间. 我一朋友在国内年薪200万, 他后悔这么忙䘵 钱是挣到了, 但是却失去了很多陪伴孩子成长的精彩瞬间


 人在一生中本应该在恰当的时间做恰当的事情. 孩子这时候正需要你的陪伴, 别等到你钱也挣了 孩子也大了. 


 Family First, Work Next. 因为家庭生活无可取代, 而工作总是还会有的, 钱也总是能再挣到的.


共勉.  Don’t Let SteemIt Ruin Your Life!



 Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.  // 已同步到我的中文博客  



 近期热贴 Recent Popular Posts 




This page is synchronized from the post: 别让SteemIt毁了你原本的生活 (新老用户都应该看一看) Don’t Let SteemIt Ruin Your Life!

Technically Images can be Stored on BlockChain 差一点 SteemIt 就可以把图片也存在区块链上了


As you probably know, the SteemIt stores the images on AWS cloud servers. This is different from the texts (post content), which are stored in block-chain (e.g. lots of peer-to-peer nodes storing duplicate and immutable) contents.


也许你知道,STEEM上文字是放在区块链上而 STEEM的图片是单独放在AWS云服务器上的。我就突然想到,其实图片也是可以通过BASE64格式把二进制的内容编码成纯文本的BASE64格式。


This is fine.. but I suddenly realized that the images can be embeded in HTML text as well, so instead of giving a actual URL for image for example,



比如你原来这样在HTML中添加图片:



Yes, as you can see, the image content (binary) is converted into BASE64-format, which is a pure text format. 


这样的话, 图片就和文字混在一起了 。


So, let’s try to do this!


Step 1: Convert Images to BASE64-text string, you can use this online API I created years ago (remember to replace the image URL):


我想试验一下,就用N年前写的API来转换图片 (记得把图片改成你的图片地址)


https://helloacm.com/api/image-to-base64/?url=https://justyy.com/gif/dr.zhihua.lai/13.gif


Copy the base64-encoded image and place it at:


把内容拷到插入图片的文本框中。



As you can see, the image appears in the text-editor, but when you click POST, it actually fails (image cannot save). The message is to say that this particular image cannot be uploaded to AWS server (but, why you want to do that, steemit, e.g. I have already embeded the image …)


图片可以显示,但是发表却失败了。



So, I am guessing: either this is a BUG which can be easily fixed by the developers, or it is by design, because the images are generally big and by using BASE64-encoded, the image size grows 1/3 e.g. 3MB to 4MB.


What do you think?  Please re-steem for more visibility.  


我猜想两种可能:要么这是一个BUG,可以很轻易的被修复,要么就是设计就是这样,因为可能图片本来就很大,用了BASE64文字编码后大小会增加1/3。。。


您认为呢?不管怎么样:差一点 SteemIt 就可以把图片也存在区块链上了!



 Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.  


// 已同步到我的中文博客 英文算法博客。   



近期热贴 Recent Popular Posts 




This page is synchronized from the post: Technically Images can be Stored on BlockChain 差一点 SteemIt 就可以把图片也存在区块链上了

[机器学习] 用 MySQL 来演示 KNN算法 The K Nearest Neighbor Algorithm (Prediction) Demonstration by MySQL


机器学习这几年越来越火, 特别是相关算法五花八门, 但最有名的就那么几种, 而在这几种中, 要数KNN算法最为简单, 高效并且有鲁棒性 (Robustness). 


我们先来看一问题: 已知正方形和三角形的归类, 请问绿色的圆是属于三角还是属于正方形? 


The K Nearest Neighbor (KNN) Algorithm is well known by its simplicity and robustness in the domain of data mining and machine learning. It is actually a method based on the statistics. It can be easily described as the following diagram. 



// Image credited


Known blue squares and red triangles, you are asked to predict if the green circle belongs to the squares or the triangles. If we choose K=3, then the minimal distances (closest) to the green circle are 2 triangles and 1 square, therefore, the circle belongs to the triangles. However, if we choose K=5, then we have 3 squares and 2 triangles, which will vote the cirlce to the squares group. 


 这里的KNN 指的是 K-nearest neighbour 翻译过来就是 K个最近的邻居, 如果我们指定K=3, 那么和绿色圆最近的是2个三角形和1个正方形, 所以按多数为主的标准, 我们预测这个圆属于三角, 相反, 如果K=5的情况, 和圆最近的有3个正方形和2个三角形, 这时候我们就按多数投正方形.  


用 MYSQL 来演示 KNN算法  USING KNN AS PREDICTION ALGORITHM DEMONSTRATION BY MYSQL


我们先创建一个表含有两个字段x和y, 


 By the similar principle, KNN can be used to make predictions by averaging (or with weights by distance) the closest candidates. For example, if we have the following data (MySQL table test1):  


mysql> select * from test1;

+——+——+

| x    | y    |

+——+——+

|    1 |   23 |

|  1.2 |   17 |

|  3.2 |   12 |

|    4 |   27 |

|  5.1 |    8 |

+——+——+

5 rows in set (0.04 sec)

 假设已知一个新点x=6.5, 我们想通过KNN (K=2)来预测y的值, 那么我们可以通过以下SQL语句来查找和6.5最近的两个点: 


 We want to predict when x=6.5, the value of y. First of all, for simplicity, we choose K=2, we need to find two points that have the shortest distance to 6.5, so the SQL will be:  


mysql> select x,y from test1 order by abs(6.5-x) limit 2;

+——+——+

| x    | y    |

+——+——+

|  5.1 |    8 |

|    4 |   27 |

+——+——+

2 rows in set (0.00 sec)

 然后需要做的就是平均这两个点的y值, 用一个嵌套SQL语句就可以了: 


 Now, the task is just to average their corresponding y values. So using a nested SQL statement is trivial:  


mysql> select avg(y) as predicted from (select y from test1 order by abs(6.5-x) limit 2) as KNN;

+———–+

| predicted |

+———–+

|      17.5 |

+———–+

1 row in set (0.00 sec)

 KNN算法简单 但是有一个很大的问题是这个算法是属于 lazy 算法, 意思是拿到数据 (training set) 后并不是马上训练(甚至是并没有训练这个过程)而是等需要预测的时候实时去找最近的K个邻居, 所以当数据量大的时候 效率就比较低了. 


 KNN is lazy, meaning that it does not train dataset immediately (actually there is no training). When the input is given to the KNN model, it will look for K nearest neighbours at real time, which is slow and inefficient if the dataset is large. 



Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.    // 已同步到我的中文博客 英文算法博客。 



近期热贴 Recent Popular Posts 




This page is synchronized from the post: [机器学习] 用 MySQL 来演示 KNN算法 The K Nearest Neighbor Algorithm (Prediction) Demonstration by MySQL

The Fox 英式午餐


 Bar Hill 距离家里开车7分钟, 很近, 媳妇每天就是到那里去上班, 很久之前她告诉我说超市边上有一个英式酒巴 The Fox, 看起来不错; 于是趁着孩子们都上学我和媳妇 @happyukgo 就过去尝尝了. 


 英国的酒巴食物其实在哪儿都差不多, 无非那几样, 鱼肉薯条, 鸡肉薯条, 牛排薯条, 英式早餐带薯条, 反正薯条就是英国人的主食, 啥菜加个薯条来杯饮料就是一道餐了. 


 早餐无限 4.29的招牌在公路边上很醒目 



 The Fox 酒巴 无限早餐 4.29英镑 


 SteemIt 微信群里在讨论怎么追女孩的绝招, 其实很简单: 胆大心细脸皮厚, 没事送个花送个小礼物什么的. 



 一样小礼物就能哄得很开心 



 酒巴正门 



 酒巴门口免费停车 



 The Fox 酒巴


2份才10英镑, 好便宜, 要是在村口的酒巴大概一份就得10英镑左右了. 英国酒巴餐卖相不怎么样, 但是当你肚子饿的时候绝对管不了那么多. 英国人没啥吃的也是经常被吐槽的. 



 英国最有名的鱼肉薯条和 Gammon Steak 


Gammon Steak 就是猪肘子切片 熏过的 有点咸



Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.    


// 已同步到我的中文博客。 



 近期热贴 Recent Popular Posts 




This page is synchronized from the post: The Fox 英式午餐

如果大家要是一直生一直生直到生到女儿, 岂不是男女比例失调啊?


一直想要个女儿. @happyukgo 可是条件不允许, 至少是暂时的吧. 


 然后就有这么一个问题: 如果大家要是一直生一直生直到生到女儿, 生到女儿就不生了, 这样大概来说男孩女孩比例还是 1:1 么? 



 如果生男孩是B, 生女孩是G, 只生一个大家都知道是50%的概率(染色体XX和XY结合 各50%的概率生男孩或生女孩). 如果一直生直到生女孩 这序列就是: 


 G, BG, BBG, BBBG, ….


关键来了, 好像男孩B比较多, 我们用P(B)表示生男孩的概率, P(G)表示生女孩的概率, P(BG) 表示生一男一女的概率 .. 


还没生的时候, 再生一女孩 P(B)的总概率是1/2, 概率乘于男孩个数 = 0 


当生一男孩后, 再生一女孩 P(BG)的总概率是1/4 (剩下50% 再乘于50%), 概率乘于男孩个数 = 1/4 


当生二男孩后, 再生一女孩 P(BBG)的总概率是1/8 (剩下25% 再乘于50%), 概率乘于男孩个数 = 2/8 


 当生三男孩后, 再生一女孩 P(BBBG)的总概率是1/16 (剩下25% 再乘于50%), 概率乘于男孩个数 = 3/16

以此类推:

概率乘于男孩个数 = i/(2^(i+1))


 把这些相加:  



 当 i 趋近于无穷大的时候 这值约为 1. 也就是说每个家庭生男孩子平均值为1 而我们知道每个家庭生女孩个数为1 所以男女比例50%:50%.


如果你还是有点不信 那么我们用程序来仿真一下吧:  (STEEM贴代码真是很难用啊, 最后面无奈只能发图片)



 当 N 越来越大 这比例是越来越接近 1 所以生男生女都一样… 哎哎 真是羡慕 @tumutanzi 



 Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.


原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy  能激励我创作更多更好的内容.   


 // 已同步到我的英文算法博客中文博客。 



 近期热贴 Recent Popular Posts 




This page is synchronized from the post: 如果大家要是一直生一直生直到生到女儿, 岂不是男女比例失调啊?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×