토요일, 9월 27, 2014

Kontakt: "SCRIPT WARNING: function call tree too deep!"

Kontakt: Ilya Efimov Acoustic Guitar Strum

Tested: Kontakt 5.3.1, FL Studio 11.1.1



// -------------------------------------------
// Problem: Audio engine doesn't work
// -------------------------------------------

You can see the following at Info window.

"SCRIPT WARNING: function call tree too deep!"



// -------------------------------------------
// Solution:
// -------------------------------------------

 - decrease note where using simultaneously




cheers,
June

화요일, 5월 20, 2014

QEMU Shared Directory on GNU/Linux (공유 디렉토리 만들기)

QEMU Shared Directory on GNU/Linux

How to make a shared directory for QEMU on GNU/Linux ?
It's pretty easy...

* I suppose you using QEMU on GNU/Linux already.
* You can also find shared directory option '3.6.7 Virtual FAT disk images' at QEMU WiKi.
 - http://wiki.qemu.org/download/qemu-doc.html#disk_005fimages_005ffat_005fimages
 - http://en.wikibooks.org/wiki/QEMU/Devices/Storage



[SETP #1]
// Host
//
// Option: -hdb fat:rw:/mnt/qemu_shared_dir/
//
// Device: 'hdb'
// File System: 'fat'
// Permission: 'rw'
// Path: '/mnt/qemu_shared_dir'
user@host:/$ qemu-xxx <...YOUR OPTIONS...> -hdb fat:rw:/mnt/qemu_shared_dir/


[SETP #2]
// QEMU Guest
root@qemuxxx:/# mount
...
/dev/sdb1 on /media/sdb1 type vfat (rw,relatime,gid=6,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
...
root@qemuxxx:/# cd /media/sdb1
root@qemuxxx:/media/sdb1# echo 'test' > test

//! IMPORTANT
root@qemuxxx:/media/sdb1# sync


[SETP #3]
// Host
user@host:/mnt/qemu_shared_dir$ ls -al


[===NOTE===]
 - If you create/modify a file or directory, you MUST do 'sync'.
 -
 - WARNING: keep in mind that QEMU makes the virtual FAT table once, when adding the device, and then doesn't update it in response to changes to the specified directory made by the host system. If you modify the directory while the VM is running, QEMU might get confused.
 -
What you should never do:
 - use non-ASCII filenames ;
 - use "-snapshot" together with ":rw:" ;
 - expect it to work when loadvm’ing ;
 - write to the FAT directory on the host system while accessing it with the guest system.


that's it!


-----
Cheers,
June

월요일, 11월 04, 2013

Linux: A faster way to delete millions of files in a directory

A faster way to delete millions of files in a directory
Source:

Conclusion: use 'rsync'

...
(The # of files is 1000000. Each of them has 0 size.)
CommandElapsedSystem Time%CPUcs1 (Vol/Invol)
rsync -a –delete empty/ a10.601.3195106/22
find b/ -type f -delete28.5114.465214849/11
find c/ -type f | xargs -L 100 rm241.6920.605437048/15074
find d/ -type f | xargs -L 100 -P 100 rm234.3227.8289929897/21720
rm -rf f31.2914.804715134/11
...


-----
Cheers,
June

일요일, 11월 03, 2013

Firefox 용량 과다로 처리하기 힘든 스크립트 (Warning: Unresponsive script ...)

Firefox를 사용하다 보면 굉장히 느려지면서 다음과 같은 메시지가 나오는 경우가 있다.

"경고: 용량 과다로 처리하기 힘든 스크립트
스크립트 처리량이 과도하여 프로그램이 반응하지 않을 수 있습니다. ..."

이때 메모리 사용량을 확인해 보면 많게는 1GB 이상 소모되고 있는 경우도 있다.

여러가지 방법이 있겠지만, 나는 JavaScript 사용을 중지 함으로써 이 문제를 해결한다.
하지만 이 문제는 정확한 해결 방법은 아니다.

오류가 발생하는 대부분의 문제는 JavaScript 관련 문제이다 보니
종종 이런 방법으로 피해가는 것이기 때문이다.


먼저 이런 상황이 발생하면 Firefox의 [개발자 도구]를 실행한다.
위치는 [Firefox 메뉴 -> 개발자 도구 -> 개발자 도구] 이며 단축키는 [Ctrl+Shift+I] 이다.
또는 [Alt] 키를 눌러서 메뉴가 나오게 한 다음 [도구 -> 웹 개발 도구 -> 개발자 도구]로 이동할 수 있다.

실행하면 현재 페이지의 아래에 개발자 도구가 나오게 된다.
그리고 [개발자 도구] 화면에서 왼쪽에 있는 메뉴(도구상자 설정 이미지)를 누르면
여러 항목이 나오게 되는데 [고급설정]에 있는 [JavaScript 끄기]를 체크해서
현재 페이지에서 JavaScript 사용을 중지 시킨다.

단점은 [개발자 도구]를 닫게 되면 [JavaScript 끄기]가 체크되지 않은 상태로
되돌아 간다.

----------

"Warning: Unresponsive script ..."

[Firefox] -> [Web Developer] -> [Developer Toolbar] -> [Preference]
-> [Advanced settings]

Check the box [Disable JavaScript for the current tab] to enable

-----
Cheers,
June

목요일, 3월 28, 2013

[Android] openFrameworks + Android + Cygwin Guide




// --------------------------------------------------------
// Project:
// Purpose: openFrameworks + Android + Cygwin Guide
// Author: Ho-Jung Kim (godmode2k@hotmail.com)
// Date: March 27, 2013
// Filename: openFrameworks + Android + Cygwin Guide.txt
// --------------------------------------------------------
// NOTE:
// --------------------------------------------------------



// --------------------------------------------------------
// Prerequisites (My environment)
// --------------------------------------------------------
 - Windows 7 x64
 - openFrameworks: of_v0.7.4_android_release
 - Eclipse: eclipse-mobile-juno-SR1-win32-x86_64
 - Android NDK: Android-NDK-r8d
 - Android SDK: Latest version
 - JDK: Either 1.6 or 1.7
 - Cygwin: Any version with build essentials all
    (My env: CYGWIN_NT-6.1-WOW64 xxx 1.7.9(0.237/5/3) xxx i686 Cygwin)
 - Installation
    1. Install Cygwin
- C:/cygwin or whereever
    2. Install JDK
    3. Install Eclipse
    4. Install Android NDK
- C:/cygwin/ndk (Easy...)
    5. Install Android SDK
    6. Install ADT Plugin in Eclipse
- ADT Plugin URL: https://dl-ssl.google.com/android/eclipse/
-
- SEE google android online guide
- http://developer.android.com/sdk/index.html
- http://developer.android.com/sdk/installing/installing-adt.html


SEE this comment "# hjkim: Cygwin: ADD []" for add or comment out


// --------------------------------------------------------
// 1. Set Cygwin path
// --------------------------------------------------------
Windows environment

[CYGWIN_HOME]: C:\cygwin
[Path]: ;%CYGWIN_HOME%;%CYGWIN_HOME%\bin;%CYGWIN_HOME%\usr\bin;~~windows~~



// --------------------------------------------------------
// 2. Eclipse environment
// --------------------------------------------------------
[Window -> Preferences]

    2.1 C/C++ -> Build -> Build Variables
     - Check the [Show system variables]
     - Move "C:\cygwin\bin" up to the top

    2.2. C/C++ -> Debug -> Source Lookup Path
     - [Add] -> select the type "Path Mapping"

     Specify the mapping paths
     - Name: "Cygwin" or you want
     - Compilation path: "c:\cygwin\c"
     - Local file system path: select the your src drive "C:\"



// --------------------------------------------------------
// 3. Make custom toolchain
// --------------------------------------------------------
Toolchain named "of_arm-linux-androideabi-4.6" here

$ /android-ndk-r8d/build/tools/make-standalone-toolchain.sh --platform=android-8 --install-dir=/ndk/toolchains/of_arm-linux-androideabi-4.6/prebuilt/windows


Build test:

// test_of.cpp
// stdc++
#include < iostream >
#include < typeinfo >
// stdc
#include < stdio.h >
#include < unistd.h >

int main(void) {
    return 0;
}

$ /ndk/toolchains/of_arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-g++ -I/ndk/toolchains/of_arm-linux-androideabi-4.6/prebuilt/windows/include -o test_of.o test_of.cpp -Wall



// --------------------------------------------------------
// 4. Comment out around the below due to avoid multiple definition of the "__dso_handle"
// --------------------------------------------------------
"__dso_handle" defined into "crtbegin_so.o" already
SEE: custom toolchain directory
/ndk/toolchains/of_arm-linux-androideabi-4.6/prebuilt/windows/sysroot/usr/lib

of_v0.7.4_android_release/addons/ofxAndroid/src/ofxAndroidUtils.cpp

/*
// fix for undefined symbols from ndk r8c
extern "C" {
  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
  void *__dso_handle;
}
*/

SEE its log
// History: http://stuff.mit.edu/afs/sipb/project/android/docs/tools/sdk/ndk/index.html
If your project is linked with the -nostdlib -Wl,--no-undefined options, you must provide your own __dso_handle because crtbegin_so.o is not linked in this case. The content of __dso_handle does not matter, as shown in the following example code:
extern "C" {
  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
  void *__dso_handle;
}



// --------------------------------------------------------
// 5. Makefile: Comment out and adds
// --------------------------------------------------------
Checks uname on Cygwin shell
$ uname
CYGWIN_NT-6.1-WOW64

of_v0.7.4_android_release/libs/openFrameworksCompiled/project/android/
[makefile]
{
...
else ifeq ($(shell uname),MINGW32_NT-6.1)
HOST_PLATFORM = windows
# hjkim: Cygwin: ADD [
else ifeq ($(shell uname),CYGWIN_NT-6.1-WOW64)
HOST_PLATFORM = windows
# hjkim: Cygwin: ADD ]
else
HOST_PLATFORM = linux-x86
endif
...

# hjkim: Cygwin: ADD [
# TOOLCHAIN=arm-linux-androideabi-$(GCC_VERSION)
TOOLCHAIN=of_arm-linux-androideabi-$(GCC_VERSION)
# hjkim: Cygwin: ADD ]
...
# hjkim: Cygwin: ADD [
# SYSROOT=$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/
# CFLAGS += -nostdlib --sysroot=$(SYSROOT) -fno-short-enums -frtti -fexceptions
# CFLAGS += -I"$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/usr/include/" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/include" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/include" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/$(ABI)/include" -I"$(NDK_ROOT)/sources/crystax/include/" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI)/include"

CFLAGS += -fno-short-enums -frtti -fexceptions
HEADER = -I"$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/usr/include/" -I"$(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/$(HOST_PLATFORM)/include/"
CFLAGS += $(HEADER) -I"$(NDK_ROOT)/sources/crystax/include/"
# hjkim: Cygwin: ADD ]
...
}

-------------------

of_v0.7.4_android_release/libs/openFrameworksCompiled/project/android/
[paths.make] // copy from paths.make.default
{
...
# hjkim: Cygwin: ADD [
NDK_ROOT=/ndk
SDK_ROOT=/cygdrive/c/Java/android/android-sdk-windows
ANT_HOME=/cygdrive/c/Java/apache-ant-1.8.1
ANT_BIN=$(ANT_HOME)/bin/
# hjkim: Cygwin: ADD ]
}

-------------------

of_v0.7.4_android_release/libs/openFrameworksCompiled/project/makefileCommon/
[Makefile.android]
{
...
# hjkim: Cygwin: ADD [
#TOOLCHAIN=arm-linux-androideabi-$(GCC_VERSION)
TOOLCHAIN=of_arm-linux-androideabi-$(GCC_VERSION)
# hjkim: Cygwin: ADD ]
...
# hjkim: Cygwin: ADD [
#SYSROOT=$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/
#CFLAGS += -nostdlib --sysroot=$(SYSROOT) -fno-short-enums
#CFLAGS += -I"$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/usr/include/" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/include" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/include" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/$(ABI)/include" -I"$(NDK_ROOT)/sources/crystax/include/" -I"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI)/include"

CFLAGS += -fno-short-enums
HEADER = -I"$(NDK_ROOT)/platforms/$(NDK_PLATFORM)/arch-arm/usr/include/" -I"$(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/$(HOST_PLATFORM)/include/"
CFLAGS += $(HEADER) -I"$(NDK_ROOT)/sources/crystax/include/"
# hjkim: Cygwin: ADD ]
...
# hjkim: Cygwin: ADD [
#LDFLAGS = --sysroot=$(SYSROOT) -nostdlib -L"$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI)"
# hjkim: Cygwin: ADD ]
...
# hjkim: Cygwin: ADD [
#SYSTEMLIBS +=  -lsupc++ -lz -lGLESv1_CM -llog -ldl -lm -lc $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI)/libgnustl_static.a -lgcc
SYSTEMLIBS +=  -lsupc++ -lz -lGLESv1_CM -llog -ldl -lm -lc -lgcc
# hjkim: Cygwin: ADD ]
...
}

-------------------

of_v0.7.4_android_release/libs/openFrameworksCompiled/project/makefileCommon/
[Makefile.examples]
{
...
else
HOST_PLATFORM = linux-x86
endif
endif

# hjkim: Cygwin: ADD [
include $(OF_ROOT)/libs/openFrameworksCompiled/project/android/paths.make
ARCH = android
HOST_PLATFORM = windows
# hjkim: Cygwin: ADD ]

ifndef ARCH
ARCH=$(shell uname -m)
endif
...
}




// --------------------------------------------------------
// 6. Build all in Eclipse
// --------------------------------------------------------
 - import project
1. import of_src/libs
2. import of_src/addons/ofxAndroid/ofAndroidLib
3. import of_src/libs/openFrameworks
4. import of_src/examples/android/*

 - build
1. ofAndroidLib
2. openFrameworks
3. examples

 - have a fun!




__EOF__

화요일, 5월 08, 2012

Early Startup Time Wasters

Early Startup Time Wasters
Source: http://talkfast.org/2012/05/05/early-startup-time-wasters

May 05, 2012
by Jeff Miller


A major difference between launching a brand new startup and working on one that’s a year or two old is quality of shot selection. Every day begins with 1,000 doors in front of you: which door do you go through to make the most progress? Shot selection is choosing what to focus on at the expense of other forgone opportunities. It’s one of the most critical skills in running a startup.

As a company matures, I think it’s normal (ideally) for judgment to improve and shot selection to get a lot better, resulting in less wasted time and more forward momentum. This can be driven by many things. Maybe it’s having enough live users to give you feedback on market fit. Or you found some role models to help with targeted advice. Or you figured out how to optimize against your true traction metrics.

Looking back on the first six months of my own startup, I’m embarrassed by how terrible my shot selection was. I routinely spent time on features that ended up having zero impact on the business. I was especially prone to working on short-term (1 to 2 week) projects that seemed fun and harmless, but wasted a lot of time when you add them all up. I simply wasn’t focused enough. Thinking back on it now makes me cringe.

Here are some things I wish I had never spent time on:

1. Invite-only access. Invites are traditionally a strategy for stoking interest in your product while also managing the scalability of your roll-out. In my case, all I accomplished was making some users angry when I left them on the invite list too long. It seems strange in retrospect that I would keep new users out of my app on purpose, but at the time I thought it would help with virality. Also, implementing the numerous moving parts of an invite-only access system consumed much engineering time.

2. Real-time traffic measurement. I went through a phase where I used GoSquared (and before that, Chartbeat) to observe users of my webapp in real-time. I was able to see how many visitors were on my site, where in the world they were coming from, which pages they were viewing, etc. Vanity metrics at its finest. And, of course, I had to waste time checking the traffic dashboard 10 times a day. Nowadays I ignore real-time stats and just use Google Analytics to look at historical trends.

3. User admin dashboard. Another engineering boondoggle, I built this amazingly detailed admin panel where I could view all my registered users along with matching social and biographical information pulled from the Qwerly API (since acquired by Fliptop). For example, if a new user Fred Bloggs signed in to my app with Facebook, I could also see Fred’s LinkedIn profile, his handle on Twitter and his picture. The original purpose of this dashboard was to identify influential users to further engage with, but I never found the time. And after my app gained more than a few thousand users, the dashboard became unscalable.

4. Experimenting with ads too early. I was so eager to attempt monetizing my site with ads that I placed grocery-coupon text links on the front page when I only had a few thousand uniques/day. Don’t know why I was surprised when only about ten people clicked on the ad. It was a cold-shower lesson in low CTR’s. You need real traction and attention on your site to attract quality advertisers, too.

5. Amazon affiliate links. Another monetization experiment I shouldn’t have tried in the first place, but was driven by an unfounded belief that users would want to purchase cookbooks while browsing my site. Building this system also consumed several days’ worth of engineering time—it required learning about the Amazon Affiliate API, writing code to match cookbooks to recipes, and so on. The final profit was less than $1/day. I have yet to meet anyone who is making serious money on the side with Amazon links.

6. TechCrunch. TechCrunch can be a good way to gain visibility among investors and the tech community in general, but in my experience, it didn’t have value beyond that. (Perhaps some SEO value.) I regret I expended so much mental energy figuring out how to get my startup covered on TC. When I finally did make it onto TechCrunch, both the article itself and the resulting traffic were very underwhelming. I should have concentrated on other outlets that are less tech-centric and more suited to my site’s audience—for example, LifeHacker and kottke.org, which ended up yielding 100x as many signups as TC.

7. One-off partnership projects. I once spent about two weeks building a custom prototype with my API as part of a potential partership with another company. The partnership was never fulfilled and the final result ended up basically zilch. There’s nothing particularly wrong with this situation; sometimes you have to gamble a little bit of upfront time for a larger gain down the road. But two weeks worth of time is way too valuable in the early days of a startup. I should have just said no thanks to the partnership and instead devoted that time to making my product more awesome.

8. Coffee meetings / “let’s jump on a call”. This is rookie stuff, but initially I was caught off guard by how insidious a “quick” meeting or phone call can be. They always go longer than expected, can eat up half a day of work, then destroy the productivity of the other half because of lost focus and having to play catch-up (especially if you’re writing code). It’s important to concentrate on meetings that add value or build relationships, and avoid the people who just want to pick your brain for their own purposes.

9. Excessive side projects. Side projects are like comfort food for coders. I’m a believer in doing a side project here and there to keep burnout at bay. Unfortunately, there was a period where I overdosed on them and was working on enough side projects to rival my real startup. I think it’s particularly easy to fall into this trap when your company is new but not brand new, i.e. traversing the Trough of Sorrow. Better to just suck it up and stay focused on product.

10. Working from home. I spent the first year of my startup working from a home office. After that, I moved to a spartan desk in a shared space in downtown Palo Alto. My productivity from the office space is easily 2-3x that of the home office. I can’t explain it well but there’s a mysterious psychological barrier that prevents me from truly cranking when I’m working from home. If I had started on day one working from an outside office, I’d be way further along on my company now. At the outset, I had no idea that would be true, though. Hindsight.
It’s easy to criticize with the benefit of hindsight, but I believe most of these mistakes were avoidable at the time. They all distracted me from the one strategy that always works no matter what—iterating on your product vision, listening to feedback, and working towards making your product awesome.




-----
good article...

Cheers,
June

화요일, 4월 17, 2012

CryENGINE 3 gives us a glimpse at the future of gaming [video]

CryENGINE 3 gives us a glimpse at the future of gaming [video]
Source: http://www.bgr.com/2012/04/16/cryengine-3-gives-us-a-glimpse-at-the-future-of-gaming-video/





-----
OMG, looks great!!!

Cheers,
June

월요일, 3월 12, 2012

방황해도 괜찮아

고도원의 아침편지


'방황해도 괜찮아'


기회는 얼마든지 있습니다.
내가 찾고 만들고 도전하면 됩니다.
젊다는 이유 하나만으로도 뭐든지
도전할 기회가 있습니다. 연구하고
도전하고 그에 대한 결과를 만들어
간다는 것은 성공 여부와 상관없이
그 자체만으로도 행복한 일입니다.


- 법륜의《방황해도 괜찮아》중에서 -


* 젊음에 주어지는
몇가지 특권이 있습니다.
방황과 실패입니다. 방황한 만큼
성숙해지고, 실패한 만큼 위대해집니다.
방황해야 또 다른 새로운 길을 찾게 되고
실패해야 또 다시 도전할 수 있습니다.
젊었을 때만 특권처럼 주어지는
아름다운 선물입니다.

-----
그래... 괜찮아...
Cheers,
June

목요일, 3월 01, 2012

[고도원의 아침편지] 서른다섯까지는 연습이다


고도원의 아침편지


서른다섯까지는 연습이다


'어어, 이게 아닌데...'
하면서도 무엇이 맞는 건지 잘 몰랐고,
내가 정답이라고 생각하며 내렸던 결정은
되레 덫이 되어 나를 넘어뜨리곤 했다.
내년이면 서른다섯이라는 생각에
새삼스럽게 그리고 소스라치게 놀란
어느 밤, 이제 그 헌 연습장일랑은 덮고
새 노트를 펼치고 싶다는 생각이 들었다.

- 노진희의《서른다섯까지는 연습이다》중에서 -

* 서른다섯.
기막히게 좋은 나이입니다.
지천명, 이순을 넘긴 사람들에게 서른다섯은
입을 쩍 벌리게 하는 '무한대'의 새파란 나무입니다.
뭐든지 할 수 있고 무엇이든 다시 시작할 수 있는
나이입니다. '어어, 이게 아닌데'가 아니라
'아아, 이제부터 진짜 시작이다' 외치며
신발끈을 다시 묶고 달려 나가십시오.
한숨 대신 함성을 지르며...


-----
꼭 서른다섯이 아니더라도 "서른다섯까지는 연습이다"
듣기 참 좋은 말입니다.
지금까지는 앞으로 달려 나아가기 위한 연습이었다.
이제 신발 끈이 잘 풀어지지 않게 맬 수 있으니 자신있게 한 번 뛰어보자...

Cheers,
June

토요일, 1월 14, 2012

The World is Full of Real People

Source: http://jumpstartlab.com/news/archives/2012/01/13/the-world-is-full-of-real-people/


The World is Full of Real People

Posted January 13, 2012 by Jeff

Yesterday at CodeMash 2012 in Sandusky, Ohio, I gave a five minute lightning talk about something that’s been in my mind: the developer’s life of priviledge. Here’s the text of my talk:

The World is Full of Real People

You are in a spot of exceptional privilege. You’re well paid to move your fingers around a keyboard. Your greatest danger is probably carpal-tunnel syndrome.

In a time when almost thirty percent of our country is unemployed or underemployed, you make jokes about how annoying recruiters are wanting to offer you job after job. There’s nothing here that’s your fault. You didn’t do anything wrong. This isn’t about blame and I’m not saying you should be ashamed of anything.

But you do need to recognize you lead a life of privilege.

We need to do more.

It is easy to write software for other developers. You understand what it’s like to be a developer, so you know exactly how they think and operate. If you want to make quick money, build tools that make developers lives easier.

We can all then form a big circle and pat each other on the back.

Meanwhile, your new testing framework didn’t make any jobs. It didn’t bring significant joy to anyone’s life. In the big scheme of things, you’ve taken your gifts and used them to pleasure yourself.

Let’s take a step back.

Real people don’t use technology, at least not the technology you build. Unless you work at Facebook, the chance of anyone at this hotel having ever heard of your company, much less your product, is slim. Why is that? Why do we build so many things for ourselves?

Because it’s easy.

Solving real problems is hard. Changing real lives is hard. Making real people happy is hard. When we do write things for the public, we find out that those users are “such idiots” – they can never do things properly. “It’s not worth it!”

You wield the power to make amazing change in the world. You can fix problems with a speed and scale that no other industry can match. Your work, once created, can be replicated at almost zero cost. Your power breaks economics, terrifies governments, and endangers the status quo.

Instead of measuring ourselves by the size of our Series A or our average profit per employee, let’s measure in lives changed.

I want to look back and say “I worked harder than I had to. I gave up time with my kids, with my friends, to do what needed to be done. To give back to the rest of the world, to enable them to live just a little bit happier, a little bit better.”

The problems of our world can’t be fixed with software, that’s naive. But they can be fixed by people, and great software helps people do what needs to be done.

As a developer you can only do so much. You don’t understand all the problems, the nuances, the challenges of the world. That’s ok. The people who do understand those challenges are desperate for your help – they’ll tell you everything you need to know. Just ask.

I’m not saying you need to change a thousand lives. But if you could say that you really changed ten, what would that feel like?

You might not ever have a Wikipedia page, but you’d live on in those ten memories – in the lineage of families they start, the kids that grow up happier because their parent is employed, less stressed, or otherwise improved. When you think about generations upon generations, the compound interest on the investment you make in others pays off in the biggest way.

Your software will be forgotten, but true impact never will.

What’s your mark on the earth? Is it big enough, is it deep enough, is it good enough?

Get to work. Thank you.


-----
Cheers,
June

목요일, 12월 29, 2011

구글이 프로그래머를 뽑는 법…



Source:
http://zublog.wordpress.com/2011/12/29/%EA%B5%AC%EA%B8%80%EC%9D%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EB%A5%BC-%EB%BD%91%EB%8A%94-%EB%B2%95/

구글이 프로그래머를 뽑는 법…
Posted on 12월 29, 2011
입사하기 전 인터뷰(면접)를 할 때부터 구글은 뭔가 다른 회사라는 것을 알 수 있었습니다. 10년 쯤 전이긴 하지만, 삼성에서 면접을 본 경험이 있었는데 구글의 인터뷰는 이와는 전혀 다른 경험이었습니다. 구글은 들어가기 전부터도 벌써 사람을 정말 공들여 뽑고 잘 키우는 회사라는 생각을 들게 만들었습니다.

[구글이 원하는 인재]

1. 우선 구글은 skillset (기술) 보다는 problem solving ability (문제해결능력)에 더 중점을 두어 사람을 뽑습니다. 예를 들어 구글의 Irvine 사무실에서는 대부분 Java룰 사용하지만 저는 Java를 전혀 못하는데도 인터뷰를 할 수 있었고 인터뷰할 때에는 C/C++에 대한 면접만 봤습니다. 구글에서는 어차피 프로그램언어나 개별적인 기술들(skillset)은 5년마다 새로 배워야 하는 것들이라 이보다는 한가지 언어라도 확실히 이해하고 있는지, problem solving을 할 수 있는 전산학의 기초를 제대로 가지고 있는 지가 더 중요하다고 봅니다.

2. 구글은 전산학의 기초를 아주 중요하게 봅니다. 따라서 가장 중요한 인터뷰 질문들은 마치 학부의 data structure 과목 시험문제와 같습니다.

3. 구글은 코딩도 아주 중요하게 봅니다. 그런데 얼마나 넓게 아느냐보다는 얼마나 깊게 아느냐를 봅니다. 예를 들어 Java의 API를 많이 알고 있는 것보다는 Object Oriented 언어의 기본적인 개념을 얼마나 잘 이해하고 있는지를 봅니다.

[인터뷰 진행 방식]

1. 서류심사: 구글은 합격률이 1% 미만이라 어쩔 수 없이 서류심사에서 95%이상이 걸러 집니다.

2. HR (인사과) 전화 interview: 처음이자 마지막 non-technical interview로 경력 등에 대한 20분정도의 문답을 합니다. 일반적으로 면접때 많이 물어 보는 ‘왜 우리회사에 입사하느냐’/’10년후의 목표는 무엇이냐’ 등등의 질문들도 거의 없고 주로 어떤 일을 했는지, 어떤 경험을 가졌는지, 어떤 일을 하고 싶은지 등을 묻습니다.

3. 전화 인터뷰: 실제로 구글에서 일하는 Software Engineer가 전화면접을 합니다. 보통 2번 정도 하는데 질문은 자기소개 및 한 일들에 대한 것들은 간단하게만 묻고 이후로는 30분이상 data structure 및 programming에 대한 질문을 합니다. 종이와 연필을 가지고 써 가면서 문제를 풀어 대답해야 합니다. 문제는 보통 이런 식입니다 (google로 google interview questions라고 찾아봐도 예가 나옵니다 ^^):

integer operation으로 log를 구현하려면 어떻게 하는가? 이경우 총 연산의 수는?
두개의 sort된 행렬을 merge하려면 어떻게 하는가? 이 경우 complexity는 어떻게 되는가?
C++ class의 static variable은 어떤 의미가 있고 어떻게 쓰이는가?
그런데 예상문제를 열심히 풀어 보는게 어느 정도 도움은 되지만 대입시험처럼 그걸로 합격할 수 있지는 않습니다. 그 이유는 뒤에…

4. On-site 인터뷰: 직접 구글 사무실에 가서 5시간 정도 인터뷰를 합니다. 중간에 인터뷰에 포함 안되는 점심시간이 있지만, 거의 쉴 새 없이 엄청난 체력전으로 치러 집니다. 모든 인터뷰는 technical한 내용만 합니다. 5명의 면접관이 한 명씩 면접실에 들어와 한 사람당 45분가량 인터뷰를 합니다. 인터뷰 내용은 전화면접과 비슷한데 programming의 기초에 대한 질문들을 간단히 물어 보고는 위의 행렬 merge 같은 문제를 냅니다. 문제를 풀면 제시한 해답의 complexity를 물어 보고는 이를 칠판에다 손으로 써서 구현하라고 합니다.

그런데 인터뷰의 핵심은 사실 정답을 맞추느냐를 보는 것이 아니라 문제를 푸는 과정을 보는 것입니다. 처음부터 잘 define되지 않은 문제를 주어 면접자의 문제를 정의하는 능력을 보고 또 면접자가 헤메고 있으면 면접관이 옆에서 도와 주며 푸는 과정을 보고, 해답을 제시하면 이보다 더 optimal한 방법은 없을지 찾아 보라고 합니다. 사실 정답이 하나가 아닌 문제들이기 때문에 이렇게 intensive하게, interactive하게 인터뷰를 하면 면접자의 실력이 드러날 수 밖에 없습니다.

구글은 사실 잘나가는 회사이기 때문에 구글의 philosophy는 긴가민가하는 사람은 안 뽑는게 낫다입니다. 못하는 사람을 뽑는 것보다는 잘하는 사람을 놓치는 게 낫다는 거죠 (사람을 해고하기 가장 좋은 시기는 채용하기 전이라는 격언도 있습니다 ^^). 하지만(!) 면접에서 한 번 떨어 진다고 하더라도 6개월만 지나면 다시 지원할 수 있도록 기회를 열어 주고 또 다시 지원하기를 권합니다. 저도 사실 인터뷰에서 떨어진 경험이 있습니다 ^^;

제 경험으로는 한국의 회사들이 구글처럼 공들여 사람을 뽑지는 않는 것 같습니다. 구글 수준의 엘리트들을 뽑는 것은 아니더라도 기본적인 data structure에 대한 이해가 있는지를 알아 보는 것은 중요하고 또 눈 앞에서 칠판에다가 코딩을 해 보라고 하는 것 역시 아주 중요합니다. (미국의) 작은 회사에서 인터뷰를 해 본 어떤 사람이 스펙이 꽤 좋은 사람 중에서도 아주 기본적인 수열 문제조차도 제대로 코딩하지 못하는 경우를 많이 봤다고 합니다. 물론 이를 위해서는 면접관의 능력 역시 중요하죠. 그래서 구글에서는 면접관에 대한 training 역시 따로 합니다.

물론 한국의 일반적인 소프트웨어 회사가 구글처럼 잘할 것 같은 사람들을 막 떨어 뜨릴 여유가 있는 건 아닐지 모릅니다. 취직하려는 사람은 일자리가 없다지만 뽑는 사람들은 뽑을 만한 사람이 없다니까요. 그래도 인터뷰를 제대로 하는 것은 중요합니다. 그래야 응시생들이 기초를 공부하려 하겠지요. 그렇지만 사실 사람을 잘 뽑는 것만큼 뽑은 사람을 잘 키우는 것도 중요합니다.

[뽑은 이후...]

구글의 좋은 점은 좋은 사람을 뽑은 후에 이들이 잘 성장할 수 있는 기회를 많이 준다는 것입니다. 프로그래밍에 대한 training도 많고 여러가지 교육의 기회를 줍니다. 또 유명한 80-20을 통해 자신이 하고싶은 일에 20%의 시간을 투자할 수 있게 해 줍니다.

제가 한국에 있는 회사에서 작성한 코드를 한 번 본 적이 있습니다. 그런데 코딩에 대한 회사차원의 체계가 전혀 없었고 프로그래머는 아니었어도 전산과 출신 직원이 작성한 코드였지는 간단한 optimization에 대한 이해도 없이.  지금 학교에서의 coding 교육이 어떤지는 잘 모르지만, 사실 깔끔한 코딩은 회사에서 체계적인 교육 및 시스템으로 뒷바침하지 않으면 나오기가 쉽지 않습니다.

한가지 더, 한국은 코딩에 대한 인식이 낮고 또 모든 분야에서 어느 정도 경력이 쌓이면 관리직으로 물러나거나 시스템 디자인에만 관여하는 것이 일반적이라 (개인적으로는 아주 큰 문제라고 생각합니다) 소프트웨어 회사에서 좋은 코드를 만들기 위한 체계적인 노력이 부족합니다. 한국회사에서보다는 미국회사에서 일반적인 미국회사에서보다는 구글에서 60세된 프로그래머를 더 쉽게 찾아 볼 수 있습니다.

앞으로 회사를 다니며 더 많이 배우겠지만… 사람을 공들여 뽑고 또 뽑은 사람에게 발전의 기회를 제공할 때에, 또 전산학의 기초와 좋은 코딩을 중요하게 생각할 때에 좋은 소프트웨어가 나온다는 생각입니다.



-----
Cheers,
June

월요일, 12월 05, 2011

HTTPS github access (repo with Curl)

HTTPS github access (repo with Curl)

Source: http://stackoverflow.com/questions/3777075/https-github-access

[Problem]
HTTPS github access (repo with Curl)
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:

[Summary] (i chose the way)
just set an environment variable to disable SSL verify.
$ export GIT_SSL_NO_VERIFY=true

that's it.

-----
Cheers,
June

금요일, 11월 25, 2011

x86 kernel build chain - how bzImage gets created

x86 kernel build chain - how bzImage gets created
Source: http://lists.kernelnewbies.org/pipermail/kernelnewbies/2011-November/003906.html

Graeme Russ graeme.russ at gmail.com 
Tue Nov 22 05:46:31 EST 2011

Hi All,

Hopefully this will help demystify the build process

Notation:
 ()
  |
  + 
  |
  * 
  |
  \->  ()

The file sizes are arbitrary and are based on the current configuration
options I have set for a small kernel. They are simply there to illustrate
the relative differences in file sizes.

Note that vmlinux.o is not used to generate bzImage but I've included it
for completeness

+ arch/x86/kernel/head_32.o
+ arch/x86/kernel/head32.o
+ arch/x86/kernel/head.o
+ arch/x86/kernel/init_task.o
+ init/built-in.o
+ usr/built-in.o
+ arch/x86/built-in.o
+ kernel/built-in.o
+ mm/built-in.o
+ fs/built-in.o
+ ipc/built-in.o
+ security/built-in.o
+ crypto/built-in.o
+ block/built-in.o
+ lib/lib.a
+ arch/x86/lib/lib.a
+ lib/built-in.o
+ arch/x86/lib/built-in.o
+ drivers/built-in.o
+ sound/built-in.o
+ firmware/built-in.o
+ arch/x86/pci/built-in.o
+ net/built-in.o
|
* ld -m elf_i386 -r -o vmlinux.o
|
\->vmlinux.o (2,889,050)

+ arch/x86/kernel/head_32.o
+ arch/x86/kernel/head32.o
+ arch/x86/kernel/head.o
+ arch/x86/kernel/init_task.o
+ init/built-in.o
+ usr/built-in.o
+ arch/x86/built-in.o
+ kernel/built-in.o
+ mm/built-in.o
+ fs/built-in.o
+ ipc/built-in.o
+ security/built-in.o
+ crypto/built-in.o
+ block/built-in.o
+ lib/lib.a
+ arch/x86/lib/lib.a
+ lib/built-in.o
+ arch/x86/lib/built-in.o
+ drivers/built-in.o
+ sound/built-in.o
+ firmware/built-in.o
+ arch/x86/pci/built-in.o
+ net/built-in.o
+ .tmp_kallsyms2.o
|
* ld -m elf_i386 --build-id -T arch/x86/kernel/vmlinux.lds
|
\->vmlinux (2,629,659)
   |
   * objcopy -R .comment -S
   |
   \->arch/x86/boot/compressed/vmlinux.bin (2,094,132)
      |
      * gzip
      |
      \-> arch/x86/boot/compressed/vmlinux.bin.gz (1,074,711)
         |
         * .incbin
         |
         \-> piggy.S
            |
            * gcc
            |
            \-> piggy.o (1,075,419)
               |
               + arch/x86/boot/compressed/head_32.o
               + arch/x86/boot/compressed/misc.o
               + arch/x86/boot/compressed/string.o
               + arch/x86/boot/compressed/cmdline.o
               + arch/x86/boot/compressed/early_serial_console.o
               |
               * ld -m elf_i386 -T arch/x86/boot/compressed/vmlinux.lds
               |
               \->arch/x86/boot/compressed/vmlinux (1,099,538)
                  |
                  * objcopy -O binary -R .note -R .comment -S
                  |
                  \-> arch/x86/boot/vmlinux.bin (1,092,060)
                     |
                     |   + arch/x86/boot/a20.o
                     |   + arch/x86/boot/bioscall.o
                     |   + arch/x86/boot/cmdline.o
                     |   + arch/x86/boot/copy.o
                     |   + arch/x86/boot/cpu.o
                     |   + arch/x86/boot/cpucheck.o
                     |   + arch/x86/boot/early_serial_console.o
                     |   + arch/x86/boot/edd.o
                     |   + arch/x86/boot/header.o
                     |   + arch/x86/boot/main.o
                     |   + arch/x86/boot/mca.o
                     |   + arch/x86/boot/memory.o
                     |   + arch/x86/boot/pm.o
                     |   + arch/x86/boot/pmjump.o
                     |   + arch/x86/boot/printf.o
                     |   + arch/x86/boot/regs.o
                     |   + arch/x86/boot/string.o
                     |   + arch/x86/boot/tty.o
                     |   + arch/x86/boot/video.o
                     |   + arch/x86/boot/video-mode.o
                     |   + arch/x86/boot/version.o
                     |   + arch/x86/boot/video-vga.o
                     |   + arch/x86/boot/video-vesa.o
                     |   + arch/x86/boot/video-bios.o
                     |   |
                     |   * ld -m elf_i386 -T arch/x86/boot/setup.ld
                     |   |
                     |   \->arch/x86/boot/setup.elf (186,171)
                     |      |
                     |      * objcopy -O binary arch/x86/boot/setup.elf
                     |      |
                     +      \-> arch/x86/boot/setup.bin (12,604)
                     |
                     * arch/x86/boot/tools/build
                     |
                     \-> arch/x86/boot/bzImage (1,104,864)


-----
Cheers,
June

일요일, 11월 20, 2011

싸가지와 느자구

싸가지와 느자구
Source: http://blog.daum.net/ysnaju/8673856


싸가지와 느자구종종 경우 없고 버릇 없는 사람을 보면 "늦쪽바가지 없다"는 말을 썼더니 어떤 이가 "그게 뭔 말이냐?"고 물어온다. 가만 생각해보니 대체나 확실한 의미를 알고 쓴 말을 아닌 듯하여 말의 뿌리를 찾아 나섰다.

인터넷 몇 곳을 뒤져봐도 정확하게 '늦쪽바가지'라는 말의 흔적은 찾기 어렵고 아마도 이건 전라도 특히 나주에서 나고 자라면서 주워들은 이쪽 사람들의 방언이 아닐까 싶고, 늦없다, 느자구없다에서 좀 더 어감을 강하게 하기 위해서 나 혼자 만들어 쓴 말이 아닐까 싶기도 하다.

전라도 말에는 '싸가지'와 비슷한 의미를 갖는 '느자구'라는 말이 있다. 이 말도 '싸가지'처럼 '느자구 있다'나 '느자구 없다'처럼 존재 동사인 '있다'나 '없다'와만 어울려 쓰이는 특징을 갖는다. '느자구'는 어원적으로 '늦'이라는 명사에 '-아구'라는 접미사가 결합된 것으로 보아야 한다.

명사 '늦'은 전라도 말에서 '늣'으로 홀로 쓰이는 수도 있는데, 그 의미는 '느자구'와 같다. 그래서 '쩌 놈은 허는 것이 늣이 있어'라 하기도 하고, '늣 없는 놈헌테는 기대를 말아야제'라 쓰기도 한다. 이 '늣'은 옛말에 '늦'으로 나타나는데, <조짐>이나 <징조>를 뜻하던 말이었다.

그래서 『용비어천가』에는 '寶位 실 느지르샷다(是寶位將登之祥)'와 같은 말이 보이고, 『월인석보』에는 '죽사리 버서날 느지오'와 같은 표현도 나타난다. 이 옛말의 '늦'이 전라도 말에서 '늣'으로 변했지만, 접미사 '-아구'가 붙은 '느자구'에는 원래의 형태가 그대로 남아 있다.

이처럼 '늦'이 홀로 쓰일 때에는 '늣'이 되지만 복합어에서는 '늦'으로 남아 있는 것은, 언어 변화에서 흔히 볼 수 있는 현상이다. 복합어 안에서는 언어 변화가 잘 일어나지 않기 때문이다.

'싸가지'가 구체적 명사인 '싹'으로부터 파생되어 <앞이 트일 징조>와 같은 추상적 의미로 변해 갔다면, '느자구'는 처음부터 <징조>나 <조짐>의 뜻을 가졌던 것이다. 옛말 '늦'이 가치 중립적인 <징조>의 뜻만을 가졌던 것인지, 아니면 긍정적인 의미인 <앞으로 일이 잘 될 징조>를 가졌던 것인지에 대해서는 확인이 필요한 일이나, '느자구'는 '싸가지'와 달리 애초부터 추상적 의미를 가졌던 것임은 분명하다.

오늘날 '싸가지 없다'나 '느자구 없다'는 사람의 행동이나 말이 형편없음을 가리키는 의미로 쓰인다. 원래는 그 형편없는 말이나 행동으로 미루어 그 사람의 앞날 역시 형편없으리라는 뜻이 담겼을 터이지만, 근자에는 장래에 대한 부정적 징조보다는 단순히 눈앞에 벌어지는 행태가 형편없음을 의미하는 것으로 남게 되었다.



-----
Cheers,
June

목요일, 11월 03, 2011

Khan Academy; A free world-class education for anyone anywhere.

Khan Academy
Source: http://www.khanacademy.org/


A free world-class education for anyone anywhere.

The Khan Academy is an organization on a mission. We're a not-for-profit with the goal of changing education for the better by providing a free world-class education to anyone anywhere.
All of the site's resources are available to anyone. It doesn't matter if you are a student, teacher, home-schooler, principal, adult returning to the classroom after 20 years, or a friendly alien just trying to get a leg up in earthly biology. The Khan Academy's materials and resources are available to you completely free of charge.


-----
무료 동영상 강의가 많네요... ^^

Cheers,
June

Get Better

Get Better
Source: http://swanson.github.com/blog/2011/10/24/get-better.html


October 24, 2011
… the sooner you care, the better you’ll make. The better you’ll do. And thebetter you’ll live.
Take 5 minutes to:
  • Read the most interesting blog post in your RSS reader
  • Look through the code you wrote today and find a place to improve
  • Write down any problems you encountered today
  • Learn a new keyboard shortcut for your IDE, source control tool, or shell
  • Ask a co-worker if they’ve read anything interesting lately
Take 15 minutes to:
  • Refactor a piece of code you wrote this week
  • Find code that’s missing tests and add one
  • Update your team/company wiki
  • Read a few of the top stories on news.yc or /r/programming
  • Read a chapter in a technical book
  • Write a thoughtful comment on a blog post
Take 30 minutes to:
  • Watch a talk from a conference that interests you
  • Write a blog post about a bug you encountered and how you fixed it
  • Write a blog post about something you’ve been working on or learning about
  • Listen to a podcast - here are some I like: Podcast Roundup
  • Do a kata or a problem on Project Euler
  • Attend a brownbag or lunch-and-learn
Take an hour a week to:
  • Help an open source library that you use - patchs, documentation, bugs
  • Work on a side-project on your own
  • Watch a screencast about something new
  • Try to answer some questions on StackOverflow
  • Do prep work to host a brownbag or meetup talk
  • Take an online class: Stanford courses on iPhoneMachine LearningAI
Take 2 hours a month to:
  • Go to a local dev meetup
  • Take someone you look up to out to lunch and pick their brain
  • Do self reflection and update your position on The Long Road
  • Plan out how to Get Better over the next month
Take a weekend a year to:
Take one minute a day - just 60 seconds - to stop and ask yourself this question:
Did I Get Better today?
If you aren’t happy with your answer, do something about it.


-----
Cheers,
June

Engineering - Over/Under: I'm a Serial Over Committer

Engineering - Over/Under: I'm a Serial Over Committer
Source: http://swanson.github.com/blog/2011/11/02/engineering-over-under.html


November 02, 2011
Over committing - taking on too many things at once - is a pretty established anti-pattern.
When you have too much work in progress, you start to lose focus. You might be able to keep your head above water, but you end up just doing an okay job on everything, instead of doing a great job on anything.
Taking on a bunch of extra work and then not delivering is a big hit to your credibility. Crunch time comes and you feel the pressure; you start getting stressed and everything is on the verge of falling apart.
Okay, so I’ll avoid over committing to a bunch of stuff, you might say - I’ve got this all figured out!
Well, not exactly.
Suppose your manager comes over and asks if you want to work on a speculative new project - it’s interesting technology but it’s going to require some extra work on your own time. You decide to pass on the opportunity. No problem.
Nothing undesirable happens immediately as a result - except that maybe your manager is a little bummed out. But maybe the next time one of these projects comes up, they’ll ask Bob first. Maybe that speculative project turns into a full fledged project and you missed your chance to work on it.
What if you said yes to the initial offer, but didn’t follow through? You were gung-ho that afternoon but 2 weeks later, you’ve lost all interest. How is that perceived? Do you lack the ability to be a finisher?
With that in mind, do you go back in time and agree to the project even though you had 20 other things on your plate? The desire to not under commit and miss an opportunity has caused you to over commit!
Maybe this isn’t an issue for anyone else - feel free to chime in and tell me I’m way over analyzing - but as a young developer trying to improve my craft and move up the hierarchy at work this is something I struggle with frequently.
I am a serial over committer.
I start new side projects when I find something that excites me - I hype myself up, maybe I start a series of blog posts but then it fizzles. I sign up to give talks almost every month, often with nothing more than a basic idea of what I’m going to be presenting about two weeks later.
Right now, I’m working on two extra work-related projects, helping organize a friendly blogging competition, finishing a book club and I signed up to pitch an idea for a new series of internal projects at the end of the month. This isn’t a badge of honor or something to brag about; I’ve committed myself to way more than I should have and it’s not sustainable.
“But you never finish anything!” is a meme that co-workers jokingly needle me with.
It’s a flaw of mine that I’m trying to work on. I’m starting to learn why I do it - I don’t want to miss out on any opportunities. I want to be that go-to person, that expert, that guy who Gets Shit Done. And I’m impatient. And I have this irrational fear that I’ll miss that one magically project that I’ll love and another one will never come.
I need to find the right balance of over/under committing. And striking that balance is a hard problem. Like cache invalidation hard.


-----
Cheers,
June

금요일, 10월 28, 2011

[CV] Microsoft's Productivity Future Vision (2011)


Microsoft's Productivity Future Vision (2011)
Source:

Watch how future technology will help people make better use of their time, focus their attention, and strengthen relationships while getting things done at work, home, and on the go. (Release: 2011)



-----
wow... great!!!

Cheers,
June

[CV] OmniTouch - Demo Video - ACM UIST 2011

OmniTouch - Demo Video - ACM UIST 2011
Source: http://www.chrisharrison.net/index.php/Research/OmniTouch



-----
great!!!

Cheers,
June

[CV] Microsoft HoloDesk lets users handle virtual 3D objects

Microsoft Research 에서 연구하는 '홀로데스크' 입니다.

Source: http://www.gizmag.com/holodesk-lets-users-handle-virtual-3d-objects/20257/
Microsoft HoloDesk lets users handle virtual 3D objects

Video


-----
it's great!!!

Cheers,
June