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!

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.

What happened to Apple?

After lots of struggling at home yesterday with the sudden expiration of iOS 6.1 beta 4, now iTunes displays “Check Update” and “Restore iPhone…” buttons.

iTunes now displays "Check for Update" and "Restore iPhone..." buttons

iTunes now displays “Check for Update” and “Restore iPhone…” buttons

The iTunes didn’t display it yesterday, i.e. Jan. 27th, 2012 Pacific time.
Why it didn’t display those buttons yesterday?

Let’s point out a few things.
When a beta image was expired in previous versions ( I’m not just talking about iOS 6.x or 5.x. I have full experience with iOS since it’s beginning. ), they put some “allowance” or “cushion” days sufficiently. So, even though its following beta image was not installed, the old version was a live. If what I remember is right, in 3.x versions of iOS, I installed beta 2 and didn’t did so with beta 3 and after official public version was announced, I updated it to the public version. There was no problem in using the iPhone/iPod touch with the beta 2.
However, yesterday, my iPhone suddenly displayed “Activation Needed” message. I was mostly out of my home, so I didn’t know if new version was released on Jan. 26th, which was Saturday.
Then when I came back home, my iTunes didn’t display “Check for Update” and “Restore iPhone…” buttons. So, although I downloaded the latest beta image, I couldn’t update my phone. My iPhone just became bricked.

Who are leading Apple’s development and SQA teams nowadays? After iPhone got popular, I started to feel their quality of work degraded gradually. I understood that they lacked in their work force. I’ve heard that only finger-countable number of people worked on Xcode, while at MS about 250 people work on Visual Studio. I know that many good people in Mac OS X team wanted to move over to iPhone team. So, I expected such lower quality job. However, I believed Apple people. They will cease urgent fire and will be back to normal mode. However, it turned out they didn’t.
I file bugs to Apple’s bug report pages. Some are easily noticeable problems.
Even though some are beta, their internal SQA team should test things thoroughly and publish to developer community. The outside developers are not their SQA team. Although we test their S/W programs, the main focus is different. I’m not saying that their S/W programs should be perfect. They are also human. They can do mistake. However, I feel that their quality degraded seriously compared how they were before. Well, if we call it nicely, it’s social SQA.

I, personally, do three steps of testing of my own code.
While implementing, I frequently debug what I implemented to make sure if it works as I designed. Then when I finish implementation, I debug it to see if it works as a whole first, and do another test to see if it breaks any related features. Then I hand-over to SQA team.
So, there has been no bugs once they left my hands. I’m not saying that I’m always perfect. However, I at least try to ensure what I do. If there is only things I don’t test thoroughly although I implemented is some features of which designed behavior is not yet set by people who requested it. So, it’s kind of rough implementation to the point which can be ground for whatever they ask for the feature.
I don’t want to say some “great-sound” terminology like “Test-Driven Development”
Even we don’t use such term, that is common sense.

(Strangely, since 2000, people in this field just invent some nice-terminology to mean the same old thing. It looks to me that they try to impress other business background people or some S/W programmers who don’t have background in CS in a way that they know a lot or they are professionals. However, you know what? Although that can help office politics or impress during hiring process, actually those people who make things work are those who have those knowledge melted into their habit, so can’t even spend their time to learn those terminologies.)

Let’s look at what Apple announces. Xcode, Mac OS X, iOS.. they contain lots of bugs which are very easily visible.
Where are those Apple’s unique integrity, and perfectionism?
It’s not Steve Jobs they lost. It’s those integrity and perfectionism.

To Apple

To Apple : Maybe Mac OS X is not important any more to you. But don’t forget that there are lots of people who depend on that for serious work and use their Macs as daily life.

I found lots of serious issues with iCloud sync in Mail. Peculiar behavior in synching mailboxes, messages not being deleted, deleted mail is displayed on other macs although its view setting is set to hide them, and so on.

Mac OS X is not a toy. Don’t regard users as a testing marmot. Nowadays, I’m pretty sure that you Apple people don’t test your S/W products as well as you guys did it before. Very apparent bugs in the OS and Xcode are not fixed and just distributed.

If you do this more, I’m pretty sure that you will lose the market again. Will the iOS OK? No way. as you may know, I reported lots of problems in iOS 6 and its apps already to you guys.

Although Android dev environment is still bad compared to Xcode, but Xcode has its own dirtiness. With Jelly Beans of Android, they caught up you guys a lot. Also, ARM chips contains Jazelle, a Java booster. So, overall sluggish performance will be enhanced drastically. So, beware of that!

GNUStep on Linux starts to look attractive to me more than ever. You should be glad that GNUStep doesn’t have big impact in developer community and user community. However, as Linux stood up suddenly, desktop Linux can do that someday, although they have failed for many years.

I don’t think your time is left much, Apple.

GUI is not only for making screen look pretty

Do you remember people called Mac a toy because it utilized graphical elements? After about 10 years of laughing at Apple Mac, they all started to use “Mac”. What? Are you saying Mac haven’t ever been a mainstream PC so far? Right.I agree. However, you all use “Mac” called “MS Windows”.

What I’m saying is the paradigm the specific “Mac” brought, not the specific “Mac”.

I remember 90’s and early 2000’s where people wrote lots of dial-up GUI program for modems. They created many mp3 players with various skin support. Some Linux people ( including me ) played with skinning their desktop.

But there is one thing they missed : “GUI is not only for making your screen look pretty.”
Under the name of “skin” or “theme”, I have seen many ugly, childish, flash skins for years. They didn’t help us to use computers more easily or more in productive way. Many people at influential company still don’t seem to understand what GUI is. The tendency doesn’t seem to be changed.

Take a look at this.

Look should follow functionality

The “Where condition = ” has serious problem. I wasted about 2 days because of this.
Because the label says “Where condition =“, I populated its field without “=” as its first character. Consequently, my script didn’t work properly, and it even didn’t present any error messages.
If they wanted to put “=” as part of the label, they should work without “=” in its field, or vice versa.

Another example is “uncategorized list of information”
MS is notorious about this from its IE configuration settings. Compared to other web browsers, i.e. Firefox, it is very difficult to identify or find a setting or a property you want to set. Why? Because they are just a list of those settings not categorized or classified as that of Firefox.
Here, MS Access has the problem also. ( It seems to be standardized with MS products : from Visual Studio to Office. )

Try to find any option you want to find. There are more to come if you scroll down there

As you can see, it is very difficult to find information you want quickly. They are not even in alphabetic order, or there is no search box. If they are categorized as “Background”, “Text”, etc, it can be easy to find which setting to find.

Those two examples may be trivial, but impact the usability a lot. I said that I wasted 2 days!

%d bloggers like this: