1. Куча / Говнокод #17654

    +127

    1. 1
    2. 2
    wct 
    http://habrahabr.ru/post/250713/

    Запостил: Vasiliy, 16 Февраля 2015

    Комментарии (106) RSS

    • Занятно. Интересно, как теперь расшифровывается аббревиатура?

      Оригинал: Для представления чисел в ней используются буквы A, B, C, D, E, F, G, O. Аббревиатура "wct" расшифровывается как Word Octal.

      Хабр: В Wct всего 16 символов, а именно: A, B, C, D, E, F, G, H, I, J, K, L, M, N, P, O (идентична HEX, но полностью состоит из букв).
      Ответить
      • Да-да, всё верно, O идёт после P (что тоже значительно усложняет процесс написания программ в некоторых случаях, особенно, если вы новичок).

        Внезапный ход конем. ИМХО надо улучшить WCT случайно намешать буквы.
        Ответить
        • Сделать CryptoWCT, SHAWCT, RSAWCT.
          AB + GD = GC - не просто гаммирование, а wct-ирование.
          Ответить
          • var WCTCrypt = (function(){
              var toWCT = 'ABCDEFGHIJKLMNPO'.split('');
              var fromWCT = {};
              toWCT.forEach(function(s, i){ fromWCT[s] = i; });
              
              return function(str, key){
                var res = '';
                for(var i=0, k=0; i<str.length; ++i, ++k) {
                  if(k == key.length) k = 0;
                  res += toWCT[fromWCT[str[i]] ^ fromWCT[key[k]]];
                }
                return res;
              };
            })();

            http://ideone.com/bNQJ55
            Ответить
          • > не просто гаммирование, а wct-ирование.
            гамнирование
            Ответить
        • > O идёт после P
          Для совместимости. Прошлая система тоже заканчивалась на O.
          Ответить
      • Да это же WCT 2.0! Мобак наконец-то забил на восьмиричное говно и изобрёл шестнадцатеричную систему!

        P.S. Он еще и лицензию у FASM'а подправил на свою. Нехороший человек.
        Ответить
        • я теперь боюсь использовать обычный хекс,а то вдруг я нарушаю права автора?

          Хотя не может не радовать, что автор пришел к мировым стандартам хранения информации в степенях 2
          Ответить
    • P.S. Я искренне надеюсь, что это выпустили из песочницы хабра только ради стёба...
      Ответить
      • А может, это местные новостники время от времени так сливают накопившиеся инвайты.
        Ответить
        • Заинвайтить и сразу же насрать в карму?) Хитрый план.
          Ответить
        • > 13 ноября 2013 в 21:44 по приглашению НЛО
          Вот теперь я точно разочарован в хабре... Когда-то хотел написать хорошую статью, получить инвайт. Потом передумал. А после такого - ноги моей там не будет.
          Ответить
          • У roman-kashitsyn попросить мог.
            Ответить
            • Да что там делать то? Почитать я его и так могу. Статьи мне писать лень. А за комменты меня там затроттлят в первую же неделю.
              Ответить
            • Тут гость когда-то раздавал.
              Ответить
          • А дата тут к чему? 13 ноября что-то плохое произошло?
            Вообще, разочаровываться нужно не из-за таких статей, а из-за тех, которые выглядят достаточно правдоподобно, отчего их плюсуют за идею.
            post/248497
            Ответить
            • Ну а что такого в этой статье? Я ее, конечно, по диагонали проскроллил, но вроде бы нормальное разоблачение аудиофильских мифов. Плюсовать бы не стал, наверное, т.к. слишком очевидные выводы и мне непонятна цель статьи - ведь эти тёплые ламповые кабели как покупали, так и будут покупать.

              P.S. Буквально сегодня попадался серебряный ethernet(!) патчкорд для тех самых аудиофилов... Боюсь спросить, его тоже надо прогревать? А что делать с провайдером? У него-то линия из медного говна да еще и на холодной улице. Вдруг звук по дороге испортится?
              Ответить
              • > по диагонали
                Вот в том и соль.

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

                Похоже на мои споры с wvxvw о философии. Я также понятен аудитории ГК, как автор статьи - хабру. И вроде бы я говорю какие-то логичные и правдоподобные с бытовой точки зрения вещи. Все кивают, но только wvxvw смотрит в монитор и закрывает лицо руками.

                P.S. wvxvw, простите меня. Когда я прочитал статью, я понял, как я позорно выгляжу в глазах образованных людей.
                Ответить
                • Философия же простая. У меня курс по ней есть.
                  Ответить
                  • Философия же нахуй не нужная

                    fixed
                    Ответить
                    • школота с со статусиками от Конфуция против.
                      Ответить
                      • это где он про айфоны говорит?

                        имхо тру философия элитарна и доступна примерно 0,01 проценту людёв
                        Ответить
            • > post/248497

              лол. как владетель хорошего стерео... мне уже по барабану.

              чудак просто похоже не в курсе что, у изоляции тоже есть сопротивление, и самое главное, ёмкость. в добавок, простое качество того как провода на концах припаяны/этц к бананам/клемам (и качество самих бананов/клем) тоже играет большую роль. (а цена высокая просто потому что рынок маленький.)
              Ответить
              • > Существует наука, которая объясняет явления, когда кто-то слышит разницу в звуке при смене кабеля. Она называется психоакустикой.

                бляяяяяяяяяяяяяя
                Ответить
              • > у изоляции тоже есть сопротивление
                И на что же влияют эти *мегаомы* и *пикофарады*? Ты же не СВЧ по этому кабелю гоняешь...

                Ну про качество сборки, пожалуй, соглашусь.
                Ответить
                • вы еще про магнитное поле вокруг провода вспомните, горячие физики
                  Ответить
                  • Кстати, автор статьи даже скин эффект рассматривал. Только, какой позор, я уже подзабыл всё, что об этом знал, а поэтому не могу сказать, где он мог ошибиться.
                    Ответить
                • блин, зря сопротивление даже упомянул.

                  главное - емкость. потому что иначе изоляция даёт наводки. почему народ и страдает с тефлоном, у которого высокое сопротивление *и* низкая ёмкость.

                  второе. упоминается, роль поверхности провода. которая в случае обычных проводов покрыта, в добавок к оксидам, ХЕЗ какими остатками производственных методов.

                  в конце концов.

                  №1. я разницу слышу. межблочники: $0.01 кусок проволки vs $40 vs $120 vs $250 кабеля. тебе стадо слонов по ушам должно быть пробежалось, если ты не слышишь разницы между куском проволоки и кабелем $120. $120 vs $250 разница незначительная (но я все равно купил потому что нужен был кабель для DAC'а и хотел сравнить). таже фигня с кабелями для акустики (нормальная цена: $40 за метр).

                  №2. большинство этих кабелей производится (не путать с теми кто их рекламирует и продает!) фирмами которые делают кабеля для научного сектора. я с одним таким типом пару недель работал. кабель использовался для подключения тестовых девайсов к анализатору и позволял до 1GHz сигналы анализировать.

                  главный вопрос - слышишь ты разницу или нет, и стоит ли эта разнца денег которые за нее просят. если вы увлекаетесь какой попсой, то вы только выиграете покупая дешёвую технику.
                  Ответить
                  • Перефразируя старый анекдот: "Кабель за 120 баксов вязл? Ну ты лох, за углом такой же за 250!"
                    Ответить
                  • > изоляция даёт наводки
                    Господи, да какая там ёмкость то, какой скин-эффект? У тебя же там не СВЧ и даже не мегагерцы. От силы 100кГц гоняешь, и то маловероятно. При 10 кГц скин-слой 0.66мм, при 100 - 0.21!

                    Проволока за $0.01 звучит хреново либо потому что она слишком тонкая, либо потому что там вместо меди какое-нибудь дерьмо с высоким сопротивлением (само собой это всё влияет только на провод, идущий на сами динамики). Ну само собой правильная экранировка/завивка тоже влияет (вот тут уже на межблочники).
                    Ответить
                    • Ну и на случай если кто-то считает, что 0.21мм это мало, и в толстом проводе середина будет незадействована: многожильные провода давным-давно изобрели.
                      Ответить
                      • я не физик. я тебе на это ответить технически не могу.

                        все что я могу тебе сказать что кабель за 120 работает лучше чем за 20. но на какой попсе или роке, ты этого не услышишь, но на джазе и классике - в особенности классические концерты - разница в полный рост.
                        Ответить
                        • блядь, ну началось
                          как будто если в попсу контрабасик соло вставили, то он уже и не контрабас и ничего уловить нельзя, ПУШО ПЕРЕКОМПРЕССИЛИ ВОЙНА ГРОМКОСТЕЙ А УНАС ДЖАЗ ДУХОВНОСТЬ ПРОВОЛОКИ СЛЫШНО
                          Ответить
                          • да нет. просто потому что в попсе (как и в попе и роке) очень редко присутствуют какие либо сложные музыкальные завороты.

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

                            сравни с каким АукцЫоном.
                            Ответить
              • Ну, одно дело - когда кто-то покупает себе проигрыватель грампластинок ценой в 2-3 яблобука, делает колонки на заказ специально под комнату и потом долго ругается с женой, когда она просит переставить диван. Что тут поделаешь, разница действительно есть, её можно услышать и измерить.

                И совсем другое дело, когда начинается упомянутая выше "психоакустика", учёт направления кабеля, полутораметровые (не 15-метровые!) USB-шнуры за 5000 фунтов, борьба с помехами от оперативной памяти на цифровой сигнал и рассуждения о сухости звука после преодоления пути от жёсткого диска через шины и оптику к ЦАП. Здесь надо гнать упоротых и не допускать, чтобы в их секту продолжали поступать невинные души.

                Идея-то хорошая у автора была, вот только не надо было ему физику хотя бы в школе прогуливать.
                Ответить
                • На самом деле дорогая и годная ЦАПка порвёт все эти проигрыватели по качеству звука как тузик грелку. А "ламповость" аля дефекты АЧХ спокойно воссоздаётся богомерзкими цифровыми алгоритмами.

                  Но ты не понимаешь сути... Дело же совсем не в качестве звука. Дело в удовольствии от процесса. Сидеть в дорогом кресле, наслаждаясь французским вином и классической музыкой, и смотреть как крутится раритетная пластинка...
                  Ответить
                  • Мне очень неловко, но не могли бы Вы дать мне взаймы один лойс? Мне это очень нужно...
                    Ответить
                  • > Но ты не понимаешь сути...
                    Это да. Я-то как рассуждал, когда писал: хочется человеку по какой-то странной причине в наше время послушать пластинку. Значит, надо взять аппарат поинтереснее, который это ненадёжное аналоговое говно не поцарапает, не запылит и верно считает.
                    Ответить
                    • Это мы ещё пластинки застали в детстве... А те, кто помоложе, если и знают что это такое, то в руках уж точно не держали.
                      Ответить
                      • Кстати, я тут подумал. Вот если сейчас по старой памяти включают в начало песен пластиночное шуршание, то лет через двадцать олдфаги будут включать в видео сильно пережатые фрагменты, квадратики как в цифровом телевидении при плохом сигнале и прочие тёплые битовые моменты.
                        Ответить
                  • > На самом деле дорогая и годная ЦАПка порвёт все эти проигрыватели по качеству звука как тузик грелку.

                    Зависит от того как меряешь. Гармоники 2го и более высоких порядков цифра просто не способна передать.

                    > А "ламповость" аля дефекты АЧХ спокойно воссоздаётся богомерзкими цифровыми алгоритмами.

                    Фиг его знает. Я фан по классике, и на лампах она звучит на порядок лучше.

                    В добавок, транзисторы просто не способны передать быстрой и сложной вариации в сигнале: большинство качества теряется в последнем каскаде мощника.

                    А на лампах, в каком квартете, я однозначно слышу разницу между гомофонией и полифонией.
                    Ответить
                    • > я однозначно слышу разницу между гомофонией и полифонией.
                      омг
                      теперь для этого лампы нужны?
                      Ответить
                      • Вообще говоря, такую разницу должно быть прекрасно слышно не оцифрованных в 128kbps пластинках с шипящим фоном.
                        Ответить
                      • зависит опять таки от музыки. это какая то там бахова сюита для струнного квартета. везьде всегда пишут что пример гомофонии, но услышал я это четко только на ламповом усилке. транзисторные усилки слегка все сглаживают (что аналогично реверберации) что ведет к тому что сказать какой звук от какого именна инструмента происходит сложно/невозможно.

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

                        все зависит от музыки.
                        Ответить
                      • > теперь для этого лампы нужны?

                        к слову. вам в России сильно возмущатся не стоит. потому что в России кучи ламповых усилков делаются и стоят они (в старые времена) ~$350. в добавок, почти все дешевые лампы которыми пользуются подавляющее большинство усилков, производятся опять таки в России.
                        Ответить
                    • > Гармоники 2го и более высоких порядков цифра просто не способна передать.

                      Блядь, да ты долбоеб что ли?
                      Ответить
                      • Ну давай, передай гармоники 2го и более высокого порядка одной цифрой.
                        Ответить
                        • > Ну давай, передай гармоники 2го и более высокого порядка одной цифрой.
                          Да запросто. Одна проблема: символов для обозначения цифр этой системы счисления не хватит.
                          Ответить
                    • Говорят, что если слушать через $TUBE_AMP_NAME композиции ВИА Slayer, то можно услышать треугольник.

                      > Гармоники 2го и более высоких порядков цифра просто не способна передать.
                      То есть если я оцифрую синусоиды 200 Гц и 400 Гц и сложу оба сигнала, то на выходе получу первую синусоиду без следа второй?
                      Ответить
                      • Ну он, наверное, о гармониках которые улетают выше частоты найквиста (22кГц или сколько там сейчас в хай-энде).

                        Т.е. была у нас синусоида 12кГц и две её гармоники на 24 и 36. При оцифровке 2 последних проебались.
                        Ответить
                        • А, ну, если так, то да, хотя "режутся вторые гармоники" - не особо-то четкая интерпретация теоремы Котельникова.
                          Ответить
                • "Идея-то хорошая у автора была, вот только не надо было ему физику хотя бы в школе прогуливать."

                  Среди физиков я вижу эту проблему повсеместно: сферический конь в вакууме.
                  Ответить
          • статью то все равно пиши,я почитаю
            Ответить
          • Ну как на любой свалке там можно найти интересные вещи, вот недавно читал:
            http://habrahabr.ru/post/147927/
            Понимаю, что сейчас в последние годы, на то, что выдают за ООП, не набрасывает только ленивый.
            Тарас, да и я тоже, но он конечно в этом сильно преуспел делал это задолго до того как обсирать кресто-жаба-ооп стало мейнстримом.

            Кстати, жду появления таких статей про MVхх-паттерны. В стиле: "я не понимаю что же нам загоняют под видом MVC"?
            Ответить
            • Читал это как раз в период "Паттерны - круто, ООП рулит". Здорово открыло глазки.

              Вообще любой подход, возведенный в абсолют - зло. Лавировать надобно.

              Про MVC и и прочие MVVM - у скольких людей не спрашивал - все видят его "по-своему"тм. Но что характерно [капитан]вьюшка показывает, модель вычисляет, контрол перенаправляет ввод юзера [/капитан]. Связи же между ними - сущий ад
              Ответить
              • >в период "Паттерны - круто, ООП рулит". Здорово открыло глазки.
                Ээээ. Лень гуглить твои здешние откровения про паттерны. Помницо всем говнокодом открывали.
                >у скольких людей не спрашивал - все видят его "по-своему"
                Такая же херня. В этом их проблема.
                Я даже видел случай на практике, когда два человека последовательно писали один и тот же проект используя MVC. Один писал-писал - уволился, другой обломался сопровождать, приговаривая что это неправильный mvc и переписал с нуля, опять используя MVC (более говняно кстати). Вышли СОВЕРШЕННО разные вещи.
                Просто вот, ну абсолютно всё по-разному.
                Ответить
                • >> Ээээ. Лень гуглить твои здешние откровения про паттерны. Помницо всем говнокодом открывали.

                  Ну так молод и горяч.
                  А вообще паттернов ровно 2 - высокая связность и низкое зацепление

                  >> Вышли СОВЕРШЕННО разные вещи

                  Мне вообще это видится в виде фразы - "не лепи все в кучу, блеать!"
                  Ответить
                  • > А вообще, паттернов ровно 2 - высокая связность и низкое зацепление
                    А я думал, что тот-самый-который-того и синглтон.
                    Ответить
                • >>у скольких людей не спрашивал - все видят его "по-своему"
                  >Такая же херня. В этом их проблема.
                  ох щи, у нас сейчас сидит программист, он вроде как и опытный, и довольно не молодой уже (50+, но не в маразме), но веб не знает совершенно, паттерн не понимает.
                  я хоть сам-то junior, но когда я увидел, что он наворотил, мне же блять страшно стало!
                  jquery? нет, говно, я пишу на голом JS. что? CSS framework? нахера? с ними гемороя много, буду гробы аля 90ые клепать.
                  никакого EntityFramework, только самописная ORM.
                  контроллер вообще ничего не слышал про секцию доступа, все чуть ли не напрямую в модель работает. при чем, секция доступа как бы и есть, но вот только там процедура хранимая exception бросает, если userid = 0.
                  вьюхи, ох щи! там каскад из partial view, на клиенте 100500 ajax запросов, чтобы обновить их, при чем обновляется все через $('#divContainer').html(ajaxResult). и это не говоря уже о том, что там километры непонятной лапши на javascript.
                  все ссылки указаны руками, без "маршрутизатора". шаблоны модели принципиально не пользуется. зачем? есть же partial.

                  DI паттерн? нахера? mock? зачем это?
                  я честно говоря даже боюсь ему что-то говорить и объяснять.
                  я вижу, что он понял это как
                  view - разметка для клиента
                  controler - прослойка для работы с базой
                  model - непосредственно база.
                  Ответить
                  • > view - разметка для клиента
                    > controler - прослойка для работы с базой
                    > model - непосредственно база.
                    Если почитать Фаулера, то примерно так и получается. Только нужно уточнять, что это page controller.

                    ЗЫ. Веб - это всегда говно. Плюнь тому в глаз, кто скажет, что веб - не говно.
                    Ответить
                    • Можно писать веб на Хаскеле. Занятно получается. Как варенье с говном мешать.
                      Ответить
                    • >Плюнь тому в глаз, кто скажет, что веб - не говно.
                      Второй уже выбит за то что поминал старое?
                      Ответить
                    • так, да не так
                      Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.
                      Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.
                      Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

                      это определение мне больше нравится.
                      Ответить
                      • Ну а мне вот нравится определени: контролер - троллейбус, модель - Клаудия Шифер, представление - Конек-Горбунок. И что мне теперь делать?
                        Ответить
                  • >никакого EntityFramework, только самописная ORM
                    Ну как сказать, тут-то может он и прав.

                    >DI паттерн? нахера? mock? зачем это?
                    Где? Сервер или на клиент?
                    А с чем сишарперы едят DI?
                    Ответить
                    • >>никакого EntityFramework, только самописная ORM
                      >Ну как сказать, тут-то может он и прав.
                      ну так и скажи, EF отлично вписывается в MVC модель хотя бы потому, что у него все на классах работает. конечно же, ничего не мешает вам использовать хранимые процедуры, которые будут выполнять ваши, а не сгенирированные запросы. а вообще, compiled linq2sql работает значительно быстрее обычных, поэтому много проблем с производительностью можно решить.

                      >>DI паттерн? нахера? mock? зачем это?
                      >Где? Сервер или на клиент?
                      >А с чем сишарперы едят DI?
                      на сервере конечно же.
                      да много с чем едеят. вот например книга есть http://habrahabr.ru/post/168989/
                      самый популярный Ioc - ninject, но так же есть unity. хотя первый далеко не самый быстрый, и не самый функциональный, он остается самым популярным.
                      http://habrahabr.ru/post/235995/ вот тут примеры есть
                      Ответить
                      • >а вообще, compiled linq2sql работает значительно быстрее обычных, поэтому много проблем с производительностью можно решить.
                        Вот хотел написать про linq2sql оно всё-таки лучше моструозного EF.

                        >на сервере конечно же
                        >да много с чем едеят. вот например книга есть
                        Используете? Или просто теоретизируете?
                        Ответить
                  • > на клиенте 100500 ajax запросов, чтобы обновить их
                    Будто что-то плохое.
                    >при чем обновляется все через $('#divContainer').html(ajaxResult)
                    А вот это зашквар. Но вы сами себе противоречите.

                    Чуть выше:
                    >jquery? нет, говно, я пишу на голом JS.
                    Ответить
                    • >> на клиенте 100500 ajax запросов, чтобы обновить их
                      > Будто что-то плохое.
                      есть средства ASP.MVC для выполнения каких-либо ajax запросов, или генерации разметки.
                      можно в пару аттрибутов сказал ссылке, что она будет работать асинхронно, а можно в пару десятков строк написать ajax запрос для этой конкретной ссылки, чтобы получить результат.
                      проще говоря, там все работает на том же jquery ajax, но там уже его средствами. сервер генерирует соответствующие атрибуты, и jqury перехватывает submit формы, и делает его асинхронно. а его же случае, он вешал события на клик по ссылке, и обрабатывал его сам.
                      не сказал бы, что разница какая-то есть, но количество лапши-кода для каждой такой ссылке сильно засоряет все.

                      >Чуть выше:
                      >>jquery? нет, говно, я пишу на голом JS.
                      ну, это он вначале говорил, а потом обратился ко мне с вопросом, как ему добраться до какого-то элемента по DOM. я ему подсказал использовать jquery, объяснив всю "мощь" селекторов, и теперь он ими пользуется, но зачастую неправильно.
                      например, выгружая 100-200 записей, которые скрываются, он сделал класс low-rank-record, и при нажатии на ссылку "скрыть" отрабатывал $('.low-rank-record').toggle(300).
                      все бы ничего, но это отрабатывало для всех записей, и браузер на пару секунд умирал от этих анимаций.
                      конечно же, я потом все эти записи помещал в div, и скрывал и показывал уже его, на не все эти записи.
                      Ответить
                      • >есть средства ASP.MVC для выполнения каких-либо ajax запросов, или генерации разметки.
                        >можно в пару аттрибутов сказал ссылке, что она будет работать асинхронно, а можно в пару десятков строк написать ajax запрос для этой конкретной ссылки, чтобы получить результат.

                        Эээ. Подменять js и разметку каким-то проприетарным решением от Майкрософт, это очень удобно, да.
                        Не знаю какой там десяток строк, при правильном структурировании кода всего 1 строка с вывозом.
                        Ответить
                        • с чего это вдруг?
                          http://www.asp.net/mvc/overview/older-versions/creating-a-mvc-3-application-with-razor-and-unobtrusive-javascript
                          например, на основе атрибутов модели данных, он генирирует соответствующие аттрибуты для валидации данных, и на клиенте он отрабатывает.

                          например
                          public class UserModel {
                          ...
                                  [Required]
                                  [StringLength(8, MinimumLength = 3)]
                                  [Display(Name = "First Name")]
                                  public string FirstName { get; set; }
                                  [Required]
                                  [StringLength(9, MinimumLength = 2)]
                                  [Display(Name = "Last Name")]
                          ...
                              }

                          при вызове генератора текстового поля через @Html.EditorFor( x=> x.User)
                          он нагенирирует мне разметку
                          <input data-val="true"         
                                 data-val-length="The field First Name must be a string with a minimum length of 3 and a maximum length of 8." 
                                 data-val-length-max="8" 
                                 data-val-length-min="3" 
                                 data-val-required="The First Name field is required." 
                                 id="FirstName" 
                                 name="FirstName" 
                                 type="text" 
                                 value="Ben" />

                          а дальше, на клиенте включается jquery.validate, который валидирует форму по аттрибутам.
                          в действительности, это очень удобно.
                          для форм аналогичная ситуация
                          <form
                              action="/ajax/callback"
                              data-ajax="true"
                              data-ajax-loading="#loading"
                              data-ajax-mode="replace"
                              data-ajax-update="#updateme"
                              method="post">

                          data-ajax - то, что асинхронно
                          data-ajax-loading - див, который нужно показать пока выполняется запрос
                          data-ajax-mode - режим, в данном случае замена содержимого
                          data-ajax-update - id контейнера для замены содержимого
                          или тут можно почитать
                          http://chsakell.com/2013/05/12/mvc-unobtrusive-ajax/

                          вообще, весь стек asp.net в open source лежит, поэтому на проприетарное говно не катит
                          Ответить
                          • А чем это лучше, чем просто все то же самое написать в ж.скрипте? Без того, чтобы сищарп это генерировал? Работы примерно столько же, с той разницой, что заполнять поля в ХТМЛ можно отдать и верстальщику, а тому же верстальщику будет очень неудобно разыскивать где эти поля находятся в коде.
                            Вообще, идея метаданных - это, опять, все тот же Фаулер, и опять так же уебищно как и все остальное что было разработано в этом ключе.

                            Т.е. вот что примечательно: читаешь любую книжку связаную с програмированием, и иногда, честно так трешь ладошкой по лицу в задумчивости и непонимании - т.как тяжело. Но никто не говорит "да че ты дурачек, не майся, копи-пейст, завернул в транзакшн, и пей пиво". А читаешь книжки по тырпрайз архитектуре, так там читается, как художественная литература для дошкольного возраста + на каждом шагу "да забей ты, тяжело это". Есть такое чувство, что такие книжки именно и дают повод к развитию карманных софтваре-архитекторов.
                            Ответить
                            • >читаешь книжки по тырпрайз архитектуре, так там читается, как художественная литература для дошкольного возраста
                              Подтверждаю, читается легко, потому что много воды и копетанства.
                              Ответить
                            • тебе ничего не мешает самому писать обычные HTML теги. тут суть просто в другом, если меняется модель, тебе генератор выдает уже другой элемент.
                              например поменяли правило валидации, в частности регулярку или сообщение об ошибке.

                              да и вообще там ничего сложного нет @Html.EditorFor(x=> x.FullName, new { @class="link", onclick="javascript:alert('hello world');" })
                              Ответить
                          • Кучи бессмысленного говна.
                            Он нагенерирует мне SQL, он нагенерирует мне разметку, он нагенерирует мне Оджакс.
                            Передавать данные с сервера в виде html уже давно считается моветоном.
                            Ответить
                            • все, что он нагенерил можно править. да там вообще по сути все можно править.
                              Ответить
                              • Ну хорошо. Негенерило, я поправил как мне нравится.
                                "Поменяли правило валидации", и что дальше делать?
                                Перегенерировать и опять патчить, или как?
                                Ответить
                                • эм, правило валидации меняется в аттрибутах модели. при этом, генерируется специальная разметка, чтобы на клиенте отработал jquery.validate при submit. при этом, по эти же правилам данные валидируются при передачи в контроллер.

                                  при этом, ничего не мешает писать собственные аттрибуты валидаторы, чтобы скажем динамически менять регулярку для валидации.
                                  например, было
                                  [Required(ErrorMessage="Email is required")]
                                  [RegularExpression(@"MYREGEX", ErrorMessage = "Email address is not valid")]
                                  public string Email { get; set; }

                                  создаем кастомный атрибут
                                  public class EmailAttribute : RegularExpressionAttribute
                                      {
                                          public EmailAttribute()
                                              : base(GetRegex())
                                          { }
                                  
                                          private static string GetRegex()
                                          {
                                              // TODO: Go off and get your RegEx here
                                              return @"^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$";
                                          }
                                      }

                                  как видно по GetRegex туда можно писать любую логику, которая будет возвращать нужное значение, хоть из базы тянуть, хоть вебсервис, из конфига, etc...
                                  потом меняем аттрибут на
                                  [Email(ErrorMessage = "Please use a valid email address")]

                                  ну, и еще надо "на старте приложения" зарегистрировать аттрибут
                                  DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter));
                                  Ответить
                              • > все, что он нагенерил можно править
                                Так оно генерит весь этот хтмл не в рантайме перед передачей клиенту, а прямо в исходник? Как удобно...

                                > onclick="javascript:alert('hello world');"
                                А вот это вообще ПУШКА. Можно мешать все языки в кучу прямо как в любимом PHP!
                                Ответить
                                • >Так оно генерит весь этот хтмл не в рантайме перед передачей клиенту, а прямо в исходник? Как удобно...
                                  в смысле? если ты про HTML, то конечно в рантайме генерит.
                                  если ты про генерацию кода, то там есть стандартный шаблон, который генерирует код. например, ты создаешь модель, он тебе под него генерирует CRUD контроллер (если ты этого хочешь). в случае с EntityFramework, он может не пустой контроллер нагенерировать, а даже с обращениями в базу.
                                  так же, он может генерировать view типа
                                  <% using (Html.BeginForm()) {%>
                                      <%: Html.ValidationSummary(true) %>
                                  
                                      <fieldset>
                                          <legend>Fields</legend>
                                         
                                          <div class="editor-label">
                                              <%: Html.LabelFor(model => model.Id) %>
                                          </div>
                                          <div class="editor-field">
                                              <%: Html.TextBoxFor(model => model.Id) %>
                                              <%: Html.ValidationMessageFor(model => model.Id) %>
                                          </div>
                                  ...

                                  и конечно же, ты можешь менять как угодно. можно вообще забить на <%: Html.TextBoxFor(model => model.Id) %>
                                  и писать <input type='text' name='id' value="@model.Id" /> . это не asp.net webforms, там нет прослойки в виде viewstate.

                                  >А вот это вообще ПУШКА. Можно мешать все языки в кучу прямо как в любимом PHP!
                                  по сути, когда я передал ему анонимный объект, он все поля из него превращает в атрибуты html тэга, но в случае с class его нужно экранировать в @class, и надеюсь объяснять почему не надо :)
                                  Ответить
                                  • От меня все равно ускользает смысл происходящего. Я как-бы понимаю, что можно и так, но не понимаю зачем.
                                    Времена, когда было модно генерировать один и тот же ХТМЛ на сервере на каждый запрос давно прошли. Люди стараются больше не страдать такой херней, и перекладывать ответственность за клиентскую валидацию на клиент, вместе с разметкой, анимациями и т.д. В чем смысл писать это на сищарпе? Чтобы потом осознать, что серверу тяжело сгенерировать кучу одинаковых страниц, и добавить кеширование? А потом осознать, что кеширование не будет работать, если в страницы будет встраиватся информация специализированая под пользователя?
                                    Ответить
                                    • серверу тяжело [x]
                                      серверу сложно [x]
                                      у сервера непростой период в жизни [x]
                                      Ответить
                                    • вообще-то, сайты asp.net компилируются при первом обращении, и работают довольно шустро.
                                      переносить валидацию на клиента это вообще мовитон. начнем с того, что в браузере может быть отключен javascript (маловероятно, но все же), или же могут загрузить любое говно. короче, валидация на двух сторонах.
                                      опять же, есть тесты
                                      http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx
                                      http://www.miyconst.com/Blog/View/1049/asp-net-mvc-vs-php-yii-performance-comparison
                                      а так же стаковерфлоу
                                      http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and-i.html
                                      который заявляет о
                                      ◾Peak is more like 2600-3000 requests/sec on most weekdays. Programming, being a profession, means weekdays are significantly busier than weekends.
                                      и это при том, что у них на asp.net mvc и mssql все работает.

                                      никто не говорил, что все должен выполнять сервер. есть вообще asp.net webapi, который является rest api. собственно, он кроме json ничего не отдает.
                                      и кстати стандартное кеширование включается одним атрибутом.
                                      Ответить
                                      • Комментарий не читай @ сразу отвечай:
                                        >> клиентская валидация
                                        > переносить валидацию на клиент
                                        Где связь?

                                        АСП сайты работают быстро? Да что вы такое говорите, и что прям таки все сайты? А как считали? С чем сравнивали?

                                        Технологии не бывают сами по себе быстрыми или медленными. Эти тесты ни о чем таком не говорят. Быстрыми могут быть алгоритмы. А говно, генерирующее индивидуальные некешируемые ХТМЛ страницы не сможет соревноваться с решением, которое может кешировать большую часть информации, при достаточном объеме этой самой информации. И это будет справедливо для любого языка / технологии. Речь не о том, чтобы "включить кеширование". Его просто так "включать" бесполезно, нужно, чтобы кеш действительно помагал что-то ускорить, а для этого нужно соответствующим образом проектировать приложение.
                                        Ответить
                                        • >Речь не о том, чтобы "включить кеширование". Его просто так "включать" бесполезно, нужно, чтобы кеш действительно помагал что-то ускорить, а для этого нужно соответствующим образом проектировать приложение.

                                          Не знаю за что тут минус. Всё ж по делу.
                                          Кеширование включить-то можно, но из-за этого страница при обновлении будет неактуальна.
                                          Как сделать одним атрибутом инвалидацию кеша при изменениях в базе - непонятно.
                                          При отдаче мелких jsonов вместо монструозного неделимого HTML появляется возможность кешировать разные его части, например редко меняющиеся данные.
                                          Ответить
    • Они встретились!
      Ответить
    • да я смотрю он тролль, выложить исходники WCT Editor в WCT, и предложить покомпилировать
      Ответить
    • кто-нибудь уже пробовал гамлета через wct прогнать?
      Ответить
      • ты про https://ru.wikipedia.org/wiki/Shakespeare_(%D1%8F%D0%B7%D1%8B%D0%BA_%D 0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC %D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0% BD%D0%B8%D1%8F) ?
        Ответить
    • Афтор, я до сих пор не могу написать на своем языке слово pidor! исправьте в следующей версии
      Ответить
    • Хроника - 23 января 2015 года автор открыл для себя гитхаб
      Ответить
    • с английского в wct

      http://ideone.com/o4dn8L
      Ответить
    • Давайте ставить друг другу лойсы.
      Ответить

    Добавить комментарий