четверг, 29 ноября 2007 г.

Parallel Extensions to the .NET Framework (ParallelFX) preview

Обнаружил только что у себя в GoogleReader вот такое:
The shift to multi- and many-core processors that is currently underway presents an exciting opportunity for everyone in the software industry. With an expected increase of 10 to 100 times today’s compute processing power, the opportunities to deliver powerful and immersive new user experiences and business value are just awesome.


Today we released an early preview of the Parallel Extensions to the .NET Framework (ParallelFX) technology, available for download on MSDN. This release contains new APIs to make programming on the .NET Framework simpler as well as supporting documentation and samples.


все ссылки указывают непонятно куда. Открыл блок - сообщения нет...
К чему бы это...

Хорошее название для сайта знакомств

Фотошоп

Гром и Молния

В будущем, а может уже и в настоящем, когда будет сверкать молния многие будут думать что это Google обновляет GoogleMaps. Со вспышкой...
Про гром не придумал.

Об архивации

http://bash.org.ru/
Edik (23:21:00 27/11/2007)
я разгадал великую тайну

Volshebnik (23:21:11 27/11/2007)
какую?

Edik (23:21:39 27/11/2007)
знаешь че значит, когда перед смертью проноситься вся жизнь?

Volshebnik (23:22:08 27/11/2007)
неа)

Edik (23:22:20 27/11/2007)
это архивирование

Контекстная реклама в PDF.

Не то чтобы это было плохо...
Новость следующая - Yahoo предлагает вставлять контекстную рекламу в PDF. Ага, не ослышались. В PDF.
Yahoo and Adobe have teamed up to give publishers the ability to offer contextual advertising as part of their PDF document downloads.

Users upload their PDFs to Yahoo’s ad network and then Yahoo hosts the document for download and serves up contextual advertising in a panel to the right of the given document’s content.

среда, 28 ноября 2007 г.

Which database is more secure? Oracle vs. Microsoft?

- "Ну конечно Oracle" скажет каждый первый geek и ... станет рассказывать что верить заказным и проплаченным исследованиям Микрософта никто в здравом уме не станет.

А теперь о грустном.
Cоотношение выявленных и исправленных (!) уязвимостей в Oracle 8,9,10 против SQL 7, 2000, 2005 в период с 2001 по 2006 годы выглядит так:

Eсли кому-то нужны цифры, почему SQL безопаснее чем Oracle, отчет опубликован здесь .

Interpretation of results - some Q and A

Do Oracle’s results look so bad because it runs on multiple platforms?
No – pretty much most of the issues are cross-platform. In the 10gR2 graph every flaw affects every platform.

Do the SQL Server 2005 results have no flaws because no-one is looking at it?
No – I know of a number of good researchers are looking at it – SQL Server code is just more secure than Oracle code.

Do you have any predictions on the Oracle January 2007 Critical Patch Update?
Maybe – NGSSoftware are currently waiting for Oracle to fix 49 security flaws – these will be fixed sometime in 2007 and 2008.

Do these results contain unfixed flaws?
No – only those that have been publicly reported and fixed are in the data.

Жительница американской провинции отсудила у авикомпании 15 млн. долларов за сильный ветер за окном.

Слышали? Ну эту "историю" либо похожие. Про ушлую американку отсудившую тонну денег у МакДональдса наверняка все так или иначе слышали...
Звали эту американку Стелла Либек. Ее именем названа премия, ежегодно присуждающаяся за самое нелепое судебное решение в США.

Так и называется - Премия Стеллы, или по английский Sletta Awards. Собственно к чему клоню - вот тут по ссылке информация о премии Стеллы. Сначала небольшое введение а дальше список случаев попавших в поле зрения этой премии.

Среди них вот такие:

Июнь, 1998. 19-летний Карл Трумэн из Лос-Анджелеса выиграл 74000 долларов плюс компенсацию за лечение, когда его сосед переехал ему руку своей «Хондой Аккорд». Мистер Трумэн, очевидно, не заметил, что в машине кто-то сидел за рулем, когда он пытался украсть у соседа декоративные колпаки с колес.


Октябрь, 1998. Терренс Диксон из Бристоля, Пенсильвания, выходил из дома, только что им ограбленного, через гараж. Он не смог открыть автоматическую гаражную дверь, так как она была испорчена. Он также не мог войти обратно в дом, так как дверь из дома в гараж за ним захлопнулась. Он выжил на сухой собачьей еде и упаковке «Пепси». Он подал в суд на владельца дома, заявив, что ситуация причинила ему незаслуженную психологическую травму. Жюри присудило ему полмиллиона долларов.


Декабрь, 1997. Ресторан в Филадельфии был вынужден заплатить Эмбер Карсон из Ланкастера, Пенсильвания, 113500 долларов после того, как она поскользнулась на разлитом напитке и сломала себе копчик. Напиток же оказался на полу из-за того, что мисс Карсон швырнула им в своего экс-бойфренда за 30 секунд до происшествия в результате скандала.


Забавная штука. Эти случае не соответствуют действительности. Проще говоря это гон. Более того - на оффициальном сайте Премии Стеллы об этом явно написано...
Stories Not from StellaAwards.com
Fabricated:
Terrence Dickson of Bristol, Penn., was exiting a house he finished robbing by way of the garage. He was not able to get the garage door to go up because the automatic door opener was malfunctioning. He couldn't re-enter the house because the door connecting the house and garage locked when he pulled it shut. The family was on vacation, so Mr. Dickson found himself locked in the garage for eight days. He subsisted on a case of Pepsi he found, and a large bag of dry dog food. Dickson sued the homeowner's insurance claiming the situation caused him undue mental anguish. The jury agreed to the tune of half a million dollars and change.


ну и т.д., иначе копировать всю страницу придется.

Вопрос. Ну и зачем при описании премии стеллы приводить в пример сфабрикованные случаи и "городские легенды" если и существующие достаточно убедительны. Или недостаточно?

Что же касается самой Стеллы. Такое решение суда по многом объяснялось тем что это была не первая жалоба на горячий кофе. У американского суда есть такое правило - если жалоб было много в какой-то момент могут засудить на огромную сумму "за всех сразу". Было ли жалоб действительно много, особенно по сравнениями с количеством людей для которых кофе не показался излишне горячим, и было ли это оправданное решение вопрос другой...

вторник, 27 ноября 2007 г.

Дмитрий Сотников про PowerShell в собственном переводе. Часть 2

Дмитрий Сотников из Quest Software перевел второй ролик про PowerShell американскому Channel9.

От себя - потрясающе...
Начинается разработка социальной сети для разработчиков операционных систем. На данном этапе вы можете оставить свой E-Mail, с помощью которого вы будете оповещены об окончании разработки и закрытого тестирования.


социальной. сети. для разработчиков операционных систем. где они смогут...общаться друг с другом. выкладывать фокти. заводить друзей. смотреть какую музыку слушают другие участники сети. собираться на вечеринки. и в кино. комментировать вечеринки. а также комментировать фокти.

хотя...может быть все не так уж и плохо.
Об итераторах на геймдеве:
С точки зрения С итератор это такой плохой указатель с неочевидным оверхедом. Что удивительно, обратное тоже верно. С точки зрения С++ указатель, это такой unsafe итератор с очевидным отсутствием оверхеда.


Ага, конечно...щаз.
Возьмем к примеру указатель на вершину дерева. И применим к нему оператор ++...
Еще можно порассуждать что происходит "с точки зрения С на итераторы" когда мы работаем с такой коллекцией как std::map.

Если сузить область применения итераторов до std::vector или какого-нибудь boost::scoped_array (которые гарантируют линейное расположение элементов в памяти. вроде. а std::string будет это гарантировать в след. версии языка) то итератор окажется таким себе обычным указателем. Без оверхеда.

Подводя итоги. Дело в том что операторы "++","--","+" и т.д. для итераторов это совсем не то же самое что тот же набор операторов для указателей. Итераторы могут (и будут) переопределить эти операторы. Указатели нет.

Так что с точки зрения С++ указатель это такой unsafe итератор для коллекций гарантирующих линейное расположение обьектов коллекции в памяти. А с точки зрения С итератор это неизвестно что. И это неизвестно что в частных случаях ведет себя точно так же как указатель.

ЗЫ: интересно было бы посмотреть на рассуждения "аллокаторы с точки зрения С это таки е вызовы malloc с оверхедом. Обратное тоже верно...".

понедельник, 26 ноября 2007 г.

Гибербатон

Источник удивительного неисчерпаемый - вот что Википедия. Гипербатон что такое можно узнать из неё. Не вид батонов это особенный. Речи фигура такая - гипербатон.
Йода магистр так гипербатон использовал: «Mine! Or I will help you not». Когда порядок слов обычный специально нарушают - гипербатон это. Полно речи фигур этих (инверсия похожая на гипербатон упоминается), но когда сочетание слов устойчивое разрывают и другие в разрыв слова вставляют - это гипербатон...

источнк(и)

Потратить 1 минуту 37 секунд для написания заметки о тайм-менеджменте

Тайм-менеджмент учит как за одну и ту же единицу времени сделать как можно больше ненужной работы

12 признаков ущербного програмера

Оригинал

Перевод, вольный. Очень.

12 признаков того что вы ущербный программер и не знаете об этом...

Вам вообще встречались программеры-приматы не осознающие своей ущербности. Ну такие, считающие себя достаточно продвинутыми. Могут выдать на гора подборку из цитат которые они слышали от каких-то гугу. Точно знают много правил создания "правильного" кода. Правда при этом их собственный код серьезно страдает отсутствием всех этих знаний которые у них предположительно есть. Что, никого такого не знаете? Да ладно, знаете, все эти упертые теоретики не понимающие практики. Звучит знакомо?

Вот несколько признаков подобных программеров:

1. Джава это наше все!.
Вам непонятна нужда в других языках программирования. Нет, ну почему нельзя все написать на Джаве?? Вас не колышет то что на Python или Ruby некоторые куски кода длиной строк в 10 делают то же самое на что уйдет несколько страниц кода на Джава? Кстати, вы убеждены что новые фичи языка в следующем релили по любому это исправят.( на месте Джавы мог бы быть каждый, просто поклонники Джавы кажется подобному подвержены сильнее других на данный момент)


Ну разумеется "Джава это наше все" это признак ущербного программера. Поскольку все правильные программеры знают что "с++ это наше все", ага.
ЗЫ: просто я в основном сталкиваюсь с с++ программистами....

2. Будь "Enterprise" или здохни.
"Enterprise" чертовски серьезная вещь. "Enterprise" для вас это не просто слово."Enterprise" это способ жизни,"Enterprise" это ваша философия, ваш путь к просветлению. Все что может быть написано, установлено или обновлено с минимальными затратами - детские игрушки. К тому же понятное дело нерасширяемые. Ну а пока большенство работы в вашем офисе делается с помощью Excel spreadsheets. Ничего, подождут пока вы не закончите свой монументальный "enterprise" проект по налаживанию документооборота.


...за что я не люблю с++ библиотеки...мысль развивать пока не буду.

3. За функции длиной больше 20 строк нужно расстреливать!
(ну может 30 строк. Или 10. Не принципиально)

Уж извините. Но иногда длинные функции это как раз то что нужно для решения проблемы. Короткие функции конечно обычно проще понять. Но порой алгоритм действительно проще выразить одной длинной функцией. И не нужно усложнять код сокращая длину функций чтобы соответствовать произвольным стандартам.


прим. - Китайская стена вещь длинная. Но простая. Но длинннааааяяяя...


4. Patterns?Patterns:!Patterns->Patterns(Patterns:....
Если в функции используется меньше трех паттернов - функцию нужно переписать. До достижения положенного минимума...
Те кто выискивает возможности применить шаблоны просто добавляют в код ненужную сложность. Наоборот, перед применением в коде очередного шаблону нужно подумать и попытаться обойтись без него, более простыми средствами. Поскольку каждый шаблон увеличивает сложность. Но разумеется шаблоны в коде могут быть, никто их у вас не отнимет.


(прим. мысль хотя и ясна но вот обоснована не ахти.)


5. Посдчет CPU инструкций - моя прелесть! И только язык который дает возможность работать на достаточно низком уровне имеет право на существование.


Тут даже переводить не буду. Ибо мотивация этого "антипаттерна" сама по себе ущербна. В оригинале (если тут может быть оригинал) похожий принцип звучал так: "все беды от преждевременной оптимизации". Здесь же слово "преждевременная" вообще убрали из контекста. Получилось в результате еще хуже чем было...


6. Много точек выхода из функции - зло.
Такое часто можно услышать. Время от времени на множественные точки выхода даже объявляются крестовые походы. Под знаменем написано - "если точка выхода одна то код легче оптимизировать". Кому легче? И чем? Анализировать легче код который сам по себе прост. И если множественные возвраты из функции добавляют простоты - да пользуйтесь на здоровье.


автор забыл про goto...
Кстати забавно что в обсуждении привели следующий пример правильного использования множественных возвратов из функции (переписываю на псевдокоде):
something foo(object a,object b)
{
if(!a.initialized) return "foo";
if(!b.initialized) return "foo";
return a.bar()+b.bar()
}

приматы... не понимаете проблемы не пишите.
return (a.initialized && b.initialized)?a.bar()+b.bar():"foo";, ага...

7. Ваши пользователи идиоты. Клинические.
Вам даже сложно поверить в то какие они имбицилы. Они постоянно забывают как делать в вашей программе простейшие вещи. Постоянно используют вашу программу неправильно. И это приводит к ошибкам. Главное тут помнить что идиоты именно пользователи. А не разработчики которые были не в состоянии написать нормальную программу.


RTFM moron...знакомая фраза, правда?

8. Вы пишете много кода. И гордитесь этом.
Продуктивность оно конечно хорошо. Но увы, продуктивность и количество написанных строк кода слабо между собой коррелируют. Пользователи никогда не скажут "Хм, продукт багнутый, разобраться как его использовать нереально, но зато посмотрите! сколько кода". К тому же извержение тонны кода приводит к тому что другие разработчики тратят кучу времени чтобы разобраться с этими мутными потоками кода. Про поддержку в будущем можно думаю даже не упоминать.


все правильные менеджеры знают что платить программистам нужно построчно.

9. Copypaste - так создается отличный код!
Вы стойко отстаиваете свое право на "copypaste", оправдывая это странными аргументами по типу "декомпозиция связей" и "уменьшение зависимостей". Поддержка и отладка багов вторичны. Вы не кривя душой называете это "рационализацией".


10. Обработка ошибок это просто! Перехвати все исключения, запиши в логи и продолжим...
Это не обработка ошибок. Это игнорирование ошибок. Семантически это эквивалентно “on error next” в VB. То что вы занесли ошибку в програмные логи не значит что вы ее хоть как-то обработали. Обработка ошибок вообще непростое дело. Если вы точно не знаете как обработать (именно обработать) ошибку - пусть она идет дальше. Может и обработают.


Ошибка! Подача топлива резко увеличилась! Запись об этом будет занесена в бортовой журнал. Последней. Продолжаем процесс воспламенения поданного топлива...

11. Ни строчки кода без UML диаграммы.
Наибольший энтузиазм в UML моделировании проявляют как правило те кого врядли можно назвать даже хорошим кодером. Но при этом они хотят чтобы их считали программными архитекторами. К средствам моделирования кода в основном аппелируют те кто свято верят что все кодирование можно сделать путем манипуляции маленькими квадратиками на экране (прим. по сути это верно. только не квадратиками а символами:). Все эти диаграммы это не есть дизайн. И никогда не будет дизайном. И не заменит код.


12. Ваш код убил билд или важные данные.
Иногда вы пишете код которые как вы полагаете должен переписать файлы приложения. Но все идет не так и в результате часть данных пользователя убита.
Все пишут такой код. Иногда. Все иногда попадают в категорию ущербных программеров. Важно в ней не оставаться.

Штраф за клевету в интернете.


Впервые в судебной практике Беларуси фотохудожник Игорь Пешехонов подал иск на Интернет-издание за оскорбление чести и достоинства. И выиграл.

По моему первый подобный случай, по крайней мере подобных крупных штрафов в рунете я не припомню. И где - в "тоталитарной" Беларуси. Надеюсь - прецедент.

Порадовали коменты

Господа, а вам не кажется, что это прецедент? Теперь можно, скажем, обвинить админа блога в том, что он распространяет слухи о радиоактивной плитке и, скажем, кто-то потребует возместить ему моральный ущерб, так как он ….. (воль на выдумки хитра) :)

удачи...

Что характерно ответчик себя виноватым не считает. Ну подумаешь...цаца какая...ну обозвал педофилом...мнение высказал.

"Заворотнюк напрягала некоторыми местами плохую актёрскую игру"

У Гоблина идет обсуждение талантливой кинорецензии

Сама рецензия стоит того чтобы ее читать и перечитывать...
Но речь не об этом.

Из обсуждения:

>Имеется вопрос - как перевести Hell, its about time - Ад, вот вот начнется? так что ли?

Пришествие Ада - вопрос времени. По-моему, так.
Кстати, знакомая какая-то фраза...


Красиво...

суббота, 24 ноября 2007 г.

6 причин, почему Apple не переживет Microsoft

6 причин, почему Apple не переживет Microsoft - статья интересная. Написана человеков 20 лет проработавшем в Apple.
Вот ссылка на оригинал.

Вот отрывок который более всего меня заинтересовал:

Четвертая причина того, что Apple не станет историей постоянного успеха, заключается в культуре управления. Я был директором (подразделения) в Apple, и бывал на тренингах с другими директорами Apple. Тренинги проводились сторонними консультантами. Эти «внешние» консультанты были шокированы отсутствием свободы принятия решений в Apple.

Для большинства из нас, это просто был способ, в который Apple вела свои дела. Я все еще помню одного директора по разработке, который жаловался на то, что его командой было практически невозможно эффективно управлять из-за того, что у нескольких сотрудников был прямой контакт со Стивом Джобсом. Любые решения в Apple могут быть отменены Стивом. Это нормально в компании с несколькими продуктами, но это не работает в компании, где продуктов много.

Тренинг предназначался для того, чтобы помочь директорам понять, как влиять на решения компании. Все что он сделал, это подтвердил то, что многие из нас давно знали – мало кто в Apple может принимать настоящие решения.

Ловкость рук и никакого мошенничества...

Давно не писал.
Хочется написать о том как Facebook нарушает тайну частной жизни пользователей.

Пользователям в сети, пусть даже в социальной сети, часто предлагают открыть информацию об их действиях/предпочтениях/т.д. для других пользователей.

Сделать это можно двумя вариантами. Оба варианта проще всего рассмотреть на примере любой регистрации в любом сервисе с использованием email.

Итак, при любой регистрации есть пункт наподобии "хочу получать на свой email информацию об обновлениях блаблабла".

Отличия в том что в одном случае "чекбокс" включен, в другом - выключен. Вот те сервисы у которых в подобных ситуациях "чекбокс включен" суть спаммеры.

Поскольку для того чтобы сделать сведения о себе в сети доступными пользователь должен что-то сделать - "включить чекбокс". И наоборот - чтобы сведения о пользователе оставались конфиденциальными пользователю не нужно делать ничего. Сервисы нарушающие это правило суть спаммеры "нарушающие частную жизнь".

Еще один пример более тонкого подхода - если в каком либо случае пользователь отвечает "да" на подобные вопросы сделать ему явное предложение "всегда отвечать да на подобные вопросы".

вторник, 13 ноября 2007 г.

Дефрагментация памяти в FireFox

Оригинальная статья.
Интересно что в следующей версии движка будет использоваться GC для очистки циклических ссылок (недостижимых). И также GC для JS. И вообще займутся вопросом...
А пока ссылка на аддон очищающий память FF.

четверг, 8 ноября 2007 г.

Но было поздно: журналисты девочку уже сфотографировали

В этом или похожем виде фраза должна стать афоризмом.
Взято из обсуждений "русского марша". Точнее "той самой" фотографии. Тьфу, вот этой...

File manager

on .NET, opensource? Any1?

Windows vs Linux - ORACLE

Интересная статья о производительности Oracle RAC на Windows и Linux.

Comparison_Oracle_Windows_Linux.pdf (application/pdf Object)

Статью эту надо изучать внимательно, смотреть те интервалы нагрузок, которые присутсвуют у Вас.
Сопоставить стоимости обоих решений, стоимость администрирования.

В целом, то что промышленная ОС где-то (в пиковых нагрузках) ведет себя лучше, чем Linux - не новость.
Новость, что это промышленная ОС - Windows :)
В свое время мы сравнивали Solaris x86 c Linux и получили где-то сходные выводы...

А если бы это был Гуугль все могло сложиться бы иначе...

Это фейк, оригинал немного другой...вообщем с точностью до компании.
9-летняя девочка написала Microsoft о своей идее и получила обидный отказ

9-летняя третьеклассница Ши О'Горман решила написать Microsoft о классном проекте обучения детей написанию писем, предложив добавить лирические строки в их плееры Zune - но в ответ получила неблагожелательные слова от компании.
Когда ее родные вскрыли долгожданное ответное письмо, "девочка была очень расстроена. Она в сердцах подбросила письмо в воздух, убежала в свою комнату и захлопнула дверь", - сказала мать девочки. Юристы Microsoft заявили девочке, что компания не принимает незатребованных идей.
"Это не то письмо, которые следовало бы посылать третьекласснице, которая проявила инициативу написать им", - добавила мать девочки.
Ши сказала, что "Это выглядело так, как будто они хотели четко сказать: "Нам не нужна твоя идея, так как она нам не нравится".


Если опубликовать такую новость на скажем Хабрахабр обсуждение будет недолгим но интенсивным.

А если изменить слова "Microsoft" и "Zune" на стоящие в оригинале "Apple" и "iPod" обсуждение пойдет немного не так. Но кончится все тем же...

Что же касается самой новости...
Факт действительно имел место бы. Вот только свежесть новости под сомнением... произошло это больше года назад :)

среда, 7 ноября 2007 г.

Delicious - идея

Аналог. фича - выдавать смежные линки в виде графа.
Поясняю - если "А" имеет тэги B,С,D то, получив все записи с тэгами B мы также получим список "С" и "D", что позволить делализировать выдачу.
А проход по тэгам реализовать вот так (смотреть GRAPH)

Простые рекурсивные лямбда функции в С#

Самый самый простой подход не работает

Func<int, int> fac = x => x == 0 ? 1 : x * fac(x - 1);


- ошибка. error CS0165: Use of unassigned local variable 'fac'

Ну так объявим ее...

Func<int, int> fac = null;

fac = x => x == 0 ? 1 : x * fac(x - 1);

 

Func<int, int> fibbo = null;

fibbo = x => x == 0 ? 1 : x==1? 1: fibbo(x-1) + fibbo(x - 2);



как-то так, да...

Тихо шифером шурша...вычисляем факториал на C#

using System;

 

namespace sillytests

{

    delegate T SelfApplicable<T>(SelfApplicable<T> self);

 

    class Program

    {

        static void Main(string[] args)

        {

            // The Y combinator

            SelfApplicable< Func<Func< Func<int, int>, Func<int, int>>, Func<int, int>>> Y = y => f => x => f(y(y)(f))(x);

            // The fixed point generator

 

            Func< Func< Func<int, int>, Func<int, int> >, Func<int, int>> Fix = Y(Y);

            // The higher order function describing factorial

            Func<Func<int, int>, Func<int, int>> F = fac => x => x == 0 ? 1 : x * fac(x - 1);

 

            // The factorial function itself

            Func<int, int> factorial = Fix(F);

 

            for (int i = 0; i < 12; i++)

            {

                Console.WriteLine(factorial(i));

            }

        }

 

    }

}



Взято тут.

Hellow World с использованием LINQ и Reflection

Забавы...

using System;

using System.Linq;

using System.Reflection;

 

namespace sillytests

{

    class Program

    {

        static void Main(string[] args)

        {

            foreach (var t in from fi in typeof(Reflect).GetFields() where !fi.IsStatic select fi.Name + " ")

                Console.Write(t.ToUpper());

 

        }

 

        class Reflect

        {

            public bool Hello;

            public int World;

            public string from;

            public double LINQ;

            public byte and;

            public float reflection;

            public static double BlaBlaber;

        }

    }

}

Многоядерные процессоры и C#

Пока информации немного.
Параллельный LINQ - Выполнение запросов на многоядерных процессорах

Параллельная производительность - Оптимизация управляемого кода для многоядерных компьютеров

вторник, 6 ноября 2007 г.

Эрик Лептон обьясняет почему вывод типов...

не работает с функциями напрямую.
Вот тут - C# 3.0 Return Type Inference Does Not Work On Member Groups

Обьяснение туманное и запутанное. Интересен тот факт что в первоначальной спецификации на версию 3.0 это было заявлено.
О чем речь собственно...
Пусть есть вот такой код:

public static IEnumerable<R> transformation<C, R>(this IEnumerable<C> collection, Func<C, R> projection)

{

    foreach (C c in collection)

        yield return projection(c);

}

 

public static int to_42(int value)

{

    return 42;

}


Мы хотим применить to_42 к transformation. Тогда если где-то ниже мы напишем:

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

foreach (int i in numbers.transformation(collections.to_42))

{

    Console.WriteLine(i);

}


Мы получим ошибку компиляции. Вот такую:

error CS0411: The type arguments for method 'alogrithm.collections.transformation<C,R>(System.Collections.Generic.IEnumerable<C>, System.Func<C,R>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.



Варианты при которых сообщения об ошибки не получаются:

Func<int, int> _f = collections.to_42;

foreach (int i in numbers.transformation(_f))

...

foreach (int i in numbers.transformation(new Func<int, int>(collections.to_42)))

...

foreach (int i in numbers.transformation((x) => { return collections.to_42(x); }))

...

foreach (int i in numbers.transformation<int,int>(collections.to_42))

...



Все сводится к тому что мы так или иначе задали тип (в основном возвращаемого значения) явно. Т.е. компилятор самостоятельно понять какой именно тип возвращаемого значения у функции to_42 не может. И Эрик подробно и обстоятельно обьясняет почему это абсолютно правильно.
Скажу честно - я ничего не понял из этих объяснений.
Я вижу какими типами должна быть инстанцииирована ( в терминах шаблонов С++ ) transformation при использовании to_42 в качестве параметра. Думаю любой это видит. Почему этого не должен видеть хотя бы в частном случае компилятор я не понимаю и вряд ли пойму.

Беедненький Микрософт

Сначала Билл Гейтс перестал быть самым богатым человеком. Потом перестал быть даже вторым...опустившись "аж" на третье место.
А теперь неприятности у самого Микрософта. Перестали они быть самой дорогой компанией в мире...И главное кто их подвинул то... Китайцы. Что характерно - нефтяная компания. 1 триллион стоит. PetroChina если интересно...Уоррен Баффетт по слухам в 2003 г. вложил в акции PetroChina $488 млн, в этом году продал их за $3,5 млрд. Умеет же...

суббота, 3 ноября 2007 г.

Computer Language Benchmarks Game

Computer Language Benchmarks Game

Сравнение решения различных задач на разных языках программирования.
Также в принципе примеры задач при изучении другого языка программирования.
Старичок-плюсовичок порадовал. Руби улыбнул.

пятница, 2 ноября 2007 г.

Расшифрована следующая часть генома...

Кошки. Что дает полная расшифровка генома? Наверняка о геномах, генах и их расшифровке все слышали, а вот что это и зачем...
Итак. Хочу все знать. Википедия и немного гугля. Понятия.

Геном.

Наверху всей смысловой цепочки находится понятие геном.В нем сосредотчена наследственной информации. Т.е. совокупность всего где сосредоточена генетическая информация называется геномом.

Геном->хромосомы.

Дальше идут хромосомы. Чаще всего генетическая информация передается пачками хромосом.

Геном->хромосомы->ДНК.

Хромосомы в свою очередь помимо всего прочего содержат молекулы ДНК. У хромосом бывают разные стадии их существования. В одних стадиях все молекулы ДНК "соединены" в "макромолекулу", в других разделены. Как-то.

Порядки цифр: Исследователи из 10 стран, работающие над проектом IRGSP (International Rice Genome Sequencing Project), впервые расшифровали геном риса: идентифицировали 37 тысяч 544 гена и установили положение каждого из них на 12 хромосомах.

Ну это у риса. С человеком посложнее. Хотя пишут что тоже 30 000 генов у человека. У червя какого-то 19 тысяч. Кому верить...

Геном->хромосомы->ДНК->ген (генетический код).

Генетический код он же Ген — это определенные сочетания нуклеотидов и последовательность их расположения в молекуле ДНК. Т.е. "ген" состоит из последовательно(?) идущих друг за другом "нуклеодидов". В ДНК используется четыре нуклеотида — аденин (А), гуанин (G), цитозин (С), тимин (T).

Геном->хромосомы->ДНК->ген->"участки"(не нашел отдельного названия)

ДНК разбит на участки, разделяемые "стопами" (а иногда "стартами").
Каждый участок - тоже набор нуклеотидов плюс "стоп". Стоп - определенная последовательность из нуклеотидов.

Участки кодируют молекулы белка. Т.е. из одного участка получается один строго определенный белок. Соответствия один к одному нет, т.е. существуют различные участки которые кодируют один и тот же белок.

Белок состоит из аминокислот. Которых двадцать штук. Значит нам нужно минимум три нуклеотида чтобы закодировать все двадцать аминокислот ( 4*4*4 ). Порция из трех нуклеотидов называется "кодон". Или триплет.

Геном->хромосомы->ДНК->ген->"участки"->кодоны->нуклеотиды.

Вариантов получается 64 штуки. 3 из этих вариантов приходятся на "стоп".
Итого 61 вариант на 20 аминокислот...

Избыточность. И вообще если бы нуклеотидов было пять достаточно было бы "порции" из двух чтобы закодировать аминокислоту. И еще на стоп осталось бы...


Дальше.

Белки производятся в строго отведенном для этого месте. И ДНК туда не попадают. Поэтому информацию о том что именно производить нужно донести до этого места. Этим занимаются мРНК (иРНК). То бишь одна молекула мРНК это копия одного участка ДНК. Копию естественно нужно сначала создать. А потом оттащить к "фабрике". Этим занимаются молекулы называемые...да без разницы как они называются.

Генетический мусор.

Не все "участки" одинаково полезны. Ровно как и не все гены. Есть определенные участки которые не формируют никакие белки. Это и есть генетический мусор. ДНК в основном состоит из такого вот мусора. У человека к примеру этого мусора 97%. Он не совсем бесполезен, точнее очень даже полезен. Полезен поскольку различные участки "мусора" можно сравнивать между собой, и это порою проще чем сравнивать "смысловые" участки. В результате таких вот сравнений человек и обезьяна не могу дать потомства. Далее - неугодные генетические изменения воздействуют на ДНК случайно и велика вероятность того что эти изменения попадут в генетический мусор. Туда им и дорога.

Различия в генах

Во первых у разных существ разное количество генов. Цифры - десятки тысяч. Во вторых большенство этих генов мусор. В третьих - в тех что не мусор ( смысловые гены, из которых потом белки собирают) очень мало отличий. По непроверенным мной данным от мыши мы отличаемся на 300 генов. Информации это не несет поскольку непонятно сколько реально информации в этих 300 генах. Не нашел.

У человека 23 хромосомы. Сколько в этих хромосомах генов и сколько в генах участков - не нашел.
Косвенно - предполагалось, что их(генов?участков? наверно все же генов) 80 тыс. и что они содержат примерно 3 млрд. нуклеотидов).

К началу 2001 года в геноме человека со стопроцентной достоверностью идентифицировано 30-40 тыс. генов - это от одной из команд занимавшейся расшифровкой человеческого генома.

Доктор Вильям Хезелтайн (руководитель фирмы "Хьюмэн Геном Сайенс") настаивает, что в их банке содержится приватизированная информация на 120 тыс. генов.

Фирма "Инсайт" имеет каталог 140 тыс. идентифицированных генов человека и также настаивает на этом количестве общего числа генов человека.


Выводы.
Каталоги генов худо бедно получены. Их расположения на хромосомах вроде тоже. Какие гены за что отвечают - очень частично. Что с этим всем делать - пока непонятно. Если я правильно понял ученые методом пусть и научного но тыка как-то научились оперировать некоторыми порциями геномов у некоторых видов. Отсюда - "генетически измененные огурцы" и прочее.

Вот пока и все что я знаю о ДНК на текущий момент...

А также то что конгрессом США был недавно принят закон, пресекающий саму возможность дискриминации человека по генетическим признакам.

Далее посмотреть - как из "участков" строятся белки, зачем, как из белков строятся образования большего порядка и т.д.

И эти люди пишут на С++....

Как им это удается?
Предыстория - опять забыл как использовать "high-resolution performance counter" (писал на С++)- т.е. более точный таймер. По ключевым словам permormance timer сделал поиск в гугле, первая ссылка на пример на C#, зашел, посмотрел что функции называются QueryPerformanceCounter и QueryPerformanceFrequency...
И тут глянул комментарии...
Dear Sir,
Iam a new progrmmer and I need this code to measure time for some process with high precision, and iam using Visual C++ 6,
and when i copy this code and paste it in the Visual C++ and compile the code it gives errors which iam pasting now:
Can you please tell me which mistake am i making
thanks

ompiling...
Text1.c
D:\USER\Perkash\Text1.c(1) : error C2061: syntax error : identifier 'System'
D:\USER\Perkash\Text1.c(1) : error C2059: syntax error : ';'
....
Text1.exe - 15 error(s), 0 warning(s)


Он конечно сам написал что он "new progrmmer"...но ожидать что код написанный на одном языке свободно откомпилируется на другом это немного перебор.

четверг, 1 ноября 2007 г.

Project Euler - этюды для программистов для взрослых.

Project Euler - сайт с различными задачами различной сложности, в основном конечно требующими знаний математики и физики. Но и для профанов можно найти что-то интересное.

Подпоследовательность...суперпоследовательнось..перебор...вообщем

Взято с RSDN, что в свою очередь взято из статьи в журнале MonadReader выпуск#1
Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.
Пример:

p = 1 2 3
s = 1 2 3 1 2 3 1
# # #
# # #
# # #
# # #
# # #
# # #



Чтобы далее не заморачиваться с наборами неуникальных элементов, будем полагать, что p(n) = [1..n], т.е. алфавит из n букв.

Напишите:
1) Предикат, проверяющий, является ли данная строка s суперпоследовательностью для алфавита p(n). Наивная реализация занимает O(n! * length(s)), это неприемлемо долго.
2) Генератор кратчайшей суперпоследовательности для p(n)
3) Формулы для оценки нижней и верхней границ её длины. Понятно, что грубые оценки — это n и n^2-n+1. Можно ли их сузить?
4) Формулы для оценки количества кратчайших суперпоследовательностей.

Для любителей самообразования:
— напишите это на Хаскелле и на J
— — наиболее читаемо
— — наиболее компактно
— — наиболее быстродействующе