Archive for the ‘complaint’ Category

Either OS X for Windows or Visual Studio supporting Obj-c, Cocoa and other Apple’s frameworks.

I want to hear…”Hello, again from general Windows H/W.”

Don’t want slimmer notebooks, non customizable H/W. non-retina MBP and polycarbonate MB had easiest upgradability of RAM and storage devices.

They got rid of those options from MBs and even from Mac minis. Instead of making adding or replacing internal storage in Mac mini, they removed memory slots, and kept it difficult to upgrade.

Look at HP’s Mac mini-like mini PC!

Due to the cylindrical Mac Pro, extension card manufacturers need to design additionally for Mac Pro and hire device driver engineers. It reduced chance for video card companies to prepare one designed for general Windows PC for Mac with a driver for Mac.

It also raised costs

Seriously, other than S/W developers who know the benefit of Cocoa, who will choose Mac over Windows when they have the same Photoshop, Adobe Premiere etc?

I like Apples aesthetic side of MacBook Pros, but do Dell’s XPS notebook look bad? No!

There can be less expensive but good looking computers with good qualities! Why do ๐ŸŽ’s product decision makers overlook that fact?

It will be better if there is OS X for Windows box. (Anyway there is no difference in their H/W arch.)L

Or if Visual c++ also supports Obj-C, Cocoa and Av foundation etc!

Advertisements

A way to get out of the squirrel treadwheel

I was trying to figure out how to create ID2D1Bitmap1 instance which is to be mapped to memory region. But I found out that MSDN documentation put me in self-repeating cycle ( so, I call it squirrel treadwheel. ). In on document it says, the options can’t be used for bitmap instance created with ID2D1DeviceContext, while on the other page, the device context is to be used to create ID2D1Bitmap.

I posted this to MSDN page, ID2D1Bitmap1::Map page.


 

“These flags will be not be able to be used on bitmaps created by the ID2D1DeviceContext”

However on this “ID2D1Bitmap1 interface” page, it says :

Creating ID2D1Bitmap Objects

Use one of these methods to create an ID2D1Bitmap object.

ID2D1DeviceContext::CreateBitmap
ID2D1DeviceContext::CreateBitmapFromWicBitmap

It’s a squirrel’s wheelmill. Don’t you think so?
( this flags can’t be created by ID2D1DeviceContext => on other page, ID2D1Bitmap1 is created using those device context.)

Moreover, throughout Direct2D/DirectWrite and related technology pages, it’s not clear whether methods/functions returns using a parent class pointer ( like ID2D1Bitmap *) can actually return one for its child class instance like ID2D1Bitmap1. By trial and error, I found out that it’s strictly for the stated class. It’s better to be documented. ( Especially you guys are aware of that C++ has supported late binding.)

Secondly, for this issue on how to create ID2D1Bitmap1 with D2D1_MAP_OPTIONS_READ, and thus D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ specified in creating an instance of ID2D1Bitmap1, I found some answer here.

The post marked as “Answers”, he created an instance of ID2D1Bitmap1 using CreateBitmap() method of ID2D1DeviceContenxt. It’s opposite to what is mentioned on this page. ( for your convenience, I put it on the top. This document clearly said “These flags will not be able to be used on bitmaps created by ID2D1DeviceContext.” ) You can see that the ID2D1Bitmap1 is created using the device context’s CreateBitmap() method, and it has CPU_READ and CANNOT_DRAW option, and when Map() is called, D2D1_MAP_OPTIONS_READ is specified.

I will test this. But because people marked it as an “Answer”, I sort of believe that it works.

MSDN document is a squirrel treadwheel

D2D1_MAP_OPTIONS enumerationย states that D2D1_MAP_OPTIONS_READ is not available on bitmaps created by ID2D1DeviceContext. Then, to figure out how to create ID2D1Bitmap1, which Map() can be used for, if we visit toย ID2D1Bitmap1 interfaceย page, it says “use one of these methods to create and ID2D1Bitmap object.

ID2D1DeviceContext::CreateBitmap
ID2D1DeviceContext::CreateBitmapFromWicBitmap

Didn’t it say that D2D1_MAP_OPTIONS_READ is not available for bitamps created by ID2D1DeviceContext?

Shouldn’t there be more way to create ID2D1Bitmap1?
Since 1990, MSDN document has never been good. However, after they adopted “community-based documentation” model, it became even worse. For example, some pages contain just meaningless vague information. Some pages contain sentences which can be understood in many different ways…

Come on, Microsoft people! What are you guys thinking about? Do you guys really think the MSDN document is good?
It’s also creating ID2D1Bitmap1 by “ID2D1DeviceContext”.

Microsoft SDK? Windows Kit?

MS๋Š” ์ฐธ ์›ƒ๊ธฐ๋Š” ๊ฒƒ์ด..

Windows SDK๋ฅผ Win 7๋•Œ๋Š” Microsoft SDK ํด๋”์— ๋‹ค ์„ค์น˜ํ•˜๋”๋‹ˆ, Win 8 SDK๋Š” .NET์ชฝ์€ ์—ฌ์ „ํžˆ ๊ฑฐ๊ธฐ์—, ๊ทธ ์™ธ๋Š” Windows Kit์— ์„ค์น˜ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ Win 7์€ DirectX/2D/3D๋“ฑ์ด Microsoft SDK์— ์žˆ๊ณ , Win8 SDK๋Š” Windows Kits์— ์žˆ๋‹ค.
๋ฌธ์ œ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์—ฌ์ „ํžˆ Microsoft SDK์— ๊ฐ€์„œ ํ—ค๋”๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, Win 8 SDK๋ฅผ VS 2012๋“ฑ์— ์„ค์น˜ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์„ค์น˜๋œ SDK๋ฅผ ์ธ์‹ ๋ชปํ•œ๋‹ค.

๋„๋Œ€์ฒด ์™œ ์ด๋Ÿฌ๋ƒ MS? ์ข€ ์ผ๊ด€์ ์œผ๋กœ ํ•ด๋ผ.

์‚ฌ๋žŒ์ด ๋งŽ์ด ๋“ค๋Ÿฌ ๋ถ™์–ด์„œ ๋งŒ๋“œ๋‹ˆ๊นŒ, ์–ด๋Š ์ •๋„ ๋ฐ”๋ณด ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒƒ์€ ์ดํ•ดํ•œ๋‹ค.
๊ทผ๋ฐ ๊ฐ€๋งŒ ๋ณด๋ฉด.. ์•ˆ๋“œ๋กœ์ด๋“œ๋‚˜ ์œˆ๋„์šฐ์ฆˆ ์ชฝ์€ ์„œ๋กœ ๋น„์Šทํ•œ ๋ฐ๊ฐ€ ์žˆ๋‹ค.
๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์ด๋ ‡๊ฒŒ ์ผ๊ด€์„ฑ ์—†๋Š” ์ผ์ด ์ƒ๊ธธ ๋•Œ ๋ณด๋ฉด, ์–˜๋„ค๋“ค์€ ๋ญ”๊ฐ€ ๊ฐœ๋…์ด ์—†์–ด ๋ณด์ธ๋‹ค.
๋ฐ˜๋ฉด์— ์• ํ”Œ์ชฝ์—์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋Š”, ๋ฌธ์ œ๋ฅผ ์ธ์‹์€ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ด ์—†์–ด์„œ ๋ชปํ•˜๋Š” ๋Š๋‚Œ์ด ๋‚˜๊ณ .

์ ์–ด๋„ ์ ‘์ด‰์„ ํ•ด๋ด๋„, ์• ํ”Œ ์ชฝ์€ ๋‹ต๋ณ€์ด ๋น„๊ต์  ๊ฐ์„ ์žก๊ณ  ์˜จ๋‹ค. (๋ฌผ๋ก  ์ตœ๊ทผ 5๋…„ ์‚ฌ์ด์—” ๋ฌด์ฒ™ ํ›„์ ธ์กŒ๋‹ค. Xcode 4 ์ด๋ž˜๋กœ. Xcode 4๋ฅผ ๋ˆ„๊ฐ€ ๋งŒ๋“ ์ง€ ์•ˆ๋‹ค. ์• ํ”Œ ๋‚ด์—์„œ๋„ ์žก์Œ์ด ๋งŽ์•˜๋˜ ๊ฒƒ์œผ๋กœ ์•ˆ๋‹ค. ๋ฒ„๊ทธ ๋ฆฌํฌํŒ…์„ ํ•˜๋ฉด ์˜ค๋Š” ๋‹ต๋ณ€์˜ ํƒœ๋„๋‚˜ ๋ฐฉ์‹์ด ์ด์ „์— ๋น„ํ•ด ์—‰๋ง์ด๋‹ค.)
ํ•˜์ง€๋งŒย  MS์ชฝ์ด๋‚˜ Android ์ชฝ/์ „๋ฐ˜์  ๊ตฌ๊ธ€์ชฝ์€ ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋‹ค.
๊ทธ๋ž˜๋„ ์˜ˆ์ „์— ๊ตฌ๊ธ€์—์„œ Picasa app ๋‚˜์˜ค๊ณ  ํ•  ๋• ๊ดœ์ฐฎ์•˜๋Š”๋ฐ. S/W์— ๊ฐœ๋…์ด ์žˆ๋Š” ํšŒ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ…

ํ•œ์ชฝ๋งŒ ์ด์•ผ๊ธฐ ํ•˜๋ฉด, ์œˆ๋น ๋„ค, ์• ํ”Œ๋น ๋„ค๋“ค ์†Œ๋ฆฌ๋“ค ํ•  ๊ฑฐ ๊ฐ™์€๋ฐ.. ๋‚œ ์œˆ๋„์šฐ์ฆˆ, ๋งฅ, ์œ ๋‹‰์Šค ๋‹ค ํ•˜๋Š” ์‚ฌ๋žŒ์ด๊ณ ..
์„ ํ˜ธํ•˜๋Š” ํ”Œ๋žซํผ์€ ์žˆ์–ด๋„, ๋ฌด์กฐ๊ฑด ํ•œ์ชฝ์„ ์ข‹๋‹คํ•˜์ง„ ์•Š๋Š”๋‹ค. ๋‚˜๊ฐ™์€ ์‚ฌ๋žŒ์ด ๋ฏธ๊ตญ์—์„œ๋„ ์—„์ฒญ ์ ๋”๋ผ. ๋ง์ด ์—”์ง€๋‹ˆ์–ด๋“ค์ด์ง€ ๋น ๋“ค์— ๊ฐ€๊นŒ์›Œ์„œ.. ์ž๊ธฐ๊ฐ€ ์‹ซ์–ดํ•˜๋Š” ํ”Œ๋žซํผ ์ชฝ์€ ๋ฌด์กฐ๊ฑด ๋‚˜์˜๋‹คํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํƒœ๋ฐ˜์ด๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ ๋ฌธ์ œ๋ฅผ ๊ณต๋ก ํ™”ํ•˜๊ธฐ๋„ ์ฐธ ํž˜๋“ค๋‹ค.

NSOperation๊ณผ Key-value Observing, ๊ทธ๋ฆฌ๊ณ  performSelector:…

NSOperation๋“ฑ์ด ํŽธํ•œ ๊ฑด ์•ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ thread/operation๊ฐ„์˜ ๋™์ž‘์„ ์œ„ํ•ด์„œ, KVO์™€ ํ•จ๊ป˜ ์“ฐ๋ฉด ๋„๋ฌด์ง€ ๋ˆ„๊ฐ€ caller์ธ์ง€ ์•Œ๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค.
NSOperation์€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ ์™ธ์—๋„ multicore์— task๋ฅผ ์–ด๋–ป๊ฒŒ ํ•œ ๋‹จ์œ„๋กœ ๋ถ„์‚ฐ ์‹œํ‚ฌ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์—์„œ ๋‚˜์˜จ๊ฒŒ ๋” ๊ธฐ๋ณธ์  ์ด์œ  ์•„๋‹ˆ๋ƒ?
์“ด๋‹ค๊ณ  ๋ฌด์ž‘์ • ๋‹ค ์“ธ๊ฒŒ ์•„๋‹ˆ๋ผ, ์™œ ๋งŒ๋“ค์—ˆ๋Š”๊ฐ€์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์จ์•ผ ํ•œ๋‹ค.

๋˜ํ•œ NSOperation์„ ์“ธ ๋•Œ, dependency๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ง‰ ์“ฐ๋ฉด์„œ, ๋‹จ์ˆœํžˆ ํƒ€์ด๋ฐ์ƒ ์–ด๋–ค ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ operation์œผ๋กœ ์ง€์ •๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋จผ์ € ํ˜น์€ ๋Šฆ๊ฒŒ ์ˆ˜ํ–‰ ๋  ๊ฒƒ์ด ๊ฑฐ์˜ 100%๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ dependency ์•ˆ์“ฐ๊ณ  ๋ง‰ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ.. ๋””๋ฒ„๊น…์‹œ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค.

์ƒˆ๋กœ์šด API ๋ฌด์กฐ๊ฑด ์“ด๋‹ค๊ณ  ์ข‹์€๊ฒŒ ์•„๋‹ˆ๋‹ค.
๋ญ๋“  ์ดํ•ดํ•˜๊ณ  ์ž˜ ์“ฐ๋Š”๊ฒŒ ์ข‹์€๊ฑฐ์ง€.

ํ•˜๊ธด ๋ ˆ์ฃผ๋ฉ”์—” ๋ญ ์จ ๋ดค๊ณ , ์ธํ„ฐ๋ทฐ ์‹œ์— ๊ทธ๊ฑฐ ์จ๋ณธ ๊ฒฝํ—˜ ์ด์•ผ๊ธฐํ•˜๋ฉด “์ž˜ ์•„๋Š” ์‚ฌ๋žŒ”์œผ๋กœ ์ธ์ง€์‹œํ‚ฌ ์ˆœ ์žˆ๊ฒ ์ง€.

๋งŽ์€ Xcode์˜ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜

๊ทธ ๋ง๋„ ๋งŽ๊ณ  ํƒˆ๋„ ๋งŽ์€ Xcode 4๋ฅผ ๋„˜์–ด์„œ ์ด์ œ Xcode 5๊นŒ์ง€ ์™”๋‹ค.

๋ฌผ๋ก  ๊ทธ๋™์•ˆ ๊ฐœ์„ ์ด ๋œ ๊ฒƒ๋„ ๋งŽ์ง€๋งŒ, ์˜คํžˆ๋ ค ๋” ๋‚˜๋น ์ง„ ๊ฒƒ๋“ค๋„ ๋งŽ๋‹ค.
๋งฅ์šฉ 32bit ํ™˜๊ฒฝ์—์„œ์˜ Obj-C์˜ ๋™์ž‘์€ iOS์˜ 32๋น„ํŠธ ํ™˜๊ฒฝ์„ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
Xcode 5์—์„œ ๊ธฐ๋ณธ์„ 64๋น„ํŠธ๋กœ ์žก๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„, iOS 32๋น„ํŠธ์˜ modern runtime ๋™์ž‘์€ ์˜์›ํžˆ ๋งฅ์šฉ์œผ๋ก  ๋“ค์–ด๊ฐ€์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ด ํฌ์ŠคํŠธ์—์„  ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค์€ ์ฐจ์น˜ํ•˜๊ณ , ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•œ ๊ทธ๋ฆผ์—์„œ ๋‚˜ํƒ€๋‚ด๋ณด์ž.
๊ฐ„๋‹จํ•˜์ง€๋งŒ ํ™”๋ฉด์„ ํšจ์œจ์ ์ง€ ์•Š๊ณ , ์ฆ๊ฒ๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์š”์†Œ๋“ค์ด๋‹ค.
Xcode problems

Xcode 3์—์„œ ๋””์ž์ธ์ด ๋ช‡๋ฒˆ ํ™•ํ™• ๋ฐ”๋€Œ์—ˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๋•Œ๋Š” ์ƒ๋‹นํžˆ ์ข‹์•˜๋‹ค. ์•„์ด์ฝ˜๋“ค๋„ ์˜ˆ์  ๋ฟ ์•„๋‹ˆ๋ผ, ๊ธฐ๋Šฅ์ ์ด์—ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ํ”„๋กœ์ ํŠธ์˜ ์ข…๋ฅ˜๋ณ„๋กœ ์•„์ด์ฝ˜์ด ์žˆ๋Š”๋ฐ, ๋ฉ‹์งˆ ๋ฟ ์•„๋‹ˆ๋ผ, ์•„์ด์ฝ˜๋งŒ ๋ด๋„ ๋ฌด์Šจ ์ข…๋ฅ˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜์žˆ์—ˆ๋‹ค.
ํ™”๋ฉด๋„ ์„ธ๋ จ๋˜์—ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ย Xcode 4๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ์™„์ „ ๋ง์กฐ๋กœ ๋„˜์–ด๊ฐ”๋‹ค.

Xcode 4์—๋Š” ๊ธฐ๋Šฅ์ ์ธ ๋ฌธ์ œ๋„ ๋งŽ์€๋ฐ, ์ด๋ฅผํ…Œ๋ฉด ํ•œ ์†Œ์Šค ํŒŒ์ผ์„ ๋‘๊ฐœ์˜ pane์—์„œ ๋ณผ ๋•Œ, Pane A์—์„  10๋ฒˆ์งธ ์ค„์„, Pane B์—์„  500๋ฒˆ์งธ ์ค„์„ ๋ณด๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, A์—์„œ 10๋ฒˆ์งธ ์ค„์—์„œ ์ŠคํŽ˜์ด์Šค๋ฅผ 5๊ฐœ๋ฅผ ์ฃผ๋ฉด, ย Pane B์—์„  5๊ฐœ์˜ ์ค„์ด ๋ณ€๊ฒฝ๋œ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ง์ด ์•ˆ๋œ๋‹ค. A์—์„œ ์ค„์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ŠคํŽ˜์ด์Šค๋ฅผ ๋„ฃ์—ˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ‘์˜ ์ค„์„ ๋ณด์—ฌ์ฃผ๋Š” Pane B์—์„  ์Šคํฌ๋กค์ด ์ƒ๊ธฐ๋ฉด ์•ˆ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋Š” ์Šคํฌ๋กค์˜ ๋ฐฉํ–ฅ์ด๋‹ค. ์™œ ์œ—์ค„์„ ๋ณด์—ฌ์ฃผ๋Š” Pane A์—์„œ ๊ธ€์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, Pane B์—์„œ ์ค„์ด ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์˜คํžˆ๋ ค ์˜ฌ๋ผ๊ฐ€๋Š”๊ฐ€? ๋˜ํ•œ Pane B์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์•„๋ž˜์˜ ์ค„์„ ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ๊ธฐ์„œ ๊ธ€์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋˜ ์ง€์šฐ๋˜ Pane B๋Š” ์Šคํฌ๋กค์ด ๋˜๋ฉด ์•ˆ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋œ๋‹ค. Xcode 4์—์„ .

์ฝ”๋“œ ์‚ฌ์ด๋‹์ด๋‚˜, ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ Xcode 4์— ๊ธฐ๋Šฅ์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€๊ธด ํ–ˆ๋‹ค. ์ฆ‰ ์ข‹์•„์ง„ ๋ฉด๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ ๋ง๊ฐ€์ง€๋Š” ๊ฒƒ๋„ ๋ฌด์ฒ™ ๋งŽ๋‹ค.
Project Builder๋•Œ๋ถ€ํ„ฐ ์จ ์˜จ ์‚ฌ๋žŒ์œผ๋กœ์จ, ์•„๋งˆ ์ œ์ผ ๊ดœ์ฐฎ์•˜๋˜ ๋•Œ๋Š” Xcode 3์˜€๋˜ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ด๊ณณ ์ €๊ณณ์—์„œ ์„ธํŒ…ํ•  ์ˆ˜์žˆ๋Š” ํ”„๋กœ์ ํŠธ/ํƒ€์ผ“ ๊ด€๋ จ ์„ธํŒ…๋„ ๋งŽ์ด ์ •๋ฆฌ๊ฐ€ ๋˜์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ ์„ธํŒ…๊ณผ ํƒ€๊ฒŸ ์„ธํŒ…์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์šฉ๋„๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ง€๊ธˆ์€ ํ•˜๋„ ์‚ฌ๋žŒ๋“ค์ด ์ดํ•ด๋ฅผ ๋ชปํ•˜๋‹ˆ๊นŒ (์–ด๋ ค์›Œ์„œ ๋ชปํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์•ˆํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ) ์ด์   ๊ฑฐ์˜ ํƒ€๊ฒŸ์œผ๋กœ ์„ธํŒ…์„ ๋ชฐ์•„๊ฐ€๋Š” ์ถ”์„ธ์ธ๊ฑฐ ๊ฐ™๋‹ค. ์˜ˆ์ „์ฒ˜๋Ÿผ ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ์™€ ํƒ€๊ฒŸ ์„ธํŒ…์ด ๋™์ผํ•œ ๋ถ€๋ถ„๋„ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋„ ๋งŽ๋‹ค.

์ด๋Ÿฐ ์ €๋Ÿฐ ์†Œ๋ฌธ์„ ๋“ฃ์žํ•˜๋‹ˆ Xcode์˜ ํŒ€์žฅ์ด ๋ฌด์ฒ™์ด๋‚˜ ๊ดดํŒํ•œ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ํ•œ๋‹ค.
๋ˆ„๊ฐ€ IDE ๋””์ž์ธ์„ ํ–ˆ๋Š”์ง€ ์•ˆ๋‹ค. ์ฐธ.. ๋Œ€์ฑ…์—†๋Š” ์‚ฌ๋žŒ์ด๋‹ค. ํ•˜๊ธด ์• ํ”Œ ๋‚ด์—์„œ๋„ Xcode 4๊ฐ€ ๋‚˜์™”์„๋•Œ ์„ฑํ† ๋“ค์„ ๋งŽ์ด ํ–ˆ๋‹ค๋Š”๋ฐ, ๊ทธ ํŒ€์žฅ์ธ์ง€ ์ฑ…์ž„์ž๋Š” ๋ฌด์Šจ ์ฒ ๋ฐฅํ†ต์„ ๊ฐ€์กŒ๋Š”์ง€ ์ซ’๊ฒจ ๋‚˜์ง€๋„ ์•Š๋Š”๋‹ค. ์ฐธ.. ๋ญ˜๊นŒ? ๊ทธ ์‚ฌ๋žŒ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋Š”…

Bad way to write documentation

This is from documentation for Boost.

Boost.Range is a collection of concepts and utilities that are particularly useful for specifying and implementing generic algorithms.

When documenting, it should be written to give a reader idea about what it is quickly and easily. Lengthy one is not necessarily bad though, if it’s required.

However, try to read the above sentence. What can you figure out from that? It’s nothing. It’s just like a vague marketing statement, which looks good on paper and especially when people just scan what is written. However, it’s just laying out useless words.

In 80’s and early 90’s technical books and writing written and published in US were largely good. They contain good snippet of code which can give you idea how things are expected to work one another.
However, nowadays, they tend to write 1~2 pageful sentences to describe very easy and straightforward concept. They just put one line of code, which doesn’t show how to use it related to other functions etc.
So, reading technical write-up nowadays is like reading novels rather than figuring out how to use interested techniques.

Probably it’s because everybody is a programmer nowadays? Everybody jumps onto mobile app market. Everybody says that they are S/W engineers. Wow…

I even bought a book ( which was unique in the market ) which was written by a lawyer.
I don’t know where it is after I tossed it to somewhere after reading one chapter.
It’s better to show full one sample code than explaining useless stuffs. Technical books on S/W programming should be written that, you are guided to write one sample program once they finishes explaining how to use this and that.

I didn’t buy any book on programming for the last 10 years, roughly speaking. It was better to grab official document from a company/open source project page, which is the origin of the interested frameworks/libraries and figure out for myself.

I doubt if S/W engineers actually write books nowadays. Probably some professional writers write ones for those S/W engineers who want to make side money or build some fame.

%d bloggers like this: