另外，我们也与其他 ruby 公司一起赞助和组织广州 ruby 社区活动：GZRuby，Guangzhou Rails Girls。
- 如果你没有 ruby 经验，懂 python, php, java, .net 等等，我们也非常欢迎
- 良好的 git 团队开发习惯
- 熟悉 ubuntu, centos 系统部署
- 有 github 账号
- 良好的英语能力，日常 bug 报告、IM、文档都是英文的，当然口语不行可以学习
另外，我们也与其他 ruby 公司一起赞助和组织广州 ruby 社区活动：gzruby，guangzhou rails girls。
如果你没有 ruby 经验，懂 python, php, java, .net 等等，在 web 开发造诣一流，我们非常欢迎，因为 ruby 很容易掌握，你的编程思想则更重要
良好的 git, svn 团队开发习惯
熟悉 ubuntu, centos 系统部署
有 github 账号
到世界各地出差，参加各地的 ruby、rails 大会
After 2 years at the kudelabs office, gzruby has outgrown our humble common room. We have decided to move to a new venue - one with more space, and we think it will be a lot more fun! As always, gzruby is about getting a bunch of people together to talk about what we all do for a living. Its a chance to learn from each other, and find ways to improve our craft. If you are a ruby developer who has never attended, its like finding a new group of friends that you never knew you had.
View the invitation at the gzruby home page
The new venue is close to our office, close to Zhu Jiang New Town, and features hand-crafted beers made by one of Kudelab's former interns!
We take our summer internship program very seriously at Kudelabs. Guangzhou has wonderful universities with hundreds of very qualified graduates every year. This year we posted 2 openings, and we're proud to announce that they have been filled. We'll be welcoming our new interns soon!
Every once in a while we just need to get away from it all, and that's what we did! The whole Kudelabs team took off from Guangzhou for 3 days to the amazing Camiguin island just off the coast of Mindanao. Getting there was no joke: 2 flights, a 2 hour jeepney ride, and a 1.5 hour ferry ride later we were finally on the island.
Camiguin is an absolutely magical place. Over 3 very busy days, we snorkeled with meter-long fish, swam at the base of a 75m waterfall, hiked 10 hours over the top of an active volcano, and watched the sun set from a black sand beach as children of fishermen played in the waves around us. I won't even start on the food.
By the time we got back to Guangzhou, we were super tired, but ready to get back to work! Thank you Philippines for an amazing adventure!
GZRUBY10 will be held at the Kudelabs offices this wednesday evening, starting at 7:30. GZRUBY is a gathering of ruby developers, Kudelabs is one of the sponsors along with other ruby development companies in the city. Its always a lot of fun and a great chance to meet up and talk web development. Find out more at the Guangzhou Ruby Group page.
StartupGrind is a global network of startup communities that was established to educate, inspire, and connect entrepreneurs in the city. Here in Guangzhou, we see it as a way to connect the English speaking world with the Chinese startup ecosystem. The second event features founder Clement Song, who founded eCitySky and successfully completed an acquisition to YY Inc. He's now with YY as the Directory of Platforms and Services, and was able to experience an IPO first hand. Find out more at StartupGrind Guangzhou Meetup page.
Kude Labs (酷德实验室) is a growing software development firm focused on building high quality web applications. Our office is located in Guangzhou Wuyang District (广州市五羊邨).
We are happy to offer internship positions for students looking to improve their skills and gain some practical experience working on real-world projects. Intern positions are part time and can transition into a full time position after graduation. The majority of our full-time employees joined our team first as interns.
Software Testing Intern - Web applications
We are looking for smart Quality Assurance engineers for testing the Web Applications we develop.
Ideal candidates would have:
- Outstanding analytical thinking abilities
- Patient and precise work style
- Major in Computer Science or Mathematics related studies
- Experience with open source tools
- Excellent written and oral communications skills
- Self motivated and able to work independently
- Nonjudgemental, welcoming attitude
Please send an ENGLISH letter of interest, references and resume to: firstname.lastname@example.org.
We look forward to working with you and welcoming you as a part of the Kudelabs family.
See more internship and full time positions at GZTechJobs.com
The 9th gzruby meetup will be coming to the kudelabs offices in Guangzhou next Wednesday, November 21st at 7PM. We'd love to see you there! You'll meet several members from the growing Ruby community in our city, and have a chance to present an idea you're working on or a gem you use. Feel free to invite anyone who may be interested in ruby, or learning more about Ruby on Rails.
gzruby is the Guangzhou Ruby User's group, we meet once every 2 months to share tips and techniques, as well as show off recent projects.
Given the problems passwords pose, isn't it time to offer people a second authentication factor? Your bank does it. Google does it. Even games do it. You can too. How hard is it to get Rails set up with a one-button six digit authenticator? Not hard at all! The hardest part was knowing where to look and what to get.
Close inspection of the dongles we already have revealed one name printed on them all: VASCO. VASCO provides the physical token you hold in your hand. We ordered a few of these. VASCO also provides the server software to authenticate tokens. The software comes in all sizes: enterprise, cloud, but for us the perfect match is just a C API called the VACMAN Controller. It runs on Windows, Linux, some more exotic OSes, but not Mac OS X.
How does it work? Each token has a serial number and contains a clock. When you press the button, the token shows a six digit one-time password based off that clock. Send the serial number, the password, and a little magic to the C API. It returns whether everything matches up right now. (So the clock on your server better be on time.)
How does the C API know whether the serial number and password match? In the beginning, VASCO creates a special encrypted file for you. It records how the clock and the serial number are synchronized. Before anyone can use their tokens, you have the API import the special file. It returns a data-structure with authentication information. Pass this magic struct with the serial number and password when authenticating. After authenticating, the data-structure is updated. Besides simple statistics like number of successful authentication attempts, the data structure stores information about token's internal clock. This allows the API to compensate for gradual time drift. The API itself is stateless. It's your job to keep track of the tokens and the data-structure.
Okay, but how does it work with Rails? As always, apply a little bit of glue. SWIG makes wrapping C APIs easy. This time was no exception though we did need to do a little more to allocate and free data-structures than usual. For the database, use ActiveRecord if that's your thing. We went with Sequal. We used two tables:
- One table maps user names to token ids.
- The other table maps token ids to magic data-structure blobs.
That's it really. We just use a script to import the import the token info. We don't use enough tokens to try to automate further.
Summer in GZ brings some really hot weather! But it also brings tremendous rainstorms, clear skies after the rain, and excellent fruits. We currently have a blooming starfruit tree. I hope it is able to bear fruit later in the season.