1. JavaScript / Говнокод #16489

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    $timeout(function(){
                    $rootScope.presentation_details = { 
                        "name" : $rootScope.presentationDetails.name,
                        "description" : $rootScope.presentationDetails.description,
                        "lastUpdatedView" : $rootScope.presentationDetails.lastUpdatedView,
                        "projectId" : $rootScope.presentationDetails.projectId,
                        "presentationId" : $rootScope.presentationDetails.presentationId,
                        "reimbursementRate" : $rootScope.presentationDetails.reimbursementRate,
                        "isTemplate" : $rootScope.presentationDetails.isTemplate,
                        "authorId" : $rootScope.presentationDetails.authorId,
                        "authorName" : $rootScope.presentationDetails.authorName,
                        "IsNewPresentation" : false,
                        "gDocsId" : $rootScope.presentationDetails.gDocsId,
                        "parameters" : {
                          "widgetURL" : $rootScope.presentationDetails.parameters.widgetURL,
                          "widgetIFrameUrl" : $rootScope.presentationDetails.parameters.widgetIFrameUrl,
                          "widgetTextareaContent": $rootScope.presentationDetails.parameters.widgetTextareaContent,
                          "widgetTotalEGinGasSaved" : $rootScope.presentationDetails.parameters.widgetTotalEGinGasSaved,
                          "widgetTotalEGinFewerVehicles" : $rootScope.presentationDetails.parameters.widgetTotalEGinFewerVehicles,
                          "widgetHowDoesSolarWorkStepFourDuration" : $rootScope.presentationDetails.parameters.widgetHowDoesSolarWorkStepFourDuration,
                          "widgetHowDoesSolarWorkOverallDuration" : $rootScope.presentationDetails.parameters.widgetHowDoesSolarWorkOverallDuration,
                          "widgetGraphWeather" : $rootScope.presentationDetails.parameters.widgetGraphWeather,
                          "wIdgetGraphTemperatureChartType" : $rootScope.presentationDetails.parameters.wIdgetGraphTemperatureChartType,
                          "widgetGraphTemperature" : $rootScope.presentationDetails.parameters.widgetGraphTemperature,                  
                          "widgetWeatherType" : $rootScope.presentationDetails.parameters.widgetWeatherType,
                          "transitionOut" : $rootScope.presentationDetails.parameters.transitionOut,
                          "transitionIn" : $rootScope.presentationDetails.parameters.transitionIn,
                          "parametersId" : $rootScope.presentationDetails.parameters.parametersId,
                          "subheaderFont" : {
                            "fontId" : $rootScope.presentationDetails.parameters.subheaderFont.fontId,
                            "size" : $rootScope.presentationDetails.parameters.subheaderFont.size,
                            "name" : $rootScope.presentationDetails.parameters.subheaderFont.name,
                            "color" : $rootScope.presentationDetails.parameters.subheaderFont.color,
                            "visible" : $rootScope.presentationDetails.parameters.subheaderFont.visible,
                            "label" : $rootScope.presentationDetails.parameters.subheaderFont.label,
                            "content" : $rootScope.presentationDetails.parameters.subheaderFont.content,
                          },
                          "normal2Font" : {
                            "fontId" : $rootScope.presentationDetails.parameters.normal2Font.fontId,
                            "size" : $rootScope.presentationDetails.parameters.normal2Font.size,
                            "name" : $rootScope.presentationDetails.parameters.normal2Font.name,
                            "color" : $rootScope.presentationDetails.parameters.normal2Font.color,
                            "visible" : $rootScope.presentationDetails.parameters.normal2Font.visible,
                            "label" : $rootScope.presentationDetails.parameters.normal2Font.label,
                          },
                          "backgroundImage" : $rootScope.presentationDetails.parameters.backgroundImage,
                          "backgroundImageVisible" : $rootScope.presentationDetails.parameters.backgroundImageVisible,
                          "backgroundImageLabel" : $rootScope.presentationDetails.parameters.backgroundImageLabel,
                          "backgroundColor" : $rootScope.presentationDetails.parameters.backgroundColor,
                          "backgroundColorVisible" : $rootScope.presentationDetails.parameters.backgroundColorVisible,
                          "backgroundColorLabel" : $rootScope.presentationDetails.parameters.backgroundColorLabel,
                          "widgetIndex" : $rootScope.presentationDetails.parameters.widgetIndex,
                          "rowPosition" : $rootScope.presentationDetails.parameters.rowPosition,
                          "colPosition" : $rootScope.presentationDetails.parameters.colPosition,
                          "rowCount" : $rootScope.presentationDetails.parameters.rowCount,
                          "colCount" : $rootScope.presentationDetails.parameters.colCount,
                          "duration" : $rootScope.presentationDetails.parameters.duration,
                          "startDate" : $rootScope.presentationDetails.parameters.startDate,
                          "endDate" : $rootScope.presentationDetails.parameters.endDate,
                        },
                    };
                }, 10);

    Заглянул в код текущего проекта... Зря тимлид не проводит кодревью... У кого есть идеи нахеряки?

    Запостил: jenezis, 06 Августа 2014

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

    • вычислить по ip автора и скормить ему распечатки его кода затем выкосить доступ к инету, разрешить только https://angularjs.org и внимательно внимательно за ним приглядывать.
      Ответить
    • У меня есть идея. напоить бензином и в костер
      Ответить
      • дорого. Можно просто в костер. Но тогда не перевоспитается.
        Ответить
        • не прожарится

          василий запорол дедлайны
          и премии лишил отдел
          и хоть я был в другом проэкте
          сьел за компанию кусок
          Ответить
          • Напомнило истории про Аркадия Паровозова. Авторы упарываются по-взрослому.
            Во-первых, намоделировали на компе эмуляцию театра с картонными фигурками, когда можно было запилить мультфильм с нормальными движущимися героями.
            Во-вторых, написали какое-то подобие стихов с годным ритмом, но без рифмы, которое читают как стихи. Когда слышишь, хочется сразу дать в морду авторам, поскольку часто очевидно, какое слово с каким рифмуется, но они специально это выпиливают!

            Будто бы купили права у американцев, но на рифму и нормальную анимацию не хватило - пришлось всё в последний момент менять, чтобы копирасты не засудили.
            Ответить
            • > подобие стихов с годным ритмом, но без рифмы
              Перашки?
              Ответить
              • Хм... хм... Похоже. Только не уверен, что в их мультфильмах количество слогов канонiчное.
                P.S. arkady-paravozov.ru - неповторимый авторский стиль проявляется во всём.
                Ответить
                • пирожки - это гуд даже без рифмы. Это даже я могу писать
                  Ответить
                  • Это как "лакни мои яйца". И все слова русские, и предложение формально хорошо составлено, а в сущности - багор.
                    После прослушивания закадрового текста Паровозова жить уже не хочется.
                    Ответить
                    • Меня устраивает багор

                      поедем девушка со мною
                      и поиграем в городки
                      уже запарился за месяц
                      кидать я биту сам себе
                      Ответить
            • странный багор
              Ответить
        • Чтоб я вас знал?
          Да ради Бога!
          Нужна мне ваших слов печаль!
          Я позабыл уж путь-дорогу
          Что к вам вела сквозь мрака даль.

          Махнув рукой на злые сплетни
          Что выплели сетьми вокруг
          Я бросил пить назло соседям
          И отвернулся лучший друг.

          Раз отвернулся – пес с тобою
          Перетопчусь и в одного
          Беда всегда идет с бедою
          Приметил я уже давно.

          И ласки ждать уж нету смысла
          Когда кострищ дым коромыслом
          Что вешать можно уж топор
          А тут кричат – Подай багор!

          Какая блажь, ну в самом деле!
          Какой багор, какой костер!
          Дела мне Ваши надоели
          Не мил пустых очей мне взор!


          «Блажь». Автор: [email protected]
          Ответить
    • Узнаю брата Ангуляра! Они вот тоже потихоньку набирают ынтырпрайзности, в названиях.
      Ответить
    • А по-существу: ну подумаешь немного размазано получилось. Это поди все "приложение" и есть. Так как их строят - просто набрасывают одной большой кучей, то это еще не самое плохое решение. Хуже было если бы это размазали по сотне шаблонов каких-нибудь, где потом хер найдешь откуда какой кусок клеится (у нас так).
      Я просто забил пытаться понять воспаленный моск нашего хтмл/питон разработчика в смысле навигации по проекту. Обычный текстовый поиск по файлам - единственное что спасает.
      Ответить
      • У нас тоже так было. Потом с опытом как то все собралось, единственное что меня напрягает у нас используются херобобины которые типа должны всё делать и данные забирать, сохранять и спину почесать если что. Но они все только усложнаяют
        Ответить
    • $rootScope.presentation_details = _.extend({}, $rootScope.presentationDetails, { "IsNewPresentation" : false });


      Fixed?
      Ответить
      • Неа. Есть же angular.copy и angular.extend, зачем ещё Underscore присобачивать???
        А ещё есть вероятность, что исходный код некоторыне поля ещё и вычищает :D
        Ответить
        • Я с angular не работала, не знаю, что там есть.
          Ответить
    • Парни, вопрос немного не по теме - в какой среде вы разрабите на яваскрипте? В грядущем проекте буду осваивать JS, поэтому хочется чтоб был поиск по методам/классам, рефакторинг, автодополнение, интелисенс и прочие плюшки IDE. Работаю в JetBrains IDEA, сгодится ли она для JS-разработки?
      Ответить
      • phpShtorm, если только для js webshtorm
        Ответить
      • Попробуй WebStorm.
        Ответить
      • webstorm от них же

        А вообще и в самой Идеи кажется можно
        Ответить
      • не слушай дураков
        сгодится идея, конечно
        Ответить
        • Сами jetBrains позиционируют WebStorm для CSS и JS кода.
          http://www.jetbrains.com/webide/
          >сгодится идея, конечно
          От инструмента - многое зависит.
          Инструмент может быть такое говно, что и язык программирования станет противен.
          Ответить
          • > Инструмент может быть такое говно, что и язык программирования станет противен.
            Notepad.exe?
            Ответить
            • А мне нравиться notepad++

              не бейте...
              Ответить
              • Sublime Text не пробовал?
                Ответить
                • ноуп, надо попробовать
                  Ответить
                  • ConEmu ещё глянь.
                    Я недавно её водрузил вместо шеллов, там есть очень удобный вариант использования её по принципу кваковской консоли.
                    Ответить
              • > нравиться
                > не бейте...
                Ну, ну...

                Но notepad++ - это вещь.
                Ответить
            • > говно
              про emacs было уже?
              Ответить
              • я знаю, есть фанаты.... но что сразу не VIM?
                Ответить
                • ты пробовал писать плагины для VIM?
                  Ответить
                  • Хуже, наверное, только батники да скрипты сендмейла.
                    Ответить
                    • Вот именно. В emacs ещё более-менее приятный язык расширений, и дока весьма приличная. А с версии 24 ещё и встроенный менеджер пакетов.

                      А ещё vim не может в асинхронность, в отличие от emacs. Поэтому и начали пилить NeoVim.
                      Ответить
                      • Есть шансы за то, что с версии 25... а может и 26 перепилят фонт-лок на использование какого-нибудь (а скорее всего нескольких) CFG парсеров. Не помню где читал, но кто-то из основных разработчиков об этом говорил. И возможно даже запилят это на сях а не на еЛиспе, потому что Семантик все-таки довольно медленный, и инкрементальный парсинг там не очень.
                        Ответить
                        • Я вообще семантик отключил, и всё равно на плюсовых файлах в пару тысяч строк емакс ощутимо притормаживает.

                          Нормальные грамматики это хорошо. В TextAdept хайлайтинг реализован с помощью парсер-комбинаторов LPeg. Код парсеров очень простой, и их легко комбинировать, собирая парсеры CSS, HTML, JS, PHP в рамках одного файла.

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

                            https://github.com/brianjcj/auto-complete-clang
                            Ответить
                            • Как можно использовать шланг для автокомплита я и сам знаю, смотреть надо в сторону https://github.com/Golevka/emacs-clang-complete-async и https://github.com/redguardtoo/cpputils-cmake.

                              Вот только банально подствечивать плюсовый код емакс толком не умеет. Выравнивание ломается регулярно, приходится релодить буфер. Потому и хочется втроить именно кланговый лексер, для нормальной подстветки кода.
                              Форматировать вполне можно и через clang-format, он раздражает гораздо меньше дефолтного емаксового форматтера.
                              Ответить
                          • По поводу CFG парсеров: их главная проблема применения в редакторе в том, что большую часть времени код не валидный. Поэтому, конечно, те из них, у который фиксированый, а еще лучше маленький лукахед, и не нужно пересматривать то, что уже распарсили, работают лучше, но все равно, как правило парсер ломается за несколько слов до того места где программист вводит текст, где он больше всего и нужен.
                            Можно пойти по пути МПС / Паредита и заставлять программистов всегда писать "правильно", но жить так не хочется. В итоге все редакторы, которые я видел, парсят как-то код вокруг курсора по-другому, и потом стараются это как-то подружить с глобальным парсером. С Ц++, судя по всему, еще хуже, т.как очень тяжело локально разобраться, что такое программист пишет.
                            Я так думаю, что для Ц++ будущее за стохастическими (PCFG) / машиннообучаемыми парсерами: сначала программист скармливает МЛ алгоритму, например, Буст (или наблюдает за погодой за окном), а потом этот алгоритм начинает угадывать какие слова где подставлять и как подсвечивать.
                            Ответить
                            • Для базовой подстветки вообще парсер не особо нужен, достаточно лексера. Адекватная подсветка лексем уже будет лучше, чем то, что сейчас в Emacs. А контекст ей нужен минимальный.
                              Ответить
                              • ну вообще парсер бы желателен - все равно приятно, когда грубые ошибки видно сразу. Нынче много всяких флексов да сосо/r -ов, так что не проблема.
                                Ответить
                                • Да для крестов парсер почти равносилен компилятору ;)
                                  Ответить
                                  • Я тут из контекста вырвал сообщение. Для крестов - да, проблема. Слишком уж богат и изворотлив язык. У них же даже препроцессор полный по Тьюрингу. Посему - хороший лексер - уже не плохо
                                    Ответить
                                  • > парсер почти равносилен компилятору

                                    Вероятно, ты имел в виду, что лексер почти равносилен парсеру. Да, лексер там сложнее, чем обычно, ему нужно помнить контекст, но всё же лексеру далеко до сложности парсера. У парсера на выходе AST, а у лексера - поток токенов.

                                    Clang-format, к примеру, работает с лексером, а не парсером. Если интересно, чуть больше об этом здесь:
                                    http://www.irill.org/videos/euro-llvm-2013/jasper-hires.webm
                                    С парсером не получится делать некоторых вещей, которые может делать лексер, особенно когда в дело вступают наши любимые макросы.
                                    Ответить
                                • Понятно, что с парсером можно больше всего подкрашивать. Но, как уже заметил @wvxvw, код во время написания редко бывает валидным. А почти все парсеры ожидают на входе валидные конструкции. Т.е. подсвечивать read-only код в вебе ими нормально, а вот во время редактирования - не очень.
                                  Ваша любимая VS, например, иногда отказывается форматировать некомпилирующийся код, ЛОЛ.

                                  Мне на самом деле достаточно видеть ключевые слова, комментарии и строки. В этих случаях лексера вполне достаточно. Всё остальное уже - баловство.
                                  Для проверки компилируемости можно просто в фоне гонять компилятор с --syntax-only.
                                  Ответить
                                  • Я и не говорил про все время. нужно иметь тумблер для переключения. Или тайминг. Например кодишь-кодишь, пошел курнуть, пришел - а парсер отработал и как бы намекает, что ты - позор нации
                                    Ответить
                                  • > Всё остальное уже - баловство.
                                    Ну не скажи. Жизнь без понимающего контекст автодополнения совсем не сахар.
                                    Ответить
                                    • автодополнение-ненужно-в-емаксе-этот-срач-уже-был-на-гк
                                      история развивается по спирали
                                      Ответить
                                    • > Жизнь без понимающего контекст автодополнения совсем не сахар

                                      В какой-нибудь жавке - да. А в крестах я, честно говоря, и без него неплохо живу. В хачкеле тоже норм без автодополнения.

                                      Время набора кода не идёт ни в какое сравнение со временем, затраченным на исследования, чтение кода и проектирование.
                                      Ответить
                                    • Хз. на работе я написал последний проект на Хексе. У него компилятор может выполнять роль сервера автокомплита, но я запарился настраивать / не до того было. В итоге проект относительно небольшой, использующий две относительно большие сторонние библиотеки: hxswfml (парсер / кодировщик SWF формата) и haxe.format (разные другие бинарные форматы, типа ZIP, MP3, PNG, JPEG и т.п.) Собраный проект весит чуть больше чем 300К (мне тяжело сейчас посчитать сколько там кода, но на вскидку, 50К лок там есть, моих).
                                      Я много лет пользовался Клипсом, и какое-то время МСВС и ФлашДевелопом. Т.е. я себе очень хорошо представляю, что делает автодополнение. И тем не менее, никакого дискомфорта я не испытываю от отсутствия. Гораздо большие неприятности доставляет разработка в среде, где нет способа оперативно проверить правильность только что написаного кода (юнит тесты - это не оперативно). В не меньшей степени влияет, если среда разработки настроена нубом, и в ней либо полный беспорядок, либо не хватает критически важных вещей. Но тут эти недостатки идут рука об руку: я еще в жизни не встретил человека с Клипсом в состоянии в котором в нем было бы удобно работать. Большинство не знают и не умеют, и мучаются. Напротив, я встречал людей которые пользовались одновременно Клипс/ИДЕЯ + Саблайм, Клисп/ИДЕЯ + Н++, даже видел человека 20 лет проработавшего в МСВС, и тем не менее работавшего с текстовыми файлами в какой-то пародии на Нортон Коммандер.
                                      Ответить
                              • Мой скромный опыт написания парсеров и лексеров примерно сводится к следующему наблюдению:
                                90% времени убито на написание ad hoc разновидности LL парсера, который парсит в токены, а потом легким движением руки создается грамматика, и парсер для нужного языка. Последнее происходит практически автоматически и с минимумом ошибок и переделок.

                                Я сейчас для того, чтобы лучше познакомится с тем, как работает Эмаксовский Семантик, пишу мини-мод для CL format мини-языка. Составить грамматику заняло один вечер, а с лексером до сих пор ебусь: уже третий раз переписываю.
                                Ответить
                                • > 90% времени убито на написание ad hoc разновидности LL парсера, который парсит в токены, а потом легким движением руки создается грамматика, и парсер для нужного языка.

                                  Распарси c++11 легким движением руки :)
                                  Ответить
                                  • По отношению к лексеру? - там совсем работы мало, но нужно заранее оговаривать для какого парсера. Есть парсеры, которые принимают больше разновидностей правил, их проще писать (с точки зрения пользователя), но сложнее реализовывать (с точки зрения производителя).
                                    Ответить
                                    • Да кресты вроде бы только полным ad-hoc'ом парсятся... Там даже лексеру нужно знать, что в данном контексте означает имя: a<b<c>> d может оказаться как описанием переменной d с типом a<b<c>> (если a - шаблон) так и ничего не делающим логическим выражением a < b < c >> d (если а - переменная)...

                                      Хуже только в perl'е. Тот вообще невозможно распарсить не исполняя.
                                      Ответить
                                      • P.S. И да, как правильно пишет Роман, в самом упоротом случае, при одном значении какой-нибудь константы это a может быть шаблоном, а при другом - переменной.
                                        Ответить
                                      • Ну так первый эту проблему встретит именно лексер, а не парсер. С точки зрения лексера нужно либо распарсить >> в примере выше, как один токен, либо как два. Если лексер правильно выполнил задачу, то на этапе парсера тут уже никаких недоразумений не возникнет: если там >>, то выбирается один лукахед, если >, >, то другой.
                                        Ответить
                                        • Так там потом и в парсере такая же херня будет творится...
                                          int f(a);
                                          Что это? Переменная f, у которой в конструктор передано значение a или же прототип функции, принимающей тип a и возвращающей int?

                                          Или лексер будет передавать парсеру имена не как просто "имя", а как "имя функции", "имя переменной", "имя шаблона" и т.п., чтобы парсер уже мог работать на мало-мальски обобщенных правилах без ad-hoc?
                                          Ответить
                                          • Лексеры, с которыми мне приходилось работать, как правило, раздают теги тому, что парсят, но на сколько эти теги отражают конкретику языка - зависит от того, что именно хотелось, и какой потом парсер использовать. Большинство лексеров как минимум добавит такие теги как "строка", "число", "комментарий"; возможно "символ", "пунктуация". А возможно будет больше тегов, или тег "символ" разобьют на несколько. Например в языках типа Пролога, "символ" можно сразу разбить на две группы в зависимости от того, заглавная ли первая буква.

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

                                            По поводу конкретного примера: я не знаю, я бы не брался писать ни лексер ни парсер для Ц++ по ряду причин, и не только изза сложности и недостаточного знакомства. Мне, если честно, просто противно на него смотреть :) Хуже только Обж-С выглядит, или какие-нибудь ХМЛ-подобные.
                                            Ответить
                                            • > Хуже только Обж-С выглядит, или какие-нибудь ХМЛ-подобные.
                                              Ну еще баши, батники и прочее CLI говно, когда дело заходит дальше копирования пары файлов. А ну и да, на вершине стоят скрипты звёздочки (см. ниже по треду) и конфиг сендмейла (вообще эзотерический язык).
                                              Ответить
                                              • Баш, кстати, нет проблем парсить. Выглядит херово, но парсится легко.
                                                Ответить
                                                • > Баш, кстати, нет проблем парсить.
                                                  Ну я не про парсинг, я про внешний вид.

                                                  А регулярки в баше вообще мудак писал - часть символов (например плюс и скобки) нужно экранировать, чтобы они обрели специальный смысл. А часть - наоборот (например звездочку).
                                                  Ответить
                                    • Вы явно недооцениваете "мощь" с++. Программа может быть валидной или не валидной в зависимости от значения константы.
                                      Ответить
                                      • Я не говорю, что задача легкая, я говорю что она гетероскедактическая (разброс значений на протяжении всех сделанных измерений неравномерный). Т.е. я говорю, что лексер написать сложнее: это можно интерпретировать, как "парсер написать проще", но это не значит, что задача вцелом простая.
                                        Ответить
                                        • Кмк, в случае крестов как раз парсер существенно сложнее лексера. Во всяком случае, за лексер я бы ещё взялся, а вот за парсер - нет уж, спасибо.
                                          Ответить
                    • А, еще про прелестный дефолтный язык звёздочки забыл:
                      [check_outgoing]
                      exten => s,1,GotoIf($[${need_confirmation} = 0]?allow)
                      exten => n,Answer()
                      exten => n,Playback(need_confirmation)
                      exten => n,Hangup()
                      exten => n(allow),Dial(SIP/${target})
                      Ответить
              • Для тех, кому вдруг захочется обратно: https://github.com/Fanael/vs-emulation-mode
                Ответить
          • > Сами jetBrains
            http://stackoverflow.com/a/13829907
            Ответить
            • Когда они уже кресты доделают :(
              Ответить
            • как я уже и описывал в другом треде, наши фронтендщики легко могут начать js проект и на VS13, ибо там тоже достаточно плагинов, и где-то VS даже лучше - но в основном, дело привычки
              лицензии всё равно и на то, и на другое куплены

              по мере взросления проекта он всё равно переезжает в идею, чтобы собираться, деплоиться с жабьими компонентами в один мышиный клик (хотя никто не заставляет это делать именно из идеи, просто для нее жавоёбы уже мавен настроили, зачем лишнюю работу делать)
              особых претензий к идее от них я не слышу
              Ответить
              • И с наследованием JSO Idea нормально подсвечивает синтаксис?
                Ответить
                • я тебе ничего не могу на это сказать, я не кодю на js
                  установи да посмотри
                  Ответить
              • Но в Идее уебищный текстовый редактор и навигация по среде. А еще в ней уебищная (просто отсутствующая, если честно) работа с файлами. Хуевый поиск по справке и содержанию гуи элементов (даже в Клипсе и то лучше). А еще она периодически крашится с ОТМ (как минимум раз в неделю). А еще в ней нулевая автоматизация рабочего процесса. Настройки, как правило анально огорожены от пользователей, под предлогом заботы о тупых пользователях.
                Вобщем типичный тырпрайз, где можно ходить только прямо и только строем. Но как недавно заметили бретанские ученые, 99% устраивает ходить только прямо и только строем, так что не беспокойтесь, вам тоже понравится.
                Ответить

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