Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Article Collection(聚宝收藏)

2019-11-13
13 November
On November 13, 2019
In Article Collection(聚宝收藏)

科技公司的技术博客清单

最近在网上搜寻了下各大科技公司的技术博客,来寻找自己写作的素材和灵感,也借鉴一下格式和内容。于是发现大公司除了有宣传本家产品的网站,基本还有一个宣扬自身技术的博客站点。博客的内容可能不同,但基本都是围绕工程师的工作体验和技术分享。

公司设立技术博客的价值可能无法用数字去量化,但是它对技术社区的贡献肯定是很大的。对于公司本身,技术博客可以吸引更多对于技术有兴趣的人来加入公司;它可以让更多人了解公司技术栈从而减少新人招募后的培训成本;它可以接受外部对技术的建议和评价来提供更多选择和提升;它可以帮助工程师提高对外的个人形象进而变得更有归属感。

Facebook Family

先来看看自家公司技术博客,因为多个产品在不同事业部下,基本都有自己的技术博客站点,但是最大的还是主站。

  • Facebook: https://engineering.fb.com/
  • Oculus: https://developer.oculus.com/blog/
  • Instagram: https://instagram-engineering.com/
  • Facebook Messenger: https://blog.messengerdevelopers.com/

Medium.com Based

Medium.com是个博客发布平台,对于没有太多人力资源的中小型公司来说,把技术博客放在上边可以减少维护成本,也能获得更好的分发和推广。

  • Groupon: https://medium.com/groupon-eng
  • Yammer: https://medium.com/@YammerEng
  • Airbnb: https://medium.com/airbnb-engineering
  • Apollo: https://blog.apollographql.com/engine/home
  • Medium: https://medium.engineering/
  • Pinterest: https://medium.com/@Pinterest_Engineering
  • Cookpad: https://sourcediving.com/
  • Google: https://medium.com/google-developers
  • Netflix: https://medium.com/netflix-techblog
  • Doordash: https://blog.doordash.com/tagged/engineering
  • NextDoor: https://engblog.nextdoor.com/
  • Instacart: https://tech.instacart.com/

Hosted

当然,自己建立站点可以达到更好的个性化,也可以基于业务的扩张来做好分类。

  • Twitter: https://blog.twitter.com/engineering/en_us.html
  • Uber: https://eng.uber.com/
  • Slack: https://slack.engineering/
  • LinkedIn https://engineering.linkedin.com/
  • MicroSoft: https://engineering.microsoft.com/
  • Amazon: https://developer.amazon.com/blogs
  • Amazon AWS: https://aws.amazon.com/blogs/
  • Square: https://developer.squareup.com/blog/
  • Dropbox: https://blogs.dropbox.com/tech/
  • Booking.com: https://blog.booking.com/
  • Spotify: https://labs.spotify.com/
  • Yelp: https://engineeringblog.yelp.com/
  • Feedly: https://blog.feedly.com/
  • Zillow: https://www.zillow.com/tech/
  • Zynga:https://www.zynga.com/blogs/engineering
  • Reddit: https://redditblog.com/
  • Evernote: https://evernote.com/blog/category/tech/

Google

Google是个极大的例外,他们有太多太多核心技术产品,也让他们针对每个产品都针对性的技术博客。

  • https://youtube-eng.googleblog.com/
  • https://testing.googleblog.com/
  • https://android-developers.googleblog.com/
  • https://blogger.googleblog.com/
  • https://webmasters.googleblog.com/
  • https://gsuiteupdates.googleblog.com/

China

国内的科技公司似乎对技术博客不太感冒,我找了很久也只挖出寥寥数个。也许国内开始偏向使用微信公众号来做分享,比如“腾讯技术工程”和“阿里技术”。但我还是没有发现几个科技公司官方的技术型公众号。

  • 美团技术团队: https://tech.meituan.com/
  • 360: http://blogs.360.cn/
  • 阿里中间件:http://jm.taobao.org/
  • 百度 research http://research.baidu.com/Blog
  • 百度 EFE https://efe.baidu.com/
  • 阿里技术 https://102.alibaba.com/

Twitter Accounts

除了技术博客,对于比较简短的公告通知或者技术消息,大多技术公司会使用Twitter来发布。(我不是微博的用户,所以没有去找国内科技公司在微博上的账号,但是个人感觉微博偏向娱乐性,而非宣传技术的的地方。)

  • Facebook: https://twitter.com/fb_engineering
  • Instagram: https://twitter.com/instagrameng
  • Square: https://twitter.com/squareeng
  • Twitter: https://twitter.com/TwitterEng
  • AWS: https://twitter.com/awscloud
  • Android Developers: https://twitter.com/AndroidDev
  • Android: https://twitter.com/Android
  • Android Studio: https://twitter.com/androidstudio

 

最后,在我搜索这些资源的时候,Jeff Barr(AWS的布道者,也是AWS官方博客的创建者)恰巧发布了关于他自己15年来为AWS写博客的体会。在这边文章中可以找到他发的第一篇如同“Hello World”的文章是如此的简洁平淡,但是15后去看却又那么的回味十足。文章的后半部分,他分享的写作计划和想法也给予了我最好的启发和指导。

 

References:
  1. 50家硅谷IT公司技术博客-吐槽篇_36氪
  2. 国内各大互联网公司相关技术博客3.0版 (集合腾讯、阿里、百度、搜狐、新浪、网易、360等共29个) – carrotsss – CSDN博客
  3. 一系列国内外顶尖互联网公司的技术博客,晋升程序员必备! – 哔哩哔哩
  4. Best Company Engineering Blogs on Medium
  5. sumodirjo/engineering-blogs: A curated list of engineering blogs of startup and enterprise companies
2017-06-07
07 June
On June 7, 2017
In Article Collection(聚宝收藏), Language Tips(语言初试)

Intellij的PSI Viewer工具

前阵子研究了一下怎么创建自定义的Intellij的Plugin和Android的Lint Rule,惊喜地发现它们有一个共同点就是都用PSI (Program Structure Interface)来呈现代码结构。因此很容易重用部分代码来将某个需求通过Plugin和Lint Rule来实现。

可惜关于PSI的文档十分稀少,所以本来就来讨论Intellij中查看PSI结构的工具来更多得在代码实现中读取和操作PSI对象。

Intellij PSI Viewer

Intellij内置了PSI Viewer,可以从Tools菜单下找到相应的选项来打开窗口,如果当前激活的Intellij窗口是文件编辑窗口还能看到选项直接常看当前文件的PSI结构:

打开PSI Viewer窗口,可以看到如下的视图进行PSI结构查阅,当鼠标指针在文件中移动时,对应的PSI结构也会被加亮来表示它属于哪个类型。这样在代码中就可以知道应该给PsiTreeUtil.getChildrenOfType()传什么参数了,或者在强制转换时应该用什么类型。

Read More →

2017-05-08
08 May
On May 8, 2017
In Article Collection(聚宝收藏), Reading Notes(阅而后知)

The Pragmatic Programmer

前阵子看完了《The Pragmatic Programmer: From Journeyman to Master》,虽然该书是1999年发行的,也没有新版本出来,但读了之后还是感觉受益良多。

先说说不够好的方面。程序开发方面的知识和技术变化非常快,书中知识点可能都没跟上时代的脚步,比如介绍版本控制(Source Control)时就没有提高当前最流行的Git。书中也没有讲到怎么利用社交媒体来提升自身的价值。书里的知识点有些缺乏足够的案列来介绍具体该如何操作,只有对于有相关经验的开发者才能体会到书里表述的信息。所以书里讲得虽然好,还是需要更多的实践去累计其经验。

当然好的方面远远多很多。书里的知识是经过了作者数十年的经验累积总结下来的,这么多年里也获得了众人的认可。书中涵盖的软件开发方面的内容非常的广泛,从如何开始开发,怎么开发,到之后如何协作维护,最后文档总结归纳都有介绍。很多书里的告诫都让我找到了现实中不合理的依据:比如“Don’t Live with Broken Windows”让我明白为什么大家不喜欢写单元测试,就是因为我们项目本身没有多少单元测试, 而我也应该去“Fix the Problem, Not the Blame”,并且要“Be a Catalyst for Change”来测试组里的人去参与到自动化测试中。书中很多知识都可以在现在继续实践,比如书中“Domain Language”一节里就介绍了Backus–Naur form(BNF),让我意识到用很多时候对于问题需求和结论的描述,其实可以用这种结构化的语言来描绘会清晰很多。回想其实SQL语言查询语句的规格,还有Java语言的规格就是用这类语言来表述的,可惜之前并不知道它们也是值得学习的一部分。

我无法将整本书向大家完全阐述清楚,还是需要自己去阅读,并结合实际环境和能力来实践。

书中穿插了很多简短的建议,总结在本文以供参阅:
Read More →

2016-07-31
31 July
On July 31, 2016
In Article Collection(聚宝收藏), Knowledge Base(心得笔库), Language Tips(语言初试)

编程术语鉴别-函数篇

常说“隔行如隔山”,每个行业都只有该业内人士才懂的术语。软件行业里也有很多别人听不懂的话,比如有个笑话就说:所有讲不清楚的过程都叫做“算法(Algorithm)”。但其实即使身处在软件行业里,也任然有好多模棱两可的的概念,常常被混淆使用。就让本文来梳理一下这些概念的细微区别。

function vs. method

函数(function)和方法(method)在编程中的概念就很相近,经常被互换着称呼,但它们的区别主要是在定义的位置上。

function是一段通过名字调用的代码,它可以接受数据进行操作,并可能会有返回值。
method是一段通过关联在对象上的名字调用的代码。

从这段解释上看函数和方法基本一致,只是方法是属于对象的一部分,所以在面向对象语言中才有概念。如果是C语句,就只有函数的说法。

方法是附属于对象的,相对于函数可以接受传入参数,对象本身也会作为隐性参数可以在方法中被调用。在返回值方面,方法不仅可以选择返回数据,还可以将数据赋予其所属的对象。

(在我看来,计算机函数的概念应该与数学的“函数”概念是相通的,只是数学上的函数必须要输入和输出。如果考虑到计算机函数的参数的类型,以及异常(Exception)的情况,则感觉与数学的“映射”更接近了。)

References:

  • Difference between a method and a function – Stack Overflow
  • Subroutine – Wikipedia, the free encyclopedia
  • programming practices – Method vs Function vs Procedure – Programmers Stack Exchange

parameter vs. argument

parameter和argument都被翻译成“参数”,它们也经常被混淆。其实很好更精准的翻译应该是“形参(formal parameter)”和“实参(actual argument)”。

parameters是定义函数时定义的那些变量,它们是函数类型识别(type signature)的一部分;
arguments是调用函数时传入到函数中的那些变量,它们是函数的输入值。

这称为也是相对的,比如说下边的例子:
[codesyntax lang=”java” lines=”normal”]

void foo(int x, int y) {
    bar(x, y);
}

[/codesyntax]
x和y对于foo函数来说是形参(parameter),而对于bar来说是实参(argument)。因此也可以说argument是parameter的实例。

References:

  • Parameter (computer programming) – Wikipedia, the free encyclopedia
  • function – “Parameter” vs “Argument” – Stack Overflow
  • language agnostic – Difference between parameter and argument – Stack Overflow

declaration vs. definition

申明(declaration)和定义(definition)这两个概念应该缘起于C/C++,因为写C/C++程序会分头文件(header files)和实现文件(implementation files)。方法和变量的申明部分一般放在头文件,定义部分则在实现文件里。

所以很容易理解

declaration是描述变量、方法、类的类型标识,它没有具体的实现;编译器看到申明部分不会分配内存,而是从其它地方找到其实现的定义。
definition是真正实例化变量,实现方法和类。编译器看到定义部分时就知道如何分配内存,在运行时分配相应大小内存去存放内容。

比如下边这些代码都属于申明:

[codesyntax lang=”cpp” lines=”normal”]

extern int bar;
extern int g(int, int);
double f(int, double); // extern can be omitted for function declarations
class foo; // no extern allowed for type declarations

[/codesyntax]

而下边的代码是对上述“申明”的具体“定义”:

[codesyntax lang=”cpp” lines=”normal”]

int bar;
int g(int lhs, int rhs) {return lhs*rhs;}
double f(int i, double d) {return i+d;}
class foo {};

[/codesyntax]

不严格的说“定义”也包含了“申明”的部分,应该单看定义中变量,方法和类的名字部分,那些可以算是“申明”。

 

在Java中并没有“申明”的概念,所有内容都是“申明”即“定义”。如果实在要说细分“申明”,不严格的讲可以把接口(interface)和抽象方法(abstract method)看做“申明”。但实际中我们还是会说“定义接口”,“定义抽象函数”。

References:

  • c++ – What is the difference between a definition and a declaration? – Stack Overflow
  • What’s the difference between declaring and defining in C and C++ – Cprogramming.com
  • What is the difference between declaration and definition in Java? – Stack Overflow
2016-05-25
25 May
On May 25, 2016
In Article Collection(聚宝收藏), English Posts(英文写作), Reading Notes(阅而后知)

Universal Principles of Design

universal-principles-of-design

As a front-end engineer, or specifically, an Android UI Engineer, I have a lot of time to work with designers. But there are a lot of concepts in design I am not familiar with. So I asked them how I can learn design, but not being a designer. Then they recommended this book to me.

I read it, and feel it’s really helpful and useful. It’s not only about UI design, many principles can apply to other designs as well: software design, landscape design, product design, option design. After read this book, I learned the explanation on how certain design decisions are made.

I would definitely forgot most principles, so I wrote this post to transcribe all principles and short description from the book, later I can just come here to recall them.
Read More →

2016-05-09
09 May
On May 9, 2016
In Article Collection(聚宝收藏), IT Products(数码产品), Knowledge Base(心得笔库)

Android开发中真机和模拟器的体验

做移动开发总是离不开在移动设备上做测试,虽然说Android设备单机可能比iPhone便宜,但是真要各种设备集齐也是不小的开支,再加上要试验不同的Android版本那组合起来又有好多了。所以一般开发者往往只在特定几个设备中做检验。需要测试不同版本也会求助于模拟器(Emulator) 。

Google为Android提供的自带模拟器的效果以前实在惨不忍睹,随着Android Studio 2.0出的模拟器倒是提高了不少,但依然挺糟糕的。
android-avd

大多公司都会购买Genymotion使用,可以创建多种不同版本的模拟器,即使是最新的版本也能很快支持。虽说价格抵上一部真机,却得到好多不同版本和厂商的设备,而且效果优越、功能丰富,真实物超所值。
genymotion

由于某些纠纷,Genymotion默认没有Google Play Services,就无法使用Google的Play Store,Account等等。不过网上也有很多攻略教大家怎将其么安装到Genymotion上,于是都可以在上边打《炉石传说》了。

真机和模拟器各有下边这样那样的缺点:

真实设备 模拟器
  • 价格昂贵
  • 不易携带多个
  • 同一设备不支持多种版本
  • 容易没电
  • 老设备会断货
  • 无SIM卡
  • 无摄像头
  • 不支持推送
  • 多手势不方便
  • 使用习惯不一致

Read More →

2016-04-24
24 April
On April 24, 2016
In Article Collection(聚宝收藏), Front Interface(界面构想)

Chrome插件的Page Action的变化

前阵子更新了一下系统和软件,打开Chrome浏览器发现插件(Chrome Extension)的显示位置变了,原来显示在Omnibox里的Page Action突然跑到了Toolbar上跟Browser Action厮混在了一起。

于是开始在网上搜索原因才发现原来Chrome对插件的按钮显示做了改版(见”Introducing Chrome 48! “,” Upcoming UI Change“,”What happened with pageAction “),将它们都归到了Toolbar上并且可以隐藏到Menu中。

chrome-extension-menu

我以前也一直觉得Browser Action和Page Action是那么的相似,在Browser Action的监听事件中也能获得当前页面的信息,何必要分成两种让开发者做选择呢。现在Google也是有意要将两者归并,甚至可能在未来淘汰其中一个来简化冗余界面对用户造成的困惑。因为在新的设计下,对Page Action进行hide不会像以前那样将图标真的隐藏,而转为变灰表示其不可用。这在但这API显然不能真实反映其效果,很有可能会为了统一而淘汰它们的使用。

另一些变化是即使插件不用Browser Action和Page Action,也会在Toolbar上显示灰色的图标已表示其被安装使用着。这样可以更明显的提醒用户在浏览器上现在都有哪些插件,来防止恶意插件被用户忽略。

Chrome的插件也只能使用Browser Action和Page Action之一,如果在manifest里同时定义了两者,就会得到“Only one of ‘browser_action’, ‘page_action’, and ‘app’ can be specified.”的错误。

哎,以前写的关于Chrome插件开发的文章就这么被过时了,好在基本的结构和方式没有大的变化。

2016-03-31
31 March
On March 31, 2016
In Article Collection(聚宝收藏), IT Products(数码产品), Special Tricks(奇技妙招)

让Mac开口说话

《实用Mac的Dictionary应用程序》已经帮助我们翻译英文单词,提高了阅读的能力,但是“听”和“说”还是大问题。发音要是不标准,念出来给别人听可能还是得不到理解。Mac也想到了这个问题,所以自带了发音程序来,当然机器念出来的英语还是会有不流畅的感觉,有些发音也可能不到位。

在许多原生Mac应用程序中,都很好的集成了发音选项,只要选取想要电脑阅读的段落,然后选择“Start Speaking”就可以听到朗读开始了。
speech-on-page

在System Preference里也可以为Speech设置快捷键,这样无论在哪里选中文字都可以让电脑来阅读:
speech-shortcut
Read More →

2016-02-29
29 February
On February 29, 2016
In Article Collection(聚宝收藏), IT Products(数码产品), Knowledge Base(心得笔库), Special Tricks(奇技妙招)

关闭Mac的不同模式和方法

现在每个公司都为会员工配备工作电脑,但是对电脑的使用也会有诸多的限制和保护,以免公司的重要资料被泄露。其中最基础的一条就是电脑必须要有登录密码,并且当人离开电脑的时候必须要锁定电脑(Lock Screen)防止被别人获取到电脑上的内容。本文就来分享一些快速让电脑进入屏幕锁定状态的技巧和操作。

首先来分一下“关闭”的几个等级,它们从高到低的等级如下:

  • 关闭电脑(Shut down):这个功能只在系统或者软件更新,或者死机时才会用到,其它时候电脑基本不关闭。
  • 登出用户(Log out):公司电脑大多只用一个账户,除了少数应用需要登出后重新登录才能初始化好。
  • 进入睡眠(Sleep):这个功能基本是取代关机功能,大多数情况是因为电脑在一定时间没有操作自动进入了该状态。
  • 关闭屏幕(Display off):只是屏幕没有显示,电脑还在运行,启动屏保也可以算是其中一种。

之后我们主要也是针对最后两种等级来讨论。

让Mac笔记本电脑进入睡眠方式最直接的方法自然是合上电脑。而其他关闭状态则可以从Mac的苹果菜单栏( Menu)下选择相应的选项。
menu

当按住Option键时选项中的…会消失,此时点中选项系统不会弹出确认框,直接执行选定的操作。
Read More →

2016-01-20
20 January
On January 20, 2016
In Article Collection(聚宝收藏), IT Products(数码产品)

一些实用的在线课程的网站

现在的学习已经不仅仅局限于课堂之上,也不光来自于工作之中,借着在线教育网站(Massive open online course, MOOC)的崛起,越来越多的人通过在线学习了补充自身的知识,提高各个方面的能力。之前分享过《一些视频教程网站推荐》,这里再分享一些非常有用的提供在线课程的网站,可以在上下班路上或者平时休息时播放观看。

Udacity

Udacity

Udacity主要是编程开发技术类的在线课程,而且这些课程的由诸如Google、Facebook这些大公司提供,所以质量也很高。这些视频大部分需要付费才能观看,但也有很多免费又值得学习的内容。我个人在上边获得了很多关于Android开发方面的能力提升。

对于付费用户,网站还会在完成某些课程内容后提供“Nanodegree”的荣誉来证明对某项知识已被掌握。

Udemy

Udemy

Udemy上的视频教程包罗万象,对于不满足于一个领域的知识的人,可以在上边了解其他领域的基础知识,比如房产投资,股票交易。

同样的,网站的大部分课程的需要付费,而且价格还不低,但是一些免费课程也非常的受欢迎。另外很多课程每节视频的长度都较短,所以很容易快速完成一节课程的学习。
Read More →

Posts pagination

1 2 3 Next
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.