wizzard: (Default)
Вначале сорцы дотнета были полностью закрытыми.

Потом открыли Rotor (он же SSCLI). Потом в паблике появились symbols. Потом люди начали качать эти символы и строить неофициальные паки исходников.

Ну а теперь вот, есть сайт http://referencesource-beta.microsoft.com/ с онлайн-браузером (включая всякие Go to Definition, Find usages и т.д., и кнопкой Download ZIP archive :)

http://www.hanselman.com/blog/AnnouncingTheNewRoslynpoweredNETFrameworkReferenceSource.aspx

Пользуйтесь, успехов в дебаге и всё такое. Что не отменяет того, что привязываться к подробностям реализации - зло :)
wizzard: (Default)
compiler bug

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

или таки bite the bullet и продолжить составлять //gist.github.com/wizzard0/6189922?

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

а еще мне надо дописать спеку на код, написанный человеком А (не мной, но по моей просьбе), чтобы с ним мог интероперировать код, написанный человеком Б. тоже веселое занятие...
wizzard: (Default)
писал коммент к дискуссии тут - http://thedeemon.livejournal.com/64155.html
подумал, что оно достойно отдельного поста.

TL; DR: прототипы полезно писать на чем-больше-языков-тем-лучше, после чего мержить всё в кучу на каком-то mature рантайме (CLR, BEAM, JVM, V8), неважно, руками этот код написан или сгенерирован. и поддерживать уже там.


1. в дотнете много батареек "из коробки", которые заметно лучше, чем в других платформах, друг с другом интегрированы (поскольку у мсфт тупо есть ресурсы на полировку мелочей)
2. там очень просто абьюзить родной JIT и делать быстрый портабельный между всеми (!) поддерживаемыми Микрософтом и Моно платформами кодоген, работающий на той же скорости, что и compile-time (опять же, из-за наличия батареек )
3. и тулзы хороши (один concurrency visualizer чего стоит)
4. система типов по сравнению с хаскелем крайне бедна. но к ней достаточно удобно достраивать костыли (code contracts, pex и прочее), работающие частично в рантайме, частично в компайлтайме, на практике этого хватает.
5. много кто судит по дотнету по 2.0, но с тех пор очень много косяков планомерно исправляются.

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

короче, если хочется прыгать выше головы - помогает п.2
но очень уж широкий круг задач покрывается п.1, и с каждым релизом, как ни странно, растет.

я люблю строить велосипеды и юзать экзотические языки, но мелочи при этом - они вылазят. и их нетривиальное количество. поэтому дотнет дает (лично мне) *предсказуемость* темпов разработки. что не мешает регулярно пытаться сделать из него Эрланг-машину, например :)
wizzard: (Default)
Когда памяти много - говнокод, надеющийся на то, что гц позакрывает файлы - перестает работать, т.к. сборщик не собирает, когда памяти достаточно...
wizzard: (Default)
накалякал зачем-то чат. с каналами (на сервере роутятся), хистори и даже какой-то секьюрити.

30 LOC клиент, 8 LOC сервер. работает. круто :) в 2003 году мне такое и не снилось

EDIT: сорцы: https://gist.github.com/3962949
wizzard: (Default)
успешно шипнул микро-проект (10 кб бинарник, 200 кб рантайм) базирующийся на кастомном дотнет-рантайме (существенно расширенный/пофикшенный https://github.com/chrisdunelm/DotNetAnywhere )

зачем? потому что у людей урезанная "оптимизаторами" windows xp, на которую обычный дотнет не ставится с какими-то мистическими ошибками. а эта штука компилится под win/lin/bsd, и работает.

я этот рантайм фиксил еще пару лет назад, когда его можно было скачать с dotnetanywhere.org зип-архивом, а теперь вот надо бы форкнуть репозиторий и соорудить пулл реквест обратно. эх, когда ж руки дойдут.

версия конкретно по ссылке - там очень криво работают vtables, и как следствие - интерфейсы. у меня тоже криво, но меньше))
wizzard: (Default)

( см. блог Miguel de Icasa - Mono in 2011 )

Android, iOS, PlayStation Vita (“PSP 2”), Unity3D (PS3, Wii, Xbox360), Mac OS, Google NaCL, Phalanger (PHP .net), C++/C# bridge, IBM zSeries (omg), etc.

Я бы сказал, что маленький Xamarin (при помощи комьюнити) более успешно воплощает видение MSFT про “.net everywhere”, чем сама MSFT :)

Товарищи жгут. Даже MS внезапно выпустила Kinectimals на Mono (для MacOS)





цитаты пользователей:

  • shared C# code base for all our enterprise solutions - achieving the write once, compile everywhere promise with modern language and VM features everyone demands and expects in this century
  • logical, consistent and self-explanatory wrapper APIs for native services - allows us to write meta APIs of our own across platforms
  • low latency, low overhead framework
  • professional grade IDE and tools
  • native integration with iOS tools and development workflow
  • existence of satisfactory documentation and support
  • legal clarity - favorable licensing options
  • dedicated product vision via Xamarin - commercial backing
  • community support

такое… удачи товарищам, однако.

wizzard: (Default)
Problem: If you use ClickOnce and have created an installer with MSI 3.1 and .NET 4, you may find that the system is missing Windows Imaging Component (WIC), which causes the .net setup to fail

Solution: create a custom MSI Bootstrapper Package for WIC -and- add it as a dependency for the standard .NET bootstrapper package

I've created the bootstrapper and patch for the standard .NET bootstrapper which comes with VS.

Download this self-extracting archive , unpack to %PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages, and you're ready to go.

If everything is OK, you should see "Windows Imaging Component" in ClickOnce Prerequisites window. Add it to your project, and it should install fine from now on :)
wizzard: (Default)
сидел я, читал презентации с DEFCON 19

в частности, мне прислали ссылку на http://good.net/dl/k4r3lj/DEFCON19/DEFCON-19-McCoy-Hacking-Net.pdf , пафосно озаглавленное "Hacking .NET Applications".

полистал... посмотрел supplementary materials, сходил на сайт автора ( digitalbodyguard.com ), порылся там..

просто шиза какая-то. во-первых, человек на 2\3 пересказывает майкрософтовские .net security guidelines (да, чуть под другим углом, но по сути всё то же самое), во-вторых, кхм, мне было бы стыдно делать такие презентации - у меня уже в 2006-2007 году были аналогичные PoC на ВСЁ, о чем он пишет, но они мне казались настолько очевидными, что я думал, что такое соорудили все, кому хоть сколько-нибудь любопытна данная платформа.

не говоря уж о том, что методы защиты от подобных атак лежат, что называется, "на поверхности", как и сами векторы атак. вот если бы  он про что-то интересное рассказал, типа control flow obfuscation или object graph obfuscation, а не эту фигню... так нет, это ж думать надо, видимо...

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

а, да. я знаю, как сделать протектор (как навесной, так и кастомный) для .NET (и, вероятно, для Java - но яву я не люблю :)), которая будет гораздо надежнее всех существующих на рынке протекторов (xenocode, smartassembly, dotfuscator, salamander, eziriz и т.д.), и всех кастомных защит, которые я видел.
но на это нужно время и деньги, довольно-таки много, которых у меня нет, и я не знаю достаточно специалистов, у которых было бы желание заниматься тем же (а без желания тут многого не сделаешь, тема достаточно сложная и кропотливая).

ломать всё вышеперечисленное, собственно говоря, я тоже умею. но зарабатывать этим на жизнь не хочу.

а, да, так вот, о чем это я. при таком раскладе, выходит, я тоже могу выступать на дефконе? OMFG!

wizzard: (Default)

немного магии, несколько смутивших меня частных случаев - и у нас есть structural typing!

interface ISomething
{
int A {get;set;}
}

int x = (new{ A=5} ).Cast<ISomething>().A; // работает :)

а также __get__, __set__, __method_missing__ и прочие подобные плюшки.
в C# 2, не 4, прошу заметить :)
чего б еще такого соорудить...
 

wizzard: (Default)

А еще бывает, когда криво написанная защита (на бесплатном софте, что любопытно) мешает людям им пользоваться (например, с ней софт на Windows XP перестает работать). Это тоже плохо, но тоже исправимо…

wizzard: (Default)

Кстати, если кого-то вдруг интересует запуск .NET-бинарников под линуксом (без Mono), PSP (возможно и на других платформах, я просто не пробовал) – это можно, обращайтесь :)

Единственное что – я совершенно не горю желанием портировать какой-нибудь WPF, поэтому с GUI, скорее всего, будут проблемы. POSIX, да. Ну и PInvoke (возможны тонкости)

wizzard: (Default)

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

мне оно понадобилось на сишарпе, и я сдуру взялся переносить явский вариант – ну как же, языки же ближе вроде как? убив месяц, заподозрил неладное. пошел сравнил размер и офигел. плюсы – 30 KLOC, ява – почти 300 KLOC.

и таки да, пока что:

- плюсовый код читается гораздо легче, невзирая на C++ FQA
- на сишарпе получается в ~2 раза компактнее плюсов, не говоря уж о той куче кода, за которую я взялся в оригинале. как можно было так извратиться?…

wizzard: (Default)

товарищи… не пишите софт, который стучит домой… это раздражает и напоминает о том, что реверсинг – это интересно и увлекательно… надо, правда, подтянуть x86 и arm, ну и виндовые заморочки всякие. а то неспортивно, как только дотнет заканчивается так и я заканчиваюсь :)

ну а вообще да, сейчас везде намного более херово с секьюрити, прайвеси и этикой, чем кажется :(

з.ы. note to self: при обнаружении попыток брутфорса и\или иньектов надо не только тормозить и глючить, а и пытаться сбегать из песочницы\крашить ее, это бороть сложнее.

wizzard: (Default)

можно почитать больше и с картинками у Алексея - http://alexey.raga.name/

“- Теперь у меня есть на это ответ. Я знаю, что такое noSQL и покажу вам. Больше нет никакого смысла противопоставлять SQL и noSQL, теперь наступит мир, сказал Эрик.”

…Далее он всячески “наезжал” на язык SQL (а что, как архитектор MS SQL Server он легко может себе такое позволить) за отсутствие возможности композиции, отсутствие возможности рекурсии как таковой (да, есть теперь CTE, но это не то), за то, что тип результата не соответствует типу запроса, много и интересно ссылался на различных мировых светил и т.д.

…все законы и свойства, применимые к SQL-системам, дуально применимы к coSQL системам и наоборот. Взять ту же ссылочную целостность:
- в SQL ссылки направлены от родителя к детям, в coSQL – от детей к родителям;
- в SQL используется “внешняя” системы ссылок (объекты маркируются ID), в coSQL – внутренняя система (ссылки на сами объекты);
И так много, много пунктов.

Что из этого следует?
А то, что SQL и coSQL могут сосуществовать в одной экосистеме (и то, что этим занимается архитектор MS SQL Server уже является кое-каким намёком), а не являются “непримиримыми врагами”.
То, что (и Эрик это даже прямо сказал) обе эти системы могут иметь некий общий “интерфейс” и взаимодействие с системой (язык, если хотите) можно построить на основе этого “интерфейса”, то есть, одинаково работать и с тем и с другим.
То, что можно использовать наработки из одной системы в другой. Например, в SQL-системах имеются прекрасные оптимизаторы запросов и ещё куча всяческих полезных алгоритмов – вероятно, их можно будет применить в coSQL.
То, что, в конце концов, системы являются трансформируемыми друг в друга (и это следует напрямую из математики).

P.S. Нашел совершенно случайно. Подписался ;)

wizzard: (Default)

(захотелось мыслю написать и сюда тоже)

еще одна причина трепыханий с собственным JS рантаймом - потому что хочется сделать подобие Application Domains из .NET для JS, чтобы компоненты могли что угодно творить. ибо без eval (или кодогенерации, как кому угодно), все-таки, львиная доля привлекательности динамических языков теряется.

плюс, когда рантайм свой, можно делать как hard так и soft resource quotes, и попробовать все-таки осилить его сериализацию и сделать тот самый holy grail ака мигрирующие в пространстве (между машинами) и во времени (сейв-лоад) аппликухи.

а йаваскрипт, а не другой язык, просто потому, что популярный.

wizzard: (Default)

Disclaimer: Я использую VS в основном для C# и Javascript. Да, там стоят еще плагины на PHP, Fortran, Python и F#, но использую я их намного реже.

1. Расширения

  • Hide Main Menu – скрывает панель меню, как в Explorer, до нажатия ALT. Бережем пространство на экране :)
  • Javascript Parser – показывает дерево элементов JS-файла. Правда, чего не хватает этому расширению – автоскрытия панели на других типах файлов. Впрочем, C# и JS вперемешку в одном проекте все же встречаются редко.
  • JSEnhancements – свертыватель регионов в JS и подсвечиватель парных скобок. Must have. Надо сказать, что эту фичу у VS Team просят уже несколько лет, но они упорно закрывают ее с Won’t fix. Почему – непонятно((
  • Productivity Power Tools. Тут много. Одни Quick Access и Solution Navigator с быстрым поиском чего стоят. Еще, Ctrl+Click для Go To Definition – тоже must-have вещь, которой нету в штатной поставке VS из-за патентных троллей :/
    BEWARE: текущая версия Power Toys крашится, если у вас не-английская локаль и вы пользуетесь Quick Access. Обещали пофиксить. Пофиксили.
  • VS 10x Code Map – то же самое, что и Javascript Parser, только для C# и красивее. Умеет сворачивать и разворачивать куски файла синхронно с превьюшкой. На больших файлах тормозит.

1.1. Еще стоит посмотреть на Image Insertion, Regex Editor и Tangible T4 Editor. Я их ставил, но пока не привык. Поэтому ничего не пишу %)
Color Theme Editor, XAML Intellisense Presenter, Visual Studio Tip Of The Day Start Page, VSCommands 2010 может кому приглянутся.

1.2. Нет, я не использую ReSharper. Иногда, впрочем, ставлю, окучиваю какой-нибудь очередной опенсорс проект до приятного мне вида, потом удаляю. Потому что тормозит :/

2. Сглаживание

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

3. Настройка окон (кликабельно)

image

Как-то вот так. Но это по вкусу, конечно же. Для C# место JS Parser’a занимает Code Map, остальное остается так же.
Еще я Error List и Find Results часто выношу на второй монитор.

4. Критика, пожелания, советы? :)

wizzard: (Default)

Если у вас не работают урлы вида http://something/blabla:omfg (выдается ошибка 400), то знайте – она вызвана паранойей IIS (защита от атак на NTFS Alternate Data Streams).

Решение: KB 826437 ( http://support.microsoft.com/kb/826437 )

  1. Ensure Microsoft .NET 1.1 SP1 is installed on the machine
  2. In the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET create a 32bit DWORD value of VerificationCompatibility = 1
  3. Restart IIS.

У меня (IIS 6, ASP.NET 2) работает, может, поможет кому-то еще.

UPD: для ASP.NET 4 надо еще сделать такое:

<system.web>
<httpRuntime requestPathInvalidCharacters="" />
<pages validateRequest="false" />
</system.web>

<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>

Я надеюсь, вы понимаете значение этих проверок и что выключать их для всего сервера не нужно.
wizzard: (Default)

…когда она не является обьективной.

вот тут: http://fprog.ru/2010/issue4/practice-fp-4-screen.pdf , точнее, http://fprog.ru/2010/issue4/vitaly-mayatskikh-lisp-abstractions-on-steroids/ есть интересная попытка показать, что программы на CL могут работать быстрее, чем на других языках.
не знаю, насколько зффективен приведенный LISP-код автора, но вот сравнительные бенчмарки, извините, ни в какие ворота не лезут.

http://cd-riper.livejournal.com/258002.html – тут хорошо раскрыта часть огрехов, допущенных при их составлении

Резюмируя: сравнивать можно ТОЛЬКО код одного (высокого) качества, в сходных сценариях. А указанные в статье расклады тянут разве что на “ой, я попробовал и на других языках, я их в первый раз вижу, у меня получилась лажа, из-за чего бы зто? конечно из-за языка! ведь в моем любимом языке все шикарно работает!”

Benchmarks are not for programmers. They are for marketing guys.

А вообще, статья была про то, что CL можно и нужно компилировать. И что существуют довольно практичные инструменты, которые позволяют его реально использовать. Но, вот пример выбран, мягко скажем, неудачно :)

http://community.livejournal.com/fprog/7453.html собственно, тут можно присоединиться к срачу обсуждению :)

wizzard: (Default)

сижу пописываю на F#. не знаю как там обстоят дела у товарищей хаскеллистов, но за исключением Expert F# (как путеводителя по фичам) и Гугла таки ничего не требуется.

а) достаточно интуитивно всё работает (в смысле, “протайпчекалось? работает.”), ну это в общем-то неудивительно, особенно с eager семантикой

б) если что не работает (например, понадобилось сделать extension method и выставить его в C#) – гугл на любой запрос выбрасывает минимум два десятка солюшенов, бери-не хочу

вот это – правильное культивирование популярности языка. когда без особой ломки мозгов и без лишнего напряга с поиском литературы просто всё *работает*. ах да, я надеюсь, все уже знают, что оно без малейших проблем совмещается с кодом на C# и IronPython?

Profile

wizzard: (Default)
wizzard

June 2017

S M T W T F S
    123
45678910
11 121314151617
18192021222324
252627282930 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2017 02:44 am
Powered by Dreamwidth Studios