30 Linux Kernel Developers in 30 Weeks: Thomas Gleixner

原文:30 Linux Kernel Developers in 30 Weeks: Thomas Gleixner

This is the second in our 30-week series that profiles a different Linux kernel developer each week. Last week we debuted the series with Linus Torvalds. The profiles we publish throughout the rest of 2012 should help illustrate how these developers do their work, providing important insight on how to work with them and what makes them tick.

这个30周30位Linux内核开发者介绍的第二期。上周我们采访了Linus Toravalds。在2012年余下时间中发表的这些文章将告诉大家他们是如何工作的,怎样与他们协同工作以及他们成功的原因。

Name

名字

Thomas Gleixner, nickname: tglx

Thomas Gleixner, 昵称: tglx

What role do you play in the community and/or what subsystem(s) do you work on?

你在社区中扮演什么觉得以及维护哪部分?

Quite a few people consider me to be one of the Grumpy Old Men. That’s related to my age and the age-related unwillingness to cope with crap.

很多人认为我是脾气暴躁的老人家。这涉及到我的年纪,但和年纪一丁点关系都没有。

As a maintainer I’m responsible for the core infrastructure of timers, timekeeping and interrupt handling. I’m part of the x86 architecture maintainer team and I’m the maintainer and main developer of the real time preemption patch. Aside of that I have a strong affinity for mission impossible and tree wide code cleanups.

作为一个维护人员,我主要负责定时器的核心基础,时间记录器以及终端处理。我是x86架构维护组成员,实时抢占补丁的开发和维护者。除此之外,我喜欢一些高难度任务,以及内核树清理工作。

Where do you get your paycheck?

你的收入来源?

From my own company, which gets part of it refunded by contracts with Red Hat and others interested in my work.

来自我的公司,其中一部分是红帽子的合约,其他的是我的工作。

What part of the world do you live in? Why there?

你在哪生活?为什么?

Germany. It’s my home, why should I live anywhere else?

德国。这里是我的家,我不可能去其他地方。

What are your favorite productivity tools for software development?

你最喜欢的软件开发工具是什么?

Command line tools. Don’t try to involve me into Emacs vs. VI discussions and don’t ask me about GUI tools :)

命令行工具。不要让我陷入Emacs与VI论战,也不要问一些GUI工具。:)

What do you run on your desktop?

你通常使用什么工具?

Changing flavors of Linux distributions. My desktop requirements are rather low: Manage a gazillion of terminals, run a graphical browser and occasionally fire up some unavoidable GUI applications.

修改Linux分发包的特性。我对桌面要求很低:管理一个图形终端,运行一个界面浏览器,偶尔修改一些负责的GUI应用程序。

I’m desperately trying to avoid the new fangled app driven “desktops,” which insist on knowing better than I how to manage my workflow efficiently.

我尽可能的避免在桌面中运行新的应用程序,

How did you get involved in Linux kernel development?

你是如何进入到Linux内核开发的?

Curiosity.

好奇心使然。

What keeps you interested in it?

什么让你一如既往干这事?

The fun of it. Working with smart people all over the world.

这是件有意思的工作。同时也可以和全世界最聪明的人一起工作。

Image: LinuxCon Europe, Gleixner second from right

图片: 欧洲Linux会议,Gleixner在右边第二个

What’s the most amused you’ve ever been by the collaborative development process (flame war, silly code submission, amazing accomplishment)?

在协作开发过程中你觉得最好玩的是什么?(嘴仗,愚蠢代码提交,惊人的成就)?

That’s a tough question. I have my favorites in all categories, but as far as silliness, this is my favorite one:

这是一个很难回答的问题。我喜欢所有的模块,但我觉得最傻的是下面这个:

  • d->core_internal_state__do_not_mess_with_it |= SOME_CONSTANT;
  • d->core_internal_state__do_not_mess_with_it |= SOME_CONSTANT;

See http://www.spinics.net/lists/linux-tip-commits/msg11099.html

参考 http://www.spinics.net/lists/linux-tip-commits/msg11099.html

What’s your advice for developers who want to get involved?

你对想进入该领域的开发者有什么建议?

Find your area of interest, and start tackling problems which are affecting you.

找到你感兴趣的领域,然后解决对你有帮助的问题。

What do you listen to when you code?

你最编码时都听些什么?

To the thoughts drifting through my brain.

What mailing list or IRC channel will people find you hanging out at? What conference(s)?

在那些邮件列表或IRC频道可以找到你?会议呢?

Mailing lists: Mostly LKML (Linux Kernel Mailing List)
IRC channels : My nick is unique
Conferences : Too many

邮件列表: 基本上是LKML(Linux内核列表)
IRC频道: 我的昵称是 unique
会议: 太多了

Thanks to Thomas for participating in 30 Linux Kernel Developers in 30 Weeks. Next week, we talk to Sarah Sharp.

谢谢Thomas参加30周30位Linux内核开发者。下周我们将对话Sarah Sharp。

30 Linux Kernel Developers in 30 Weeks: Sarah Sharp

原文 30 Linux Kernel Developers in 30 Weeks: Sarah Sharp

This is the third profile in our 30-week series that features a different Linux kernel developer each week. Last week we featured Thomas Gleixner, after beginning the series with Linus Torvalds. The profiles we publish throughout the rest of 2012 will help illustrate how these developers do their work, providing important insight on how to work with them and what makes them tick.

这是30周30位Linux内核开发者系列的第三期。上周我们在首期的Linus Torvalds专访后介绍了Thomas Gleixner。在2012年余下时间中发表的这些文章将告诉大家他们是如何工作的,怎样与他们协同工作以及他们成功的原因。

Name

姓名

Sarah Sharp

Sarah Sharp

What role do you play in the community and/or what subsystem(s) do you work on?

你最社区中扮演什么角色或者负责哪个子系统的开发?

I’m the Linux kernel xHCI driver maintainer. I own Linux USB 3.0 support, and I send my patches up to Greg Kroah-Hartman, who is the USB subsystem maintainer.

我是Linux内核模块xHCI驱动的维护者。我负责Linux USB 3.0的开发支持,我会把补丁包提交给USB子系统维护者Grep Kroah-Hartman。

Where do you get your paycheck?

你的收入来源?

I work in Intel’s Open Source Technology Center, along with a bunch of other cool Linux kernel developers.

我在英特尔开源技术中心和一群很酷的Linux内核开发者一起工作,

What part of the world do you live in? Why there?

你在哪里生活?为什么?

I live in Portland, Oregon. There’s a reason why we say, “Keep Portland Weird”. We have everything from Voodoo Donuts to mini-bike-riding “Zoo Bombers” to Powell’s, which is America’s largest book store. Portland is also really friendly to open source development. It’s home to OSCON (Open Source Convention), and there’s this great cross-pollination between Linux users and the bicycle community. The electronics maker community is pretty strong in Portland, too. Check out a Dorkbot meeting when you’re in town, or hang out with cool techie women at Code N Splode.

我居住在俄勒冈州的波特兰。原因之一是“神奇的波特兰”。 波特兰是开源发展的朋友。是OSCON的故乡,同时是Linux用户群和车友相互交流的地方。电子产业在波特兰也很牛。???

What are your favorite productivity tools for software development? What do you run on your desktop?

你最喜欢的软件开发工具是什么?你一般用什么工具?

Um, I’m pretty much a vim and mutt person. Software development is all text for me. As for what I run on my desktop, it’s Linux, of course. :) I run either Debian or Ubuntu on my boxes, and try to do all my work in Linux.

我比较中意vim和mutt.软件开发都是文本化的。当然我的桌面系统是Linux。不是Debian就是Ubuntu,我所有的工作都是在Linux下进行的。

How did you get involved in Linux kernel development?

你是如何参与到Linux内核开发中的?

My computer science professor, Bart Massey, was approached by Greg Kroah-Hartman, who was looking for a student to do a Linux USB project. Bart thought I would be a great fit, and was my faculty advisor for the “usbfs2” project. I worked on usbfs2 for Portland State University senior elective credits, and later as a paid project under the Intel Undergraduate Research Program.

我的计算机科学教授Bart Massey,和Greg Kroah-Hartman比较熟,他当时在找人做Linux USB项目。Bart认为我很合适,可以胜任“usbfs2”项目。usbfs2开始是我的波特兰州立大学高级选修课项目,后来变成英特尔大学生研究计划下的一个项目。

It was pretty nerve-racking to send my first patchset out, but my then-boyfriend-now-husband encouraged me to actually hit send. The Linux USB community was a pretty good place to start doing kernel development, and the people on the mailing list were patient about answering my newbie questions.

我第一次提交补丁包的时候非常的紧张,但我的男友-现在是丈夫鼓励我发送出。Linux USB社区是一个开始内核开发的好地方,邮件列表上的人都很耐心地回答我这个信守的问题。

A couple months before I graduated, I proposed a talk on my usbfs2 project for OSCON 2007. Kristen Accardi was on the OSCON selection committee, and remembered me from some Portland Linux gatherings I had been to. She knew that Intel’s Open Source Technology Center was looking for a Linux USB developer, so she got me an interview with OTC. I’ve been working for OTC for the past five years now, continuing my work on the Linux USB subsystem.

在毕业前几个月,我在2007年度的OSCON上做了usbfs2的演讲。OSCON选举委员会的Kristen Accardi看到我来自波特兰Linux群。她知道英特尔的开源技术中心正在招聘Linux USB开发员,所以她给我一个面试机会。我研究在英特尔开源技术中心做了5年的Linux USB子系统开发。

I wouldn’t be a Linux kernel developer today without the contacts I created by networking with other developers at conferences and tech events.

如果没有集会和技术论坛的其他开发者的交流帮助,我不可能成为一个Linux内核开发者。

What keeps you interested in it?

是什么让你兴趣不减?

The people keep me coming back. I really love learning and discussing new ideas with the Linux kernel community, and my Intel co-workers. Sure, there’s some heated discussions every once in a while, but most developers are friendly enough to take the time and answer any questions I have.

我喜欢和Linux内核论坛以及我的英特尔同事,一起学习、讨论新的想法。确实,时常会有一些激烈的讨论,但大多数开发者都是很友好的花时间回答我的任何问题。

What’s the most amused you’ve ever been by the collaborative development process (flame war, silly code submission, amazing accomplishment)?

在协作开发过程中你觉得好玩的是什么?(嘴仗,愚蠢代码的提交,惊人的成就)?

I’ve certainly amused Greg KH in the past with my pull request descriptions. Here’s an excerpt from a reply he sent me:

我觉得最搞的是Greg KH对我非常愚蠢的请求的回应。这里是回信的片段:

Date: Thu, 26 May 2011 00:04:50 -0700
From: Greg KH
To: Sarah Sharp
Cc: linux-usb@vger.kernel.org
Subject: Re: [RFC 0/3] xhci: Remove useless debugging

On Wed, May 25, 2011 at 04:28:51PM -0700, Sarah Sharp wrote:
The xHCI driver is what, two years old now? It’s high time it put on
its big girl pants and stop crapping out useless debugging information.

you now owe me a wet-wipe to clean my laptop up from the coffee i just
snorted out my nose all over it.

2011年5月25日,星期三,早上04:28:51,Sarah Sharp写道:
xHCI驱动两年了?是时候

你现在欠我一条湿纸巾

What’s your advice for developers who want to get involved?

对想进入该领域的开发者你有什么建议?

Find a medium-sized project, in a part of the Linux kernel community that has a responsive mailing list. Don’t waste your time on a bunch of spelling fix patches. A couple bug fix patches should be enough to get you used to the patch submission process, but at some point you need to move on and start making useful, bigger, contributions to the kernel.

找一个中等的项目,在linux内核社区中有很好的邮件列表。别浪费时间在拼写错误的补丁包上。

Find a mentor. It doesn’t have to be someone who is a Linux subsystem maintainer. It should be someone who knows git basics, can review your code, and help you set up a mail client so you can send patches. Team up with a friend to do joint code review and try to figure out a Linux kernel subsystem together.

找一个有经验的人。不一定非要是Linux子系统的维护者。只要这个人知道基本的git用法,可以review你的代码,以及可以帮助你配置提交补丁包的邮件客户端。和你的朋友进行互相code review的关系,并且一起尝试进行Linux内核子系统的学习。

What do you listen to when you code?

在编码的时候你都听些什么?

I can’t concentrate on coding when I listen to vocals, so I tend to lean towards electronica, break beats, or classical movie sound tracks. I usually listen to Daft Punk, Justice, Hans Zimmer, and Klaus Badelt.

太吵闹的音乐我是无法集中精神编码的,所以我倾向于电子音乐,慢节拍,古典电影的插曲。我常听Daft Punk, Justice, Hans Zimmer, and Klaus Badelt。

What mailing list or IRC channel will people find you hanging out at? What conference(s)?

在哪些邮件列表或IRC频道可以找到你?会议呢?

I’m on the linux-usb@vger.kernel.org mailing list. As for conferences, I go to OSCON, Open Source Bridge, LinuxCon America, Linux Plumbers Conf, Linux Kernel Summit, and Linux Conf Australia. This year, I’ll also be at AdaCamp D.C., representing women in open source.

我在linux-usb@vger.kernel.org邮件列表。会议的话,我会参加OSCON, 开源Bridge,美国Linux会议,Linux Plumbers Conf, Linux内核峰会以及澳大利亚Linux会议。今年我将代表开源中的女性参加华盛顿的AdaCamp。

use irc

xchat

yum install xchat -y

freenode

/join #ubuntu

/join #fedora

/close

Irssi

/server irc.freenode.net

/nick your.nick

/join #ubuntu

Ctrl+n/p switch channel

30 Linux Kernel Developers in 30 Weeks: Paul McKenney

原文: 30-linux-kernel-developers-in-30-weeks-paul-mckenney

Today we celebrate the completion of our 30 Linux Kernel Developers in 30 Weeks series. We’ve talked to 30 of the world’s best developers over the last eight months in an effort to learn more about how the world’s largest collaborative development project works. We’ve also learned a lot of details about what makes these amazing people tick and what advice they have for people who want to get involved.

今天可以庆祝30周30位Linux内核开发者系列文章顺产了。我们花了8个月时间采访了这个星球上最好的30位开发者,很好地了解了最大协作开发项目是如何运作的。同时也知道了是什么让这些牛人牛起来,以及他们对想入门的内核开发者的建议。

Today we talk to Paul McKenney, who says his kernel development addicition is funded by IBM. He explains why he uses Vi and how Alexey Kuznetsov prompted Paul’s first experience with Linux - and not in the way you might think.

今天采访了Paul Mckenney,IBM使他走上了内核开发的道路。他将回答为何使用Vi,以及Alexey Kuznetsov爆料Paul第一次使用Linux的经历-出乎你的意料。

Enjoy the last post in this series and stay tuned: We have a new series in the works that we hope to debut in February. I also want to give a big thanks to everyone who participated in this series.

尽情享受这一系列的最后一篇文章,也敬请关注:即将在2月份发布的新的系列作品。感谢所有参与本系列的人。

Name

姓名

Paul E. McKenney, IRC nickname paulmck

Paul E. McKenney, IRC 昵称 paulmck

What role do you play in the community and/or what subsystem(s) do you work on?

你在社区中扮演什么角色,或者负责哪个子系统的开发?

Read-copy update (RCU) is my baby; though, I do occasionally get out into other parts of the kernel and into a few user-mode projects, including userspace RCU and “Is Parallel Programming Hard, And, If So, What Can You Do About It?”

我负责维护Read-copy update (RCU锁);但我也同时参与其他内核模块开发以及一些用户态的项目,包括用户态的RCU锁和“如何进行困难的并行编程”

Where do you get your paycheck?

你的收入来源在哪?

IBM Linux Technology Center funds my kernel development addiction.

IBM Linux技术中心给我的Linux开发工作提供资金。

What part of the world do you live in? Why there?

你在哪生活?为何选择那里?

I live in Beaverton, Oregon, USA.

我住在美国俄勒冈州的比弗顿。

One reason is that both my wife and I grew up on Oregon. Another reason is that Beaverton was where Sequent Computer System was located – and they were hiring back in 1990 when it came time to move back home from the Bay Area.

原因之一是我和我的妻子都是在比佛顿长大。另外一个是因为Sequent公司在俄勒冈州 – 他们在1990年从海湾搬回来后就开始招聘。

What are your favorite productivity tools for software development? What do you run on your desktop?

你最喜欢的软件开发工具是什么?你通常使用什么?

The usual productivity tools: git, cscope, vi, bash, awk, and the rare bout with python. Why vi? Well, the shared system I was using 30 years ago could support seven or eight concurrent vi sessions, but only one emacs session. In that environment, therefore, use of emacs was socially irresponsible.

常用的工具有: git,cscope,vi,bash,awk,以及python。为何用vi?在30年前我使用的共享系统能支持7或8个vi会话,但只支持1个emacs会话。在这种情况下,不合适使用emacs。

I run Ubuntu with Unity2D at the moment.

我现在使用的是Unity2D的Ubuntu桌面系统

How did you get involved in Linux kernel development?

你是如何参与Linux内核开发的?

The first time was in 1997, back when I was working on DYNIX. I got an email from someone with a .ru email address asking for a machine-readable copy of an old paper of mine. I sent along a postscript of the paper and asked what he was using it for. He replied that he was working on this kernel named “Linux.” Although I had heard of Linux, it would be some years before I learned the significance of the name “Alexey Kuznetsov.”

第一次是在1997年,当时我还在DYNIX工作。我收到一封来自地址为.ru的邮件,想要我的一篇旧文章的电子版副本。我把文章的postscript形式版本发给他们了,并询问了用途。他回复说他为”Linux”内核工作。在我知道”Alexey Kuznetsov”这个名字好几年前,我就听说过Linux。

The second time was in 2000, when I joined the IBM Linux Technology Center.

第二次是在2000年,我加入了IBM Linux技术中心。

What keeps you interested in it?

是什么让你保持对Linux内核开发工作的兴趣?

The constant challenge of keeping up with the what people are using the Linux kernel for. The need for SMP scalability, real-time response, small memory footprint, and energy efficiency (to say nothing of the reliability required to support millions of devices) has resulted in a long series of very interesting problems to solve.

对追赶上Linux内核使用者的挑战与使用Linux内核的人挑战。SMP扩展,实时响应,内存最小占用,以及高效资源使用(支持百万级别设备的可靠性),这些都是一系列要解决的有趣问题。

What’s the most amused you’ve ever been by the collaborative development process (flame war, silly code submission, amazing accomplishment)?

在协作开发过程中你觉得的最消遣的是什么(嘴仗,愚蠢的代码提交,惊人的成就)。

I am often amazed when a single technical solution addresses problems that appear to have absolutely nothing to do with each other. The first time was CONFIG_NO_HZ being required by battery-powered devices on the one hand and by mainframes on the other: The smallest of the small and the biggest of the big. Later I was surprised by how the -rt patchset was so effective at finding SMP bugs. More recently, a patch I am working on for the HPC and real-time communities might well also turn out to be useful for energy efficiency.

我常常感到惊讶,一个简单的技术解决方案在没有干扰到其他模块的情况下能很好的解决问题。第一次是CONFIG_NO_HZ同时用于电池供电设备和主机:最小中最小和最大中的最大。后面是-rt补丁包在查找SMP问题的高效应用。最近,我正在做的高性能计算(HPC)和实时通信也许对能源效率有帮助。

What’s your advice for developers who want to get involved?

你对想入门的开发者有什么建议?

Read all the great advice from the other 29 kernel developers. I cannot think of anything to say that they have not already said. :)

参考其他29位Linux开发者的建议吧。我能想到的建议,他们都说了。

What do you listen to when you code?

你都听些什么在编码的时候?

I listen to contemporary music. If it is more than three or four centuries old, I have a hard time relating to it.

我听现代音乐。如果是超过三、四百年的音乐,有个固定的时期限制。

What mailing list or IRC channel will people find you hanging out at? What conference(s)?

哪个邮件列表或IRC频道可以找到你?会议呢?

LKML and linux-rt-users for email lists, and #linux-rt on IRC. That said, I cannot say that I really keep up with any of them.

LKML和Linux-rt用户邮件列表,IRC频道是#linux-rt。保不定在哪个。

30 Linux Kernel Developers in 30 Weeks: Linus Torvalds

原文: 30 Linux Kernel Developers in 30 Weeks: Linus Torvalds

Welcome to 30 Linux Kernel Developers in 30 Weeks! This is the first in a 30-week series we’re running that profiles a different Linux kernel developer each week. The Linux kernel development community is unique in many ways. The individuals that make up this community are responsible for orchestrating the world’s largest collaborative development project and have a very large impact on the future of the operating system and other technologies. The profiles we publish throughout the rest of 2012 should help illustrate how these developers do their work, providing important insight on how to work with them and what makes them tick.

欢迎来到30周30位Linux内核开发者!这是介绍不同Linux内核开发者30周系列的第一个。Linux内核开发社区是独一无二的。社区中的每个开发者负责设计世上最大的协助开发项目,并且对操作系统和技术的未来发展有很大的影响。在余下的2012年中做的这些介绍,将阐述他们如何工作,如何跟他们一起工作以及什么使得他们伟大。

We start the series with none other than Linux creator Linus Torvalds. This week Linus is in his home country of Finland to attend the Millennium Technology Prize ceremony. This week he was named a joint winner of the 2012 Millenium Technology Prize. Just before he left, he took the time to answer these profile questions.

开篇介绍的是Linus Torvalds。本周Linus在他的家乡芬兰参加千禧技术奖典礼,成为2012千禧技术奖的得主之一。在他离开前,作了我们的采访。

What’s your name?

你的名字是?

Linus Torvalds

Linus Torvalds

What role do you play in the community and/or what subsystem(s) do you work on?

你在社区中扮演什么角色或负责哪个子系统的开发?

I’m the kernel top-level maintainer and don’t tend to do any particular subsystems directly; although, I occasionally get directly involved with the VFS layer (and very occasionally some VM discussions).

我是内核的最高维护者,不直接参加任何子系统开发。但是偶尔会参与VFS界面(以及更偶尔地参加VM讨论)

Where do you get your paycheck?

你的收入来源是什么?

The Linux Foundation.

Linux基金会。

What part of the world do you live in? Why there?

你在哪居住?为什么?

Portland, Oregon. As to “why?” it’s mostly because it’s a lot calmer and more livable than Silicon Valley, where we lived for several years before moving here. The weather may not be that great, but it’s a much better area for the kids to grow up in, I suspect. And we can afford a bigger house in a good school district.

俄勒冈州,波特兰。原因是这里安静,比硅谷更适合居住,在哪边生活了好几年。也许气候没有那么好,但我相信这里更适合孩子的成长。还有在这边名校的区供得起大房子。

What are your favorite productivity tools for software development? What do you run on your desktop?

你最喜爱的软件开发工具是什么?你通常使用什么?

I really just run a web browser (for email and time wasting), and then several terminals that I use git in. With the occasional “gitk” window to show the git history view. Most of my time goes to reading (and answering) email, and merging trees and looking at the results.

我只开一个浏览器(收发邮件和打发时间),和在几个终端中跑git。偶尔会使用gitk窗口浏览git历史记录。大多数时间是读和回邮件,合并开发树以及查看结果。

The other tool I tend to use is the “perf” tool to do performance profiling for the loads I care about (which is mainly kernel compiles and some git workloads).

其他使用的工具是perf,用于我关心的负载进行压力测试(主要有内核编译和一些git工作负载)。

How did you get involved in Linux kernel development?

你是如何参入Linux内核开发的?

Heh. Not enough common sense and knowledge to know that writing your own OS was a ridiculous amount of work.

呵。缺乏常识和写操作系统的知识,不可能胜任这份工作。

What keeps you interested in it?

是什么让你对这份工作爱不释手?

I still like the tinkering, and just the technical side of it. The fact that it’s actually pretty social, and I get to call people names, is just a bonus.

我依旧喜欢解技术方面的问题。事实上这是相当现实的,???

What’s the most amused you’ve ever been by the collaborative development process (flame war, silly code submission, amazing accomplishment)?

在协作开发过程中你觉得好玩的是什么(嘴仗,愚蠢代码的提交,惊人的成就)?

I think my favorite part is when somebody does something utterly crazy using Linux. Things that just make no sense at all, but are impressive from a technical angle (and even more impressive from a “they spent many months doing that?” angle).

我认为我喜欢的部分是某人使用Linux做一些完全疯狂的事情。从技术角度看,是一些毫无意义但又令人叹为观止的事情(甚至花费几个月干这事)。

Like when Alan Cox was working on porting Linux to the 8086. Or the guy who built his own computer using an 8-bit microcontroller that he wired up to some RAM and an SD card, then wrote an ARM emulator for it, and booted Linux (really really slowly) on his board.

像Alan Cox移植Linux到8086上的工作。或者一些使用了拥有RAM和SD卡的8位微处理器来构建自己的计算机的家伙,在开发板上编写一个ARM仿真器,然后启动Linx(非常非常慢)。

What’s your advice for developers who want to get involved?

你对想进入该领域的开发者有什么建议?

Start small. It doesn’t even have to be Linux - there’s a lot of open source projects that need help, and you want to learn how to get involved. And once you do realize that user-mode programmers are wusses, and you want to get involved with kernel programming, don’t try to revolutionize some core kernel code - try to find some really small nagging concern, and fix that one thing. Maybe a driver for hardware that you have access to that doesn’t work as well as it should, things like that.

慢慢来。不一定非要做Linux,有很多的开源项目需要帮助,你可以学习如何参与到其中。一旦你确实觉得用户模式的编程是在浪费时间,想要参与到内核开发中,不要尝试对内核代码进行大改,应该尝试找出一些小的问题,然后解决掉。一些像驱动程序没有如期的运行的问题。

It takes a while to learn the ropes, and it really helps if people can see that you’ve done other things before you start sending more involved patches.

如果大家看到你在提交很多复杂的补丁前已经做了一些事情,花些时间学习协同开发是有帮助的。

But the most important thing is “have good taste.” It’s hard to describe, but it’s something I personally look for. People who do things the “RightWay(tm)” - and I’m not meaning that you should follow all the rules we have come up with over the years (although you should do that, too) - but I’m talking about that elusive quality of writing code that makes obvious sense and does the right thing without lots of special cases or complexity, but also without being unnecessarily abstract and general-purpose. “Do one thing, and do it well.”

但最重要的是要有好的想法。这个是非常难描述的,却是我个人寻找的东西。做正确的事情的人,并不是说你应该遵守所有的之前建立的规则?????

What do you listen to when you code?

你在编码的时候听什么?

Oh, I want my office to be totally silent. I listen to music when I’m driving the kids around, etc., but when I’m working, I don’t want to hear anything. Not music, not any noise from the fans in my computers. Just stillness.

我需要完全安静的办公室。当我驱车带孩子的时候才听音乐,工作时我不想听到任何声响。不能有音乐,电脑的风扇也不能有噪音。只要安静。

What mailing list or IRC channel will people find you hanging out at? What conference(s)?

在哪个邮件列表或IRC频道可以找到你?会议呢?

I don’t do IRC or any other real-time interactive stuff - I do everything by email. I follow the general kernel and git mailing lists, but even those I have in “auto-archival” mode, so that I only see the threads if I explicitly look for them or if I’m cc’d or pointed at them.

我不使用IRC或其他的实时通讯工具,我只用邮件。我接收所有的内核和git邮件列表,但我有自动分析模式,这样我就可以查看我关注的或者我有被CC或要求查看的主题。

As to conferences, it’s usually just the Linux Kernel Summit. I try to get to LinuxConf Australia most years too - I like it as a conference and it’s in Australia during their summer. But LCA is a “when it works out” kind of thing, so it’s probably only every other year or so.

至于会议,只有Linux内核峰会。我有好几年尝试参加澳大利亚Linux会议。因为这是一个在澳大利亚的夏天举行的会议,所以我喜欢。但????

There’s been a few other conferences I go to, usually because they’re in an interesting area and if I can get some scuba diving done during the same trip

还有其他一些会议,通常因为他们在一我感兴趣的领域以及在参与的过程????

Thank you, Linus! Next week we talk to Thomas Gleixner.

感谢你,Linus!下周我们对话Thomas Gleixner。

frequently questions

1. Adobe Flash Player 11.2 on Fedora 18/17

1). Install Adobe YUM Repository RPM package
rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux

2). Update Repositories
yum check-update

3). Install
yum install flash-plugin nspluginwrapper alsa-plugins-pulseaudio libcurl

Reference:

2. Play music and movies

1). add yum repository
su -c 'yum localinstall --nogpgcheck http://mirrors.163.com/rpmfusion/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://mirrors.163.com/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm'

2). install mp3 and other audio support
su -c 'yum install gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-ugly libtunepimp-extras-freeworld xine-lib-extras-freeworld'

3). install video support
su -c 'yum install ffmpeg ffmpeg-libs gstreamer-ffmpeg libmatroska xvidcore'

question:
Appear erro message as below when install:
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-18-x86_64
Check file
ls /etc/pki/rpm-gpg/RPM-GPG-KEY-*
Can not found /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-18-x86_64

Solution:
su -c 'yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-18.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-18.noarch.rpm'

Reference:

Update:
Install gnome-mplayer-common rpm

3. How to create and use Live USB

Reference link: http://fedoraproject.org/wiki/How_to_create_and_use_Live_USB

maxima tutorial

  1. 安装 yum install maxima
  2. 运行 maxima
  3. 例子

    [root@localhost ~]# maxima --version
    Maxima 5.29.1
    [root@localhost ~]# maxima
    Maxima 5.29.1 http://maxima.sourceforge.net
    using Lisp SBCL 1.1.2-1.fc18
    Distributed under the GNU Public License. See the file COPYING.
    Dedicated to the memory of William Schelter.
    The function bug_report() provides bug reporting information.
    (%i1) 2+3;
    (%o1)                                  5
    (%i2) 1/3;
                                           1
    (%o2)                                  -
                                           3
    (%i3) float(1/3);
    (%o3)                          .3333333333333333
    (%i4) sum(i^2, i, 1, 3);
    (%o4)                                 14
    (%i5) ? if
    
     -- Special operator: if
         Represents conditional evaluation.  Various forms of `if'
         expressions are recognized.
    
         `if <cond_1> then <expr_1> else <expr_0>' evaluates to <expr_1> if
         <cond_1> evaluates to `true', otherwise the expression evaluates
         to <expr_0>.
    
         The command `if <cond_1> then <expr_1> elseif <cond_2> then
         <expr_2> elseif ... else <expr_0>' evaluates to <expr_k> if
         <cond_k> is `true' and all preceding conditions are `false'.  If
         none of the conditions are `true', the expression evaluates to
         `expr_0'.
    
         A trailing `else false' is assumed if `else' is missing.  That is,
         the command `if <cond_1> then <expr_1>' is equivalent to `if
         <cond_1> then <expr_1> else false', and the command `if <cond_1>
         then <expr_1> elseif ... elseif <cond_n> then <expr_n>' is
         equivalent to `if <cond_1> then <expr_1> elseif ... elseif
         <cond_n> then <expr_n> else false'.
    
        git/ The alternatives <expr_0>, ..., <expr_n> may be any Maxima
         expressions, including nested `if' expressions.  The alternatives
         are neither simplified nor evaluated unless the corresponding
         condition is `true'.
    
         The conditions <cond_1>, ..., <cond_git/n> are expressions which
         potentially or actually evaluate to `true' or `false'.  When a
         condition does not actually evaluate to `true' or `false', the
         behavior of `if' is governed by the global flag `prederror'.  When
         `prederror' is `true', it is an error if any evaluated condition
         does not evaluate to `true' or `false'.  Otherwise, conditions
         which do not evaluate to `true' or `false' are accepted, and the
         result is a conditional expression.
    
         Among other elements, conditions may comprise relational and
         logical operators as follows.
    
              Operation            Symbol      Type
    
              less than            <           relational infix
              less than            <=
                or equal to                    relational infix
              equality (syntactic) =           relational infix
              negation of =        #           relational infix
              equality (value)     equal       relational function
              negation of equal    notequal    relational function
              greater than         >=
                or equal to                    relational infix
              greater than         >           relational infix
              and                  and         logical infix
              or                   or          logical infix
              not                  not         logical prefix
    
  There are also some inexact matches for `if'.
  Try `?? if' to see them.git/

(%o5)                                true
(%i6) 
(%i6) quit ();
[root@localhost ~]# 
  1. 画图

    plot2d(x^3+2*x^2-3,[x,-2,2]);

    plot2d

    plot3d(sin(x)*cos(y),[x,-2,2],[y,-2,2]);

    plot3d

  2. 编程
    创建一个后缀为max(可以是任何后缀)的文件,如test.max,编辑代码后保存.
    在maxima环境中执行batch("test.max")

    test.max

    a:2;
    b:5;
    a^3+b^2;
    

    执行效果

    (%i3) batch("test.max");
    
    read and interpret file: /root/prj/git/euler/maxima/test.max
    (%i4)                                a : 2
    (%o4)                                  2
    (%i5)                                b : 5
    (%o5)                                  5
                                        2    3
    (%i6)                               b  + a
    (%o6)                                 33
    (%o6)                 /root/prj/git/euler/maxima/test.max
    

    关于batch的更多用法,请查阅帮助手册中的章节13.3 Functions and Variables for File Input and Output

  3. 其他范例
    Project Euler第1题

    sum(if (mod(i, 3) = 0) or (mod(i, 5) = 0) then i else 0, i, 1, 999)
    

    Project Euler第2题
    euler2.max

    s:0$
    for i:3 while fib(i)<=4*10^6 do (s:s+fib(i), i:i+2)$
    display(s);
    

    执行效果

    (%i164) batch("euler2.max");
    
    read and interpret file: /root/prj/euler/maxima/euler2.max
    (%i165)                              s : 0
                                             6
    (%i166) for i from 3 while fib(i) <= 4 10  do (s : fib(i) + s, i : 2 + i)
    (%i167)                           display(s)
                                      s = 4613732
    
    (%o167)                              done
    (%o167)              /root/prj/euler/maxima/euler2.max    
    
  4. 相关语法说明
    ; 代码结束符
    $ 多行代码
    , 多个语句使用(sentence1, sentence2)

  5. 帮助手册
    浏览器查看文件/usr/share/maxima/5.29.1/doc/html/maxima.html

相关教程资源:

git

Git Branching Model

what you should know

  • status of files, “untracked, unmodified, modified, staged”
  • branch include master, brance A, brance B, and so on

help

when you don’t know what to do first, you can use the help command.

  • git --help
  • git sub-command --help, e.g: git commit --help, git checkout --help

config

  • ssh-keygen -t rsa -C "youremailname@gmail.com
  • git config --global core.editor "vim"
  • git config --global user.email "abc@gmail.com"
  • git config --global user.name "matrix207"
  • git config --global color.status auto
  • git config --global color.diff auto
  • git config --global color.branch auto
  • git config --global color.branch auto
  • git config --global color.paper "less -r" avoid escape characters in git log|diff
  • git mergetool --tool=vimdiff
  • list configuration: git config -l
  • cat ~/.gitconfig
  • git auto completion, git-completion.bash
    https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Basic

  • git clone url
  • git pull fetch data and try to merge it the working code
  • git fetch only fetch data
  • git status
    git status -uno not show untracked files
  • git diff
    • git diff --cached view difference of staged files
    • git diff COMMIT_ONE COMMIT_TWO file view difference for specify file between two commit version
    • git diff fa510^ fa510 view difference between previous and specify commit version
  • git rm files
    git rm -r path remove directory
  • git add files
    • git add . add all files in current directory
    • git add -u ./ only add tracked files to stage
  • git mv path_fileA path_fileB
  • git checkout featureA switch to branch featureA
  • git checkout a.h restore file, if you also have a branch named a.h, should use git checkout – a.h”
  • git reset file unstage file (remove from staged to modified status)
  • git commit commit message with specify editor
    git commit file -m "comment here"
  • git remote -v
  • git log
    • git log -p -2 difference between the latest 2 update
    • git log --stat show detail of changed files
    • git log --author="dennis" filter log by author
    • git log commit_version
    • git log -S 'XXX' file view commit info of specify code of file
    • git log --no-merges not show merge log
  • git clean -f -n Show what will be deleted with the -n option
    git clean -f remove untracked files
    git clean -fd remove untracked files
    git help clean for more information
  • git stash add current modify files to stash
    • git stash pop pop stash files
    • git stash list
    • git stash show
    • git help stash

Advance

  • git reset file undo git add
    git checkout HEAD /path/file undo git operation(rm/modify and so on) on file
    git rm $(git ls-files --deleted) undo git rm multiple files
    git reset --hard origin/master cancel local modify
    git reset --soft HEAD~1
    git help reset
  • git merge
    • git merge --squash merge code without commit
    • git merge --no-commit
  • git branch show all local branch, tell you which is the current branch
    git branch -a show all branch, both local and remote
    git branch -vv print the name of the upstream branch
    git branch --contains <commit> find which local branch contain the specify commit
    git branch -r --contains <commit> find which remote branch contain the specify commit
    git help branch for more
  • fork+pull
  • git commit --amend
  • git blame file view all change info of each line
  • git push origin :branch_name delete remote branch
  • git remote update --prune update remote branch information on local
  • git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'\ |sort -k5n -k2M -k3n -k4n list remote git branches by author
  • git status --short |awk '$1 ~/^M|A|U/ {print $2}' only show modified files
    vim $(git status --short |awk '$1 ~/^M|A|U/ {print $2}') editor all modified files by vim
  • git rev-parse
    • git rev-parse HEAD show commit SHA1 of HEAD
  • git log -L show lines history

other command

  • git commit –fix-up

tags

  • git tag -a v0.1 -m 'new tag version 0.1' add tag
  • git push origin master v0.1 push tag to origin

Skills

  • reset repository to specify commit version
    • git clone [remote_address_here] my_repo
    • cd my_repo
    • git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
  • view history version of specify file
    • git show HEAD:[THE FILE YOU WANT]
    • git show HEAD:[THE FILE YOU WANT] > NEW_NAME checkout history commit file
    • git log FILE_PATH, e.g: git log ./log.cc
  • restore file which was deleted at latest commit.
    • first, checkout the file git checkout HEAD^ -- a.txt
    • second, commit git add a.txt &&git commit -m "recover a.txt" &&git push
  • multi line comment for commit

    [dennis@localhost git]$ mkdir abc
    [dennis@localhost git]$ cd abc
    [dennis@localhost abc]$ git init
    [dennis@localhost abc]$ echo "123">>1.txt
    [dennis@localhost abc]$ git commit -m "first commit
    > 
    > - test log1
    > - test log2"
    [dennis@localhost abc]$ git log
    commit 98e983f0fdae5ef292083bb5ce288e9344a46751
    Author: Dennis <dennis.cpp@gmail.com>
    Date:   Fri Aug 1 09:02:52 2014 +0800
    
        first commit
    
        - test log1
        - test log2
    
  • merge commit history

    • git rebase -i HEAD~2, modify the second ‘pick’ to ‘squash’ to merge the
      last two commit into one; If want merge more, just modify 2 to other digit.
    • git push --force origin LOCAL-branch:REMOTE-branch, push to remote repository
  • modify the latest commit (or using for merge commit history)

    • git reset --soft HEAD~1, or git reset --soft <commit id> to edit last
      serval commits.
    • … do something else for the modification …
    • git commit -c ORIG_HEAD to changed the commit message, or use
      git commit -C ORIG_HEAD to reuse the previous message
    • reference git help commit, see the --amend
  • summary statics

    • git log --author="$(git config --get user.name)" --pretty=tformat: --numstat \ |awk '{add+=$1;subs+=$2;loc+=$1-$2} END{printf "added lines: %s removed lines \ : %s total lines: %s\n",add,subs,loc}' - count total submit lines of code by author
    • git shortlog -s -n count summary commits by author and sort
    • git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5 List top 5 commiter
  • add local repository to remote

    • git add remote git-url
    • git remote -v
    • git push origin master

Find the modified commit quickly

Assume you find that a function was delete in the current commit, and want to
find which commit changed this.

Normally, you will work as below:

  1. git log FILE-INCLUDE-THE-FUNCTION to list the commit history of the file
    which function belong to.
  2. git show COMMIT-SHA and search by the function name

The disadvantage of this method:

  1. If there lots commit history it would be hard to find.
  2. It depend the human eyes, ;), which easy to make mistake sometimes.

So, we want a script to execute this task:

  1. Use git log --pretty=tformat:%h --after 2015-01-05 FILE filter by date, and
    only show commit hash. git rev-list --all --after 2013-03 FILE work as well
    too.
  2. Use git show COMMIT-SHA |grep 'KEY-WORDS' to do searching.

With such two skills, we can write bash command as below:
git log --pretty=tformat:%h --after 2013-01 FILE |xargs git show |grep -i KEY-WORDS

Conflict handle

Other

Auto pull project, bash script

#!/bin/bash

exclude_dir="-I test -I hello"

for i in `ls $exclude_dir`
do
{
    if [ -d $i ]; then
        (cd $i; echo update `pwd`; git pull)
    fi
}
done

gitignore

define ignore files in .gitignore

# ignore all .*.swp files
.*.swp
# ignore all *.out files
*.out
# ignore all *.o files
src/*.o
# files in folder
_site/*

another example:

# Object files
*.o
*.ko
*.obj
*.elf

# Libraries
*.lib
*.a
*.la
*.lo

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

again:

_site/*
_theme_packages/*

Thumbs.db
.DS_Store

!.gitkeep

.rbenv-version
.rvmrc

good commit message

Structure your commit message like this:

From: http://git-scm.com/book/ch5-2.html

Short (50 chars or less) summary of changes

More detailed explanatory text, if necessary.  Wrap it to about 72
characters or so.  In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body.  The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the
two together.

Further paragraphs come after blank lines.

 - Bullet points are okay, too

 - Typically a hyphen or asterisk is used for the bullet, preceded by a
   single space, with blank lines in between, but conventions vary here

 - Use a hanging indent 

Team work A

  • git clone url
  • git checkout -b featureA // create a branch, named “featureA”
  • coding
  • git commit -am “ADD COMMENT HERE”
  • git rebase -i // make all commit to be one
  • git push origin featureA // push your branch to origin
    The general sequence is something like this

Team work B

  • step 1: git check -b branchT1 remotes/origin/branchT1 (you can change your local branch “branchT1” other name if you want)
  • step 2: do your coding
  • step 3: commit your changeds code to your local branch “branchT1”
  • step 4: loop step 2 and step 3
  • step 5: git pull origin branchT1 (fetch and merge code, if you not mean do merge, using fetch instead?)
  • step 6: git push remotes/origin/branchT1

Reference