Pull to refresh

Comments 565

сегодня мало кто рискнёт стукнуть кулаком по столу и заявить что всё вот это ваше WinForms\WPF\Qt\VCL не правильно и сейчас я тут достану шашку и покажу как надо
Мы вот кроссплатформенный клон WPF пилим, например. Будет даже на мобилках работать. Ровно так же как и на десктопе причём.
Круто, если даже Хамарин переплюнет — вообще шикарно будет. Успехов Вам.
А зачем WPF? Если понятно что XAML проигрывает (ну или как минимум не лучше) HTML/CSS связки. Cascading в CSS опять же…

Я вот тут недавно сравнивал Sciter и WPF так как они сделаны для одного и того же — declarative desktop UI platforms.
Затем, что он избавляет от необходимости использовать JS. Касательно Sciter — там биндингов и MVVM-плюшек нет.
Да я как бы ни слова про язык code-behind-ui не сказал. Это может быть всё что угодно. В случае Sciter это tiscript, С++, D, Go, Delphi и все языки .NET.

До мощности CSS XAMLу далеко. А markup он должен быть больше semantic. XAML попытался в одном флаконе объединить и то и то, но в результате толком ничего не получилось. ИМХО, ИМХО и еще ра ИМХО.

Кстати если есть желание можем посотрудничать.
Мне почему-то показалось, что для совместной работы sciter и .net (как code-behind) надо сначало много «поработать напильником».
Это да, толковый binding для .NET, еще предстоит написать.
все языки .NET.
Очень не нативно. Хочется задать темплейт и биндиться из него к какой-нибудь ObservableCollection без приседаний и прочих ненужных телодвижений.
Касательно мощности CSS, мы в перспексе в стилях делаем поддержку сложных селекторов, если что.
Я не понимаю смысла фразы «Очень не нативно» в контексте .NET и WPF.

В sciter есть samples/+plus/ модуль. Это duplex data binding в стиле AngularJS и прочих MVC. С templates, repeatable и прочими фишками. Основан на Object.observer(function).

script в иделогии sciter это такой-же способ описания стиля как и CSS. script описывает behavioral style, а CSS rendering style. В это этом случае язык самого приложения выполняет то для чего он предназначен лучше всего — [business] локику приложения.

Я не понимаю смысла фразы «Очень не нативно» в контексте .NET и WPF.

Ну то есть в вашем чудо-фреймворке из шарпа нельзя взять и подключить к гую ViewModel, в которой лежат всякие разные ObservableCollection. Я лучше лишние несколько человеконедель убью на реализацию родного для дотнета фреймворка, чем буду копаться в каше из разметки, скриптов, CSS и клея, которым всё это крепится к бизнес-логике.
Вопрос про то что есть MVC сугубо религиозный. Model в смысле UI это несколько иное чем data layer data model.
Я считаю что loosely coupled UI и business logic есть хорошо. У каждого layer своя собственная data model.
И общение между ними ограничено фактически get/set запросами.

Во всяком случае код приложения (его core logic) не должен быть приколочен гвоздями к UI.

Вот приложение которое уже практически 10 лет живет с htmlayout/sciter UI:
sciter.com/from-skeuomorph-to-flat-ui-evolution-of-one-application
за это время они практически только UI и меняют. CSS и script, ну там animation модно стало по другому делать и пр.

XAML проигрывает (ну или как минимум не лучше) HTML/CSS связки

А как на HTML сделать UserControl?
<user-control>
  ...
</user-control>


А в CSS сказать
user-control {
  behavior: MyUserControl;
  ...
}


И если это С++, то в нем описать

class MyUserControl : public event_handler {... }


В .NET примерно так же (при наличии толкового binding).

В script то же пишется как

class MyUserControl : Behavior {
  function attached() {...}
  function detached() {...}
}


В XAML UserControl это кусок разметки + поведение. Например, контрол по выбору даты из календаря, или по выбору ФИО из справочника клиентов (textbox + две buttons).

При использовании я просто вставляю в разметку <ns:MyUserControl prop1=«val1» prop2=«val2»/>

В HTML, как я понимаю, нужно будет копипастить все внутренности контрола в каждое место, куда я его хочу поставить?
Ну тут кому как удобно. Если instances user-control будет много то

<user-control id="n1" />
...
<user-control id="n2" />



А в Behavior.attached() делаем DOM population:

class MyUserControl : Behavior {
  function attached() {
     this.html = "<input.name/><button.add-name/>";
  }
  function onMouse(evt) {...}
  function onKey(evt) {...}
}
Да, теперь стало понятнее. Новый тэг это просто маркер, куда js вставит кусок разметки при загрузке страницы.
Тут у XAML преимущество — содержимое контрола видно в design-time.
А в Sciter содержимое видно в DOM inspector. Если учесть что перезагрузка UI (если нужно показать изменения) это просто F5
то разницы между design time и run time я не вижу. На поддержку design-time тратится достаточно много ресурсов. В production этот весь код поддержки design-time редактирования не нужен, но он там есть зачем-то.

image
это просто F5

Это смотря в какой IDE писать и под какой веб-сервер.
Например, в Visual Studio с ASP.NET MVC чуть поправил css, и паблиш на тестовый сервер или в локальный IIS занимает около минуты, пока всё скомпилируется. Потом сайт после паблиша просирается полминуты (компиляция IL-кода). Потом я понимаю, что это надо сдвинуть на пару пикселей, и всё снова.
Переезжайте уже на vNext. Там действительно «просто F5».
При чём здесь Visual Studio и ASP.NET MVC?
Я не видел IDE, в которой разрабатывается код под sciter, но указал, что в _некоторых_ IDE посмотреть изменения запуском приложения медленно.
Я как то даже забыл, что бывает какой-то onKey. Мне по нажатию на кнопочку надо вызвать метод, и передать туда текущие значения prop1 и prop2 из тексбоксов. Мне для этого onKey нужен?
Если «метод» это native backend function ( скажем «backendMethod1» ) то например так:

include "decorators.tis";

class MyUserControl : Behavior {
  function attached() {
     this.html = "<input.name/><button.add-name/>";
  }

  @click @on "button.add-name" 
       function() {
          var json = {
             prop1: this.attributes["prop1"],
             prop2: this.attributes["prop2"],
             newName: this.select("input.name").value
          };
          view.backendMethod1( json ); // calling native method registered in view.
       }
}


Здесь используются декораторы.

То же можно описать и в классическом JS/jQuery стиле (в Sciter многое из jQuery имплементирвано нативно)

  function attached() {
     this.html = "<input.name/><button.add-name/>";
     this.on("click","button.add-name", this.onAddNameClick);
  }
  function onAddNameClick() {...}



this.attributes[«prop1»] — жуть. Биндинги там не изобрели?

В общем, до «XAML проигрывает» тут пока далеко.
Для желающих биндинга есть +plus модуль

  <ol each="item in items|filter">
      <li class="{{done:item.done}}"><input|checkbox(item.done)/> {{item.subject}}</li>
  </ol>

Это live data binding в стиле AngularJS.

Но всякий автоматический binding имеет свою цену: далеко не всё укладывается в простой attribute-property binding, хорошо если 90% процентов того что нужно можно забиндить декларативно. Зато имплементауия остальных 10% как раз и занимает 90% отведенного времени. Так на так и приходится.

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

Написать это вот явным образом
prop1: this.attributes["prop1"],

иногда в разы полезнее чем потом рабираться «где оно тормозит?».
Что же вы такого имплементируете в 10% случаев?
Никто не против декстопных приложений. Вот только в наше время кроссплатформенность уже необходимость и реальная возможность, фреймворки стали достаточно просты для этого.
Необходимость — для кого? Для «стартапов», чтоб на лэндинге в три колонки нарисовать ghost buttons со ссылками на версии под Mac / Win / Linux? Или какая-то значительная часть пользователей нуждается одновременно в версиях приложения хотя бы под две из трёх платформ?
Ну, я вот был бы рад, если бы все используемые мной повседневные приложения работали на Windows, iOS и Windows Phone (естественно, с общими данными).
А я намеренно не упомянул мобильные платформы. Ведь даже для веба это разный фронтенд — отличный от десктопного UX.
Ну как минимум виндовс и мак. Ну нельзя не поддерживать мак на клиенте в большинстве случаев. А это уже само по себе сложность. С Xamarin все не так радужно, как вы рассказываете в статье.
Ну и конечно «мобильные платформы» — которые давно уже не только мобильные. Android и прочее есть и на планшетах и лептопах. А сами лептопы обзавелись сенсорными экранами.

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

На сегодняшний день абсолютно все пункты, которые вы указали (даже 1 и 3) — не проблема для веб решений. А проблема кроссплатформенности нативных решений все еще не решена в плане затратности.
А в чём смысл кроссплатформенности вообще? Как минимум GUI под каждую платформу нужно делать отдельно. Ну типа совершенно отдельно. Нельзя просто так взять и декорировать маковое приложение видндовой шкуркой и сказать, что вин-приложение. Логику при желании можно писать на дважды-позитивном языке, который компилируется подо всё. Фреймворкам остаётся позаботиться только о, скажем так, едином API доступа к ОС-специфичным функциям (которые на самом деле и GUI, но пусть он будет отдельно, т.к. это не только код, но и визуальное представление).

И я, кстати, не автор поста.
Смысл кроссплатформенности в том, чтобы избежать расходов.

Вот представьте себе, что вы хотите создать приложение и у вас есть на это бюджет. Вам нужно, чтобы работало на маке, винде и андроид лептопах\планшетах тоже очень желательно. У вас есть выбор.

1) Заказать 3 приложения на 3 платформы (возможно в трех разных местах).
2) Найти команду, которая сможет сделать кроссплатформенное решение с разными «шкурками» на «позитивном» языке.
3) Заказать одно приложение на html5 и вотнуть его в видноус маркетплейс и в гибрид для мака и андроида. И может и в виде сайта до кучи.
Вариант с мобильными девайсами мы не рассматриваем. Приложение для десктопа. Но с мобильным будет тоже самое на самом деле.

Лично я даже не задумаюсь в такой ситуации над выбором. Потому, что пока нет надежного и дешевого кроссплатформенного решения, вариант 2 содержит серьезные архитектурные риски. На самом деле такое дешевое кроссплатформенное решение и есть html5. Какой нибудь кофескрипт для него заюзать и вперед.
Именно на нем сегодня заострили внимание корпорации вроде майкрософта, гугла и т.п. А вслед за ними и мы.

Автор статьи смешал вместе два вопроса: веб\дектоп и браузер\натив. Первый вопрос на практике вообще уже не вопрос. Потому, что дектоп приложения вообще без сервера стремительно вымирают. А веб приложения рвуться в оффлайн. А по второй проблеме ситуация вот именно такая как я описал. Для того, чтобы выбрать нативную разрабоку для приложения сегодня нужно иметь вескую причину. И таких причин с каждым днем все меньше.
Вот представьте себе, что вы хотите создать приложение и у вас есть на это бюджет. Вам нужно, чтобы работало на маке, винде и андроид лептопах\планшетах тоже очень желательно.
Это аргументация типа:
— Зачем делать кроссплатформенное приложение?
— Вот представьте, вы хотите сделать кроссплатформенное приложение…

браузер\натив
Интересно. По второму кругу пошло, когда каждое приложение выглядит как вздумается. Кажется, я такое уже лет 15 назад видел.

веб\дектоп
Скажите, приложения для каких задач вы выберете в веб-версии? Просто, я смотрю на панель задач у себя, там несколько десятков иконок и все нужны на десктопе, standalone, такскать.
Это аргументация типа:...
Эмм… а при чем тут это? Вам нужна аргументация зачем поддерживать несколько платформ? Ну это вопрос целевой аудитории, рынка, который вы хотите охватить продуктом. Если ваши пользователи гарантированно используют виндовс — то понятно. Если считать, что скажем пользователей мака 10-20% (к примеру), то кажется да — а почему бы просто про них не забыть. Но когда посчитаешь потенциальный размер маркетов для приложений — расходы на кроссплатформенность начинают выглядеть оправданными.

Интересно. По второму кругу пошло, когда каждое приложение выглядит как вздумается. Кажется, я такое уже лет 15 назад видел.
Да — все циклично в софтверной индустрии. Еще есть вопрос выноса бизнес логики на сторону клиента или сервера. Тоже тренды меняются периодически.

Скажите, приложения для каких задач вы выберете в веб-версии?
Честно говоря при прочих равных в последнее время вообще предпочитаю пользоваться веб версией чего угодно. На нижней панели у меня прямо сейчас браузер, evernote (потому, что десктоп версия поживей), менеджер паролей (веб версии этого нет), calibre (веб версии нет), и скайп (потому, что веб версия глючит).
Все остальное: офис, почта, приложения для работы с проектами, ide — все потихоньку переместилось в веб. Со сменой виндовса старые приложения просто не хотелось ставить опять. Какой то вот особой тяги к вебу у меня нет. Десктоп в принципе не хуже. Но зачем ставить, если можно не ставить?
А не дешевле ли получится написать три приложения вместо одного?

Приобрёл я как-то опыт подержки софтины, которая писалась виндовым программером под макось на делфи. Кросплатформенно, да ) но не работает. Там даже на примитивах уже косяки повылезали: товарищ изначально не знал (как и я, впрочем), что например, в BSD системах, представителем которых является макось, нет именованых объектов синхронизации. А уж когда баги править стали, то вообще прозрели: такой цацки как SEH в BSD тоже нет. Что, WinSock, когда-то слизанный с BSD, на родной BSD'шный ныне похож очень отдалённо. Что функции сишного рантайма работают немного по-другому. Что в максоси принято использовать ARC вместо GC или привычного ручного упраления временем жизни.
И так во всём!

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

Я когда-то питал иллюзии на тему кросплатформенности, но сейчас я думаю, что дешевле писать и поддерживать несколько приложений. Что только куски приложений, типа алгоритмов и ресурсников, могу быть одними, а во всём остальном это будут разные приложения.
Вам видней — как то не довелось честно говоря сталкиваться с кроссплатформенными решениями такого рода. Знаю только по наслышке. В частности про специфику Хамарина, Моно и прочих. Ругали их сильно. Риски тут очевидны конечно. Может и дешевле написать 3.

Вопрос в том не выбрать ли браузерное решение. Которое точно работает в одной среде. Если конечно нет каких то явных стопперов для этого.
Вопрос только в платформе. Тот же Mono вполне себе поддерживает большинство фишек дотнета, и ThreadPool там тоже есть. Как-то все-таки реализовали ведь? Нет такой проблемы, которую нельзя решить еще одним уровнем абстракции, кроме слишком большого числа этих уровней. Пожертвовать частью производительности и написать кроссплатформенное приложение (а потом с профайлером на сэкономленые средства вернуть её на место) — стоит того.
> Как минимум GUI под каждую платформу нужно делать отдельно. Ну типа совершенно отдельно.

Для сайта — нет.
Если приложение хорошее, то им все хотят пользоваться, а все сидят под разными операционными системами. Что тут говорить, если даже Microsoft выпустили свой редактор с поддержкой не только винды, но и OS X с Linux.
Я, может, неверно вас понял. Я подумал, что вы считаете, что предпочтение отдаётся вебу из-за «кроссплатформенности». Во-первых, мне вот сейчас вообще ничего такого на ум не приходит, что можно из десктопа унести в веб, кроме текстового редактора :) Ну и в редких случая какие-нибудь тяжёлые вычисления в облако. Во-вторых… э, а этим майкрософтовским редактором так уж все хотят пользоваться?
Да, я про то, что десктопные приложения должны быть кроссплатформенными, так как многие фреймворки это позволяют. Про редактор от MS я говорил, что даже сами создатели Windows осознают важность кроссплатформенности.
«Многие фреймворки» это кто? Я вспоминаю только Qt. Но он потормознутее веб-интерфейса будет (особенно 5-ка).
А вы возьмите не Core i5/i7, а что-нибудь послабее, например, тонкие клиенты, которые многие используют. Там приложение на QML обновляло интерфейс с частотой раз в несколько секунд при довольно простой функциональности. Притом почти такая же логика и интерфейс на HTML+CSS+JS в браузере работают нормально.
QML это не нативный Qt, а тот же скрипт.
Я б сказал, это нечто посередине.
Рисую таблички с сотнями полей на Raspberry Pi, в каком случае QML зависает? Используете Loader? (он чудовищно тормознутый, как оказалось, да)
<sarcasm>

Ну а вы думали, что компилируемые языки шустрей? Конечно нет, за скриптами будущее! И графика на процессоре быстрей летает.
</sarcasm>
Firemonkey для Delphi/C++ тоже умеет кроссплатформенность.
.Net тоже кстати хочет быть на разных осях, пилят сейчас OSX в нем.
пилят сейчас OSX в нем.

И не только OS X
десктопные приложения должны быть кроссплатформенными, так как многие фреймворки это позволяют
Что-то здесь не так. «Этот шуруп должен забиваться, так как у меня в руках молоток».
Отличный пример — документы гугл. Фактически офисные excel, word вынесены в веб, добавили грамотный многопользовательский режим — и этим можно пользоваться, и как ни странно иногда даже удобнее, чем десктопными аналогами (там, где совместная работа над документом важнее функционала по редактированию). Но это все же редкий пример и с позицией автора я согласен по всем пунктам.
Терпеть не могу гуг докс, извращение для фриков, рядом с MSO он вообще не валялся. Ну разве что коллективная работа…
Так коллективная работа и в MSO вроде есть теперь, даже на десктопе.
Самое весёлое, что старый формат гуглодокса, хоть он и «кошерный» (открытый, кроссплатформенный, не бинарный и пр.) не конвертируется в новый формат гуглодокса без полного развала форматирования. Как они так умудрились сделать с собственным форматом данных и не смогли его сконвертировать я не представляю.

Просто для примера: в том же OpenOffice старые закрытые форматы MSO (doc и прочие не xml-based) разбираются на порядки лучше притом что в OpenOffice реверсинженерили чужой бинарный формат, который из себя фактически представляет аналог ФС и внутри которого по ссылкам может быть что угодно и шрифт и вложенный файл и ссылка на другой документ и даже произвольные данные, при этом спецификации им не были доступны вообще.
Сохраните форматированный документ (нагляднее всего с таблицей) из ОпенОфиса в любом формате Ворда — хоть с xml-разметкой. Потом откройте.
Кстати, фоновые и встроенные изображения Ворд по жизни (в 6.0а такого не помню, как и в 95-й версии) лепил, куда мог (особенно при перетаскивании оных с одной страницы на другую), а с 2013-й версии стал вообще неудобоварим.

Про виртуальную клавиатуру, обычно закрывающую место редактирования, говорить будем?
А я, спасибо курсовым в институте, вообще терпеть не могу офисные утилиты — больше ничего мне столько нервов не тратило. Обиднее всего, что до сих пор не конвертера LaTeX → whatever-office-format.
Распространненое заблуждение, предел возможностей pandoc — конвертировать самые базовые мелочи, как параграфы, и «хэдинги» разного уровня. Я могу сделать даже более сильное заявление: он никогда не станет нормальным конвертером — как бы абсурдно не звучало, но это цель мэйнтейнера этого проекта.

Я спорил в разных ветках гитхаба с главным разработчиком, и это окончилось тем, что в одном из комментариев тот заявил на один из багов при конвертации LaTeX, что это out of scope. Я полу-саркастично спросил, что может быть стоит добавить в ReadMe, что почти вся работа настоящего конвертера «out of scope» (не прямым текстом, просто это был уже черт знает какой по счету спор) — я никак не ожидал, что он примет предложение за чистую монету, и добавит в ReadMe.

Как я понял из его аргументации, «out of scope» просто потому, что ему лень этим заниматься.
Аплодирую стоя. Я по ошибке своей, прежде чем писать один документ в универе, начал его делать на LaTeX'е. Какого было мое разочарование когда на мой присланный распрекраснейше отформатированный pdf, мне сказали что ничего кроме word'а они не принимают. Это было настолько фрустируеще, что я даже не могу подобрать слов это описать.
Этим невозможно пользоваться, потому что оно люто тормозит, а в случае Firefox ещё и с некоторой вероятностью крашит браузер.
Конечно, при наличии 8 (а лучше 16) Гб памяти, Core i7 и видеокарты GTX960 всё будет более-менее прилично работать.
А вот теперь попробуйте на неттопе под эрзац-процессором Atom, который усиленно пытается выдать себя за полноценный процессор, и с 2Гб памяти на борту. Этот google docs даже просто прогружаться будет секунд 10, а любая операция станет по-настоящему мучительной. Тогда как десктопный офис работает без малейших сложностей.
И это я ещё не упоминаю про качество Интернета. Хорошо, если вы на оптоволокне сидите. А ну как у вас 3G от кого-нибудь из большой тройки? Которые на словах утраивают скорости чуть не каждый месяц, а на деле по скорости и особенно стабильности до сих пор не достигли даже уровня Dial-up'а начала 2000-х.
UFO just landed and posted this here
Дак вот я и говорю, текстовые редакторы…
А что за редактор у них для Linux?
Visual Studio Code. Неплохая штука, но гвоздями приколочена к разработке для ASP.NET vNext и под node.js.
Доля Mac OS на мировом рынке на деле небольшая, однако все журналисты/блогеры/другие хипстеры им пользуются. Как-то слышал как стартап отказывался выпускать виндовый клиент пока не доделают мак ибо на презентацию придут журналисты с маками и ничего не смогут установить, если будет только Windows.
Ничего не имею против Мака, Линуха или Винды, но в упомянутом вами случае тема компетентности приглашенных журналистов/блогеров/хипстеров крайне сомнительна, если они не могут разобраться в чем-то кроме своего маленького мирка.
Андроидов в мире намного больше, чем iOS. Однако денег обычно с iOS разработчики получают больше. Так и на десктопе. Поэтому кросс-платформенные решения набирают популярность. На десктоп, к сожалению, нет таких хороших инструментов пока (кроме вышеупомянутых JS-based, к примеру Gitter который, кстати, глючит как будто биткоины майнит в фоне). Вон, гитхаб свой клиент написали сразу на Windows (WPF) и на Mac OS (Cocoa).
Вы точно ответили мне? )) При чем тут Андроид и прочие? Я как раз с вами согласен. Всего лишь указываю на то, что какой-то там стартап очкует выпускать клиент
пока не доделают мак ибо на презентацию придут журналисты с маками и ничего не смогут установить

По-моему это не нормально, т.к.
в упомянутом вами случае тема компетентности приглашенных журналистов/блогеров/хипстеров крайне сомнительна
Тут мне кажется проблема даже не в компетентности журналистов/блогеров/хипстеров — продемонстрировать им свой продукт можно будет без особых проблем, хотя бы банально тем чтобы притащить на презентацию свои ПК с установленным продуктом (это даже нормально, игры например тоже вначале демонстрируют на железе компании, а не сразу ставят на железо журналистов). И напишут они об этом легко.

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

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

Собственно здесь также стоит фактор того, что «не все доли рынка созданы равными» — у кого-то может быть больше условных процентов, но при этом та часть рынка с меньшими процентами легко может быть более платежеспособной, более склонной покупать товары того или иного вида или даже предпочитать что-то больше, чем другое. Возвращаясь к примеру с играми, иной раз одна игра может продать на какой-то платформе в разы больше, при условной равности долей на рынке этих платформ, просто потому, что популярность продукта на соответствующей платформе больше. Точно также и с Windows, при всем уважении к Microsoft и их рыночному успеху, какая часть из их доли рынка это вообще конкретные платежеспособные пользователи, а не условные установки, работающие черте где сугубо в утилитарных целях или вообще просто ОС, поставляемая в комплекте с дешевым ноутбуком из ближайшего магазина? Таких ведь явно не мало. Поэтому опираться на цифры доли рынка было бы глупо. Собственно Nagg все уже сказал на примере Android и iOS.
Ваш второй и третий абзац как раз подходит под некомпетентность сферического корреспондента. Это равнозначно, если бы я был ненавистником консолей, потому что они тормозят развитие видеоигр на ПК, или наоборот. Но у консолей уже третий десяток лет своя ниша, у ПК тоже своя. Глупо спорить, что игровые приставки могут соревноваться с производительностью персонального компьютера. Однако же PS4, etc. вполне даже процветают.
Некомпетентности здесь нет, это обычная нормальная для людей субъективность — лучше когда человек хотя бы признает её сам и не будет пытаться лезть не в свой огород, чем когда эта субъективность все равно на месте (люди не роботы, от этого никуда не деться), но её пытаются скрыть и в итоге продукт освещает человек, которым о нем мало чего знает т.к. сам по жизни им не пользуется, он ему не интересен, у него другие взгляды и т.д., в итоге читаешь такие материалы и покрываешься фейспалмами от того, что автор не понимает о чем пишет. Второй случай с псевдообъективностью как раз таки куда более распространен нынче.
UFO just landed and posted this here
:-) Расслабьтесь, тот коммент я написал с мака.
Нужен — Web разработчикам
Нужен — Embedded разработчикам
Нужен — системным инженерам
Нужен — сетевым инженерам.

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

Кошмар. И как это я вообще умудряюсь на винде под android писать? Кощунствую прямо :)
Каждый сам выбирает как ему страдать. Завтра вас попросят писать и для iOS, и вы перейдете на макось.
Захотите сбилдить нативную либу — задумаетесь о переходе на линукс.

Я тоже длительное время работал на винде (лет 5), и думал что все в порядке. Но коллеги пересадили на Xubuntu, и я понял, что все это время страдал. Страдал от отсутствия нормальной командной строки, от невозможности кросс-компиляции либ, от невозвоможности нормально пользоваться тем же maven, от проблем типа «работает на рабочем компе, не работает на целевой платформе».

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

И на все у меня будет только один ответ — попробуйте, и поймете, насколько удобней работать в той ОС, которая помогает вам делать работу, а не ставит препятствия при каждой более-менее нестандартной задаче.

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

Стоит кому-то успешно перейти с винды на линукс, как он сразу начинает рассказывать, как он 20 лет страдал без вима и с нормальными дровами на видяху.
До сих пор страдаете в нотепаде? Тогда дядюшка Торвальдс идет к вам!

Вы путаете «деформацию рук» и «выпрямление рук».

А что касается дров на видяху — давно уже никаких проблем.

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

У вас всегда есть выбор, как потратить ваше время — на разборки с операционкой или на продуктивное выполнение работы

Стоп. Это я только что про linux прочитал? А что за систему я тогда пытался сделать своей основной раза три в течение 2-х недель, но потом каждый раз понимал, что вместо работы танцую с бубном?

А что касается дров на видяху — давно уже никаких проблем

Привет из прошлого. Lenovo g500, дискретка от Radeon на 15.04 все так же толком не заводилась. 15.10 не пробовал еще.

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

Конечно, найду :) Поэтому я и сижу на винде. Ибо линуксозаменителей для нужных мне вещей в свое время мне найти не удалось.
UFO just landed and posted this here
Метафора про хрущёвку и дом — это лукавство. Если линукс по-вашему — это коттедж, то у него разве что фундамент норм, но стена легко может рухнуть, когда Вы решите забить в неё гвоздь для картины.
UFO just landed and posted this here
Серверные админы? Ну так и сказали бы сразу, что Вы в казарме живёте ) Или может в пионерлагере вожатый…
Вроде речь шла о десктопах, нет?
Хм. А в «хрущевке» можно забивать любые гвозди и чем угодно.
Вот вот. К сожалению, большая часть софта, в разработку которого не вкладываются крупные компании, не может сравниться с коммерческими аналогами. А это практически весь десктопный софт.
Одновременно с этим, софт серверный и прочие вещи, в которые контрибьютят крупные компании, работает отлично и аналогов может не иметь.
В итоге линукс на десктопе — кактус. В умелых руках практически без иголок, но все же.
И самый большой шанс на качественное улучшение — это то, что Vavle притянет на Linux достаточное количество пользователей и, следом, разработчиков.
Нет. Наш выбор комфортабельный пентхаус, где есть лифт и дворник, убирающий снег сам, без нашего вмешательства. Хотя да, такой дорогой пентхаус не сравнится с вашим бесплатным домиком в деревне по цене.
UFO just landed and posted this here
Стереотипы-стереотипчики.mp3
UFO just landed and posted this here
Каждому свое, кому то и семерка мерседес.

Конечно. Только тут у каждого свое видение, какая ОС — мерседес, а какая — «жигули».
Стоп. Это я только что про linux прочитал? А что за систему я тогда пытался сделать своей основной раза три в течение 2-х недель, но потом каждый раз понимал, что вместо работы танцую с бубном?
Знакомый опыт. У меня была похожая ситуация, только забавней: я две недели сидел на GNU/Linux, матерно ругался, говорил «Никогда больше не запущу», и уходил на Win7. Затем итерация повторялась, но уже с виндой — я вспоминал удобный файловый менеджер, адекватный шелл (я так и не смог найти под винду замены), матерился, и уходил обратно.

Это повторялось, наверное, несколько месяцев, пока Win7 у меня не сломалась. Более того, когда я пытался ее переустановить, установщик падал с BDOS. GNU/Linux тем временем работал, хотя и со странными глюками. Месяца полтора спустя у меня… навернулся винчестер! Мне до сих пор невдомек, как так вышло, что винда и установщик столь тонко это прочувствовали.

Как бы то ни было, при малом кол-ве знаний, GNU/Linux действительно может раздражать. Зато если хорошо в ней шарить, можно для разработки найти множество плюсов — это и /proc/, и bash, и тайловый оконный менеджер, и намного лучше продуманное АПИ, и установка подручных утилит в одну команду, многое другое… Честно, у меня на работе сейчас очень аккуратно настроенное окружение, и когда я кому-нибудь под виндой пытаюсь помогать, это довольно скоро вызывает раздражение.

Кстати заблуждение, что GNU/Linux чисто терминальный — как раз таки работа с мышью там намного лучше продумана. Это и первичный буфер обмена, и возможность ускорить указатель мыши до каких угодно скоростей при помощи Coordinate Transformation Matrix, и возможность выделять текст на MsgBox'ах — не помню каких, кажется KDE'шных…
удобный файловый менеджер, адекватный шелл

Total Commander, PowerShell + ConEmu
Это же давно было (с точки зрения моего опыта это было чуть ли не в детстве, хотя физически я тогда уже с армии вернулся). Сейчас я вижу у коллег на работе TotalCommander, и понимаю, что он неплох. Но на тот момент я его пользовал лишь пару раз, и меня совершенно отталкивал этот полу-текстовый интерфейс, это была как раз пора увлечения всякими спецэффектами вроде трясущихся, или сгорающих окон и прочего. Я использовал Dolphin, и пытался как-то найти аналог под винду — считайте TotalCommander, только с рюшечками; сие кончилось фэйлом.

Про ConEmu я тогда просто не знал, найти так же не смог (я тогда плохо знал английский, и гуглил только в русскоязычном интернете, что сильно ограничивало круг поиска).
«Как бы то ни было, при малом кол-ве знаний, Windows действительно может раздражать.»
Если это была подколка, то мимо. Во время описанных метаний, я приблизительно одинаково знал обе системы. Просто под GNU/Linux часть каких-то пакетов, как тот же Dolphin, была предустановлена. Кроме того, гуглить по русско-язычному инету по «Linux спецэффекты» было проще, чем «замена оболочки терминала windows» (по моим воспоминаниям даже хуже, мне тогда довольно сложно было на русском подобрать верный запрос).
ну мимо так мимо. По мне так неумение гуглить оправдание так себе.
Так можно сказать про что угодно. И это было давно.
FAR с плагинами опять же.
А что касается дров на видяху — давно уже никаких проблем.
Ух ты, гибридная графика наконец заработала как положено? Сама нативно переключается? И не надо больше перебирать версии драйверов под Bamblebee под конкретную видеокарту, а сразу можно ставить «current» версию и не париться?

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

И да, это я про current.
Странно. У меня это наблюдается и на 3.х. Надо кстати до 4.х обновиться, может изменилось чего.

По дефолту да, используется интегрированная но дискретная запускается параллельно и активно греется/кушает батарейку, хотя и не используется. Приходится ставить Bamblebee, чтобы хотя бы автоматически выключать дискретную. При этом ещё прошлой зимой пришлось скатиться с current на фиксированную версию (331, вроде), ибо на current всё крашилось при попытке запуститься на дискретной графике.

Об автоматическом переключении можно только мечтать.
Может зависит от чипа? У меня 740М — все отлично.
У меня 750М. С драйверами — может быть. Просто настроил уже один раз и не хочется снова в это лезть и снова вставать на current.
А проблемы с тем что дискретная графика не отключается, хотя и не используется, были и на других чипах.
UFO just landed and posted this here
А что касается дров на видяху — давно уже никаких проблем.

Я слышу это последние лет 10, и каждый раз удивляюсь настойчивости)
Клёво. А все остальные 99% пользователей, которые не разработчики?
Тоньше надо быть, товарищ, тоньше.
Я нуждаюсь.
Чтобы можно было перейти на другую платформу безболезненно.
Чтобы можно было свободно переключаться между платформами при разработке того же кроссплатформенного софта.
Вот например разработчиков evernote ну никак не убедить в необходимости linux-клиента, уже который год люди в соответствующей теме пытаются:)
Чтобы можно было свободно переключаться между платформами при разработке того же кроссплатформенного софта.
Кроссплатформенный софт нужен, чтобы разрабатывать кроссплатформенный софт? :)

Вот ведь. А evernote живёт и здравствует. Кстати, есть веб-версия. Кросс, мать её, платформенная :) Чойта пользователи хотят десктопную-то?
Мне бы хотелось, чтобы мой выбор платформы не зависил от доступного софта. Мечты, мечты
И приходится в очередной раз выбирать Windows, потому что нужного мне софта под другими OS нет.
Ну как «необходимость»? Я пытаюсь представить приложения, которые есть у меня на десктопе, и которым была бы полезна мобильная версия. Могу только почтовый клиент, мессенджер и броузер назвать. И из бизнес-приложений CRM, впрочем, это и так веб. Всё остальное, будь-то инструменты разработчика, игрушки, офисные приложения, всякие домашние учётные штуки, я этим никогда не буду пользоваться на смартфоне/планшете, просто потому что там управление для этого не предназначено.
Можно, конечно, понятие кроссплатформенности трактовать по-старинке, как кроссплатформенность между Windows, Linux и МакОС, но как показывает многолетняя практика, это уж точно «приятная фича» у некоторого софта, но никак не необходимость.
Клиент к системе учета финансов и платежей, клиент к системе управления проектами, клиент к системе видеонаблюдения (веб-версия убога до неприличия) и еще несколько приложений, которых очень не хватает в дороге или на встрече. И из-за которых приходися кроме планшета с собой в рюкзаке таскать ноут. Планшет под винду нужной мне производительности с учетом кризиса и курса валют дороговат.
Сразу вспомнилось:
Не сидят «В Контактах», в онлайнах,
Они вкалывают на комбайнах.
Ну если без шуток это ещё один огромнейший пласт софта, который должен работать без интернета. Ну т.е. софт для управления оборудованием и прочее прочее
.
Можете ли вы рассчитывать на такую же гарантию у веб-сайта?

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

А если серьезно, вы забыли еще один крайне важный пункт, благодаря которому миллионы людей и организаций выбирают десктопные решения: их можно скачать с торрентов.
А то мобильные приложения нельзя будто. Это не плюс десктопности\мобильности приложения.
В статье сравниваются web/десктоп приложения.
Лично я поддерживаю автора, молодец. Кстати думаю что половина здесь присутствующих сидит в том самом десктопном приложении под общим именем «браузер» под управлением той самой винды.
В соседнем бложике разработчики десктопного приложения «вивальди» сидят, и регулярно отчитываются об успехах.
Я тоже поддержу автора, и еще попрошу его, как и любого другого разработчика, писать десктопный софт с возможностью запуска с теми самыми ограниченными правами. Прям вот вообще идеально tangro попал с этим постом.
Горячо поддерживаю. 2015-й год на дворе, а многие разработчики до сих пор пишут, как под Windows 98.
Хм, а подскажите с какими именно приложениями у вас проблемы ибо у меня если что-то просит админ прав то им это действительно надо (speedfan, process-hacker или что-то подобное). Да и даже старые приложения которым, например, нужно портабельно складывать данные рядом с бинарником или в другое место, куда для записи прав не хватает, спокойно работают без админ прав или ручного прописывания разрешений ибо ОС замечает кривое поведение у старого софта и сама складывает, а в последствии и читает, данные в папку к пользователю %LOCALAPPDATA%\VirtualStore\
Многие клиент-банки, системы сдачи и проверки финансовых отчетов и тому подобный софт.
Их пишет отдельная когорта специальных программистов, мне всего было интересно откуда их берут :)
Неправильная постановка вопрос — правильней спрашивать куда их не берут. Как правило там низкая зарплата и/или плохие условия работы.

В итоге их пишут те, кого не берут в более качественные проекты.

Иными словами — вопрос к менеджерам которые экономят на их разработке.
Эх, такая хорошая цитата на Баше была лет 7 назад — не могу найти сейчас.
В-кратце, суть в том, что специально отобранных детей с задержками развития с младых лет кормят наркотиками, держат в пещере и подвергают изощренным методикам переноса рук на задницу.
И только долгих лет такой подготовки человек считается подходящим для разработки клиент-банков.
А по делу, часто это просто легаси код, который продолжают поддерживать в изначальном виде, что бы была совместимость с ранее выпущенным.
Да что там оправдываться, собственно сам Chrome и есть десктопное приложение :)
Вот только оно ой как кроссплатформенное.
Зачем веб, когда есть Фидонет? :)
Больше скажу: не только десктоп-фреймворки устаканились, но и мнение о десктоп-разработке автора совпадает с моим на 100%.
Смотря что иметь ввиду под термином «устаканились». Если на том же .net возникнет потребность написать кросс-платформенное приложение, то в плане UI пока тот ещё зоопарк.
Всё равно они гораздо более устаканившиеся, на C++ например (с wxWidgets или с Qt) код кроссплатформенный вполне из коробки и никакого разделения не требуется… ну почти, но это уже не с UI связано, а, скорее, с особенностями ОС в глубине :)
Устаканилось тут еще в том плане, что софт разработанный на инстурментах 5-6 летней давности не работает хуже соврменного. Все технологии уже отработаны годами. А тот же Nodejs например до сих пор не может выйти из нулевой ветки, хотя используют его многие.
Nodejs например до сих пор не может выйти из нулевой ветки
Вообще-то Node.js v4.0.0 вышел ещё 8 сентября, обновляйтеся.
А зачем писать на .net кроссплатформенное приложение?
— уже есть знания net, не надо тратить время на изучение другого фреймворка
— нравится net и C# хочется на нем и дальше писать
Все это прекрасно, но почти у всех кроссплатформенных технологий есть предел, после которого начинаются костыли.
Я много лет программировал на Delphi, и это действительно быстрый и удобный инструмент для своих задач.
Когда встала необходимость писать кроссплатформенные десктопные приложения, долго экспериментировали с Lazarus и FreePascal, обходя многочисленные баги и грабли. Потом махнул рукой и засел за С++ и Qt. И знаете, довольно быстро полюбил и этот инструмент. Теперь уже Delphi казался игрушечным, как из детства.
Потом пришел черед Мобайла, тут вроде Qt умел собираться под Андроид, но в реальной практике оказалось что это самые настоящие костыли по сравнению с нативной разработкой на Java+ADT. И сел и разобрался, и сделал пару проектов под Андроид. Мастером конечно не стал, но свободно ориентируюсь теперь и в этом.
А сейчас вот нужно сделать веб-решение. Теперь уже сразу засел за PHP, и с накопленным бэкграундом это не составило вообще никаких проблем. PHP конечно одиозный инструмент, но под веб заточен идеально.
Глянув назад, можно наверное было ВСЁ это сделать на плюсах и даже на Delphi. Но какой ценой? И с каким результатом?
Мое мнение — каждой задаче свой инструмент. Проще свои мозги прокачать, чем заточить технологию под непредусмотренную для нее задачу. И опыта больше.
Вы пишете о реальном положении дел, а я писал о желаемом.

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

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

Проще свои мозги прокачать, чем заточить технологию под непредусмотренную для нее задачу.


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

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

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

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

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

Кроссплатформенность — это точно такая же стандартная задача которую можно решить один раз и вынести в некий аналог «библиотеки».

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

Глянув назад, можно наверное было ВСЁ это сделать на плюсах и даже на Delphi.


Плюсы и php это все-таки технологии разного уровня. Как и плюсы с ассемблером.

А вот разница между .net, java, php и javascript по большому счету историческая и косметическая.

Чем принципиально будет отличаться приложение на Java от приложения на .net? Чем будет принципиально отличаться сайт на php от сайта на C#?

Что характерно даже развитие этих языков идет в сторону сближения — в php добавляют более строгую типизацию, в JavaScript классы и типизацию, в C# как имитацию слабой типизации к которой привыкли пхп-ешники.

Я понимаю разницу между программирование на C например и на .Net — но вот принципиальная необходимость изучать Php ли Java для того что можно было бы сделать на C# мне непонятна.

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

Но я бы разделял даже не языки, а скорее общую идеологию что-ли.

Скажем наличие автоматического управления памятью в виде сборщика мусора как мне кажется гораздо более фундаментальное отличие C# (Java) от С чем какие-то конкретные особенности синтаксиса языка. Сюда же можно отнести и слабую типизацию. Хотя сама по себе идея «много-много синтаксического сахара который избавляет от необходимости думать о более низкоуровневых деталях» тоже во многом идеологическая вещь — но не уверен, так как не пишу на C/C++.
А разве десктопные приложения утратили свою актуальность? Собственно, как вы правильно указали, мы ими пользуемся постоянно. Помимо браузеров еще большинство инструментов разработки все таки остаются десктопными и/или консольными. На мой взгляд все естественно. На этапе становления технологии многие процессы еще не отработаны и по ним ведется активная дискуссия, а рабочей технологией надо просто пользоваться: создавать, приностить пользу.
Если инструмент позволяет быстро и эффективно решить поставленную задачу, то он не считается устаревшим.
А как на счёт обновлений? Тут как говорится пользователь может и забыть поставить или вообще проигнорировать обновление.
И это заставляет разработчика ответственней относиться к каждому из обновлений, тщательно его тестируя, а не следовать принципу «херак-херак и в продакшен»
Ага, пользователь его просто игноритует
Ну например обновление связанное с безопасностью?
А например обновление, свзяанное с тем что дизайнер Вася уволился и пришел дизайнер Петя и сказал «да увас тут полный отстой с UX, я сейчас покажу как надо», или директор по маркетингу решил, что пользователи заскучают, если их не радовать новыми картинками каждый месяц — и на следующий день пользователи в бессильной ярости трясут кулаками, а сделать ничего не могут — откатиться то нельзя, это не десктоп.
Откатиться и на десктопе часто нельзя :-(

Скайп меня за⌀бал своими неотвратимыми еженедельными апдейтами во имя новых нескучных смайлов.
Использую сейчас Skype 6.16. До этого очень долго сидел на ещё более старых, маленьких и компактных версиях, но там было пару глюков — сообщения могли очень долго не доходить даже когда оба пользователя в сети и ещё с видеозвонками кое какие проблемы были, а в 6.x этих проблем уже нет совсем. 7.x не вижу смысла ставить вообще ибо она сразу же после запуска отжирает почти в три раза больше памяти чем 6 версия и подвисает периодически, притом, что работающая рядом Miranda с кучей протоколов жрёт в два раза меньше чем Skype 6 :)

Если требуется могу выложить куда нибудь выложить готовый набор для обновления (отката) на версию 6.16.
Я был бы безгранично признателен.
Надеюсь, этот набор ещё и препятствует автообновлению 6.16 до более новых версий.
У меня там msi (т.н. корпоративная версия) она вообще сама обновляться не умеет. Вот, держите, пожалуйста, комплект. Ставить из командной строки с правами администратора запуском update.cmd — скрипт сам удалит предыдущую версию и поставит 6.16, профиль при этом останется в нетронутом виде. Правда прошу обратить внимание, что по умолчанию этот набор скриптов ещё и стартовую страницу «убивает», если это не нужно то легко можно удалить или закоментировать соответствующую строку в скрипте install.cmd. Вообще там в скриптах и удаление Skype апдейтера осталось, но оно для корпоративной версии в холостую отрабатывает.

В целом же там никакой «магии» нет — msi-шка официальная и подписанная, а из содержимого cmd файлов прекрасно видно, что в них происходит. Также после отката на 6.16 и первого запуска Skype рекомендую из папки «Оптимизация баз sqlite приложений» speedyfox запустить (ну или его с оффсайта скачать можно) и профиль им оптимизировать (он просто команду vaccuum к базе применяет) из-за чего Skype шустрее запускаться начнёт если профиль уже очень старый, повидал много версий и большой (у меня например ему уже точно очень много лет и он весит десятки МБ).
Благодарю! Ваша версия скайпа действительно проработала полтора года без обновлений.
Как быть сейчас, когда обновиться требует уже и она?
У себя я просто заменил exe шку на деобфусцированную с иправленным номером версии. Механизму я доверяю и как он работает понятно, а вот новые версии слишком жирные и глючные, да и для меня неприемлемо чтобы что либо работало прямо в скайпе используя модули ишака, пусть лучше будет открыто по ссылке и просмотрено в нормальном браузере где всё настроено и работает как надо.
P.S. выложил проапдейченный под текущие реалии полный комплект на ргхост, но он что то там делает уже очень долго в процессе загрузки и когда файл окончательно загрузится, если вообще загрузится, не знаю.
P.P.S. я вообще никогда на ргхост такие большие файлы ещё не лил. Возможно стоит залить в другое место?
К сожалению, файл так и не получается скачать :(
Пожалуйста, попробуйте убрать из имени файла точки (ргхост к ним нездорово относится) или залить в другое место, например на depfile.com
Залил ещё раз, видимо у криворучек на ргхосте + не экранируется. Сейчас, вроде всё нормально отработало, файл правда два раза залился и с разными сроками, но плевать, главное качается :)
PS: реакция вызвана недавним обновлением интерфейса Билайн-ТВ :) Было все отлично у них, но «надо же что то менять, не стоять же на месте» — и половина удобных функций в топку, зато красиво, ага.
Безопасность в десктопном приложении в большинстве случаев не важна. Ну закрыли вы в своем плеере возможность исполнения произвольного кода из mp3. Но пока такие mp3 разбредутся по сети, пока дойдут до ваших пользователей.
Глядишь и обновление дойдет. Или антивирус научится детектить. А заразиться кто-то ну «вирус подцепил неизвестно где» бывает.
Ничто не мешает разработчику позаботиться о внедрении автообновления в свой продукт, то что большинство программ его не имеет, это проблема разработчиков и их лени.
Ну, всё таки было бы хорошо и правильно, чтобы ОС предоставляла такой универсальный механизм из коробки и не надо было каждому лепить свои велосипеды. В этом случае ссылаюсь на конкретный хороший пример — deb пакеты в Deban-based дистрибутивах (есть и другие хорошие примеры), там и зависимости прописать можно и всё остальное продумано и всё это из коробки на уровне ОС.
С этим не поспоришь, в Windows такого нет, только ручками, в своем проекте сам многое перепробовал, в итоге свой велосипед написал.
Сколько лет Windows Store?
Хотя, зачем механинзм автообновления ОС? Кому надо используют Click Once.
Зависимости — это совсем другая история.
UFO just landed and posted this here
UFO just landed and posted this here
И это здорово, когда пользователь сам решает — нужно ему обновление или нет.
Конечно здорово.
Только пользователи почему-то все хором начинают страдать амнезией по поводу своих слов и решений при любой проблеме.
Как только пахнет жареным и надо нести ответственность за свои решения, пользователи всё забывают и разработчик резко становится козлом, который не позаботился об автоматическом обновлении, даже если пользователь прямо его запретил.
А из-за этого пользователь схлопотал заразу и у него утащили денежки со счета.
Караул, разработчики козлы и не заботятся о пользователе!
Вот и я про это говорю, палка о двух концах
Караул, разработчики козлы
Это издержки профессии. Смиритесь уже, всегда так будет.
Это признак власти профессии ;)
Меня бесит когда программа отнимает мое время на такие вопросы. Да еще десять раз нужно на кнопку ОК щелкнуть. Чертовы лангольеры — пожиратели времени. Уж тем более принимать решение нужно ли обновление — это нужно что — сидеть разбираться какие они в обновлении фичи добавили? Мне заняться больше нечем?
Кнопки «отключить автообновление» как раз хватит, чтобы решить нужны пользователю обновления или нет. А для фанатов возможность скачать старую версию.
Классическая система обновлений нативных приложений — это архаизм. В современном мире уже слишком много программ и ценно время людей.
Веб решает эту проблему сразу и жестко. И много от этого люди теряют?
Это не вы, извините, в яндексе Кинопоиск *обновляли*?
Нет :). Я просто высказал свое личное отношение к вопросу. В решениях как делать в проекте я опираюсь на мнение целевой аудитории, а не на свое.
Тоже выскажу своё мнение, например если в гугломаркет выложили версию приложения 2.0 а у меня стоит 1.35 я гарантированно на эту версию обновляться не буду и вернувшись через месяц* посмотрю на отзывы а может и вовсе выхода нескольких апдейтов на неё дождусь. Честно скажу — не люблю сырость в софте ибо этого по работе за глаза хватает, а смартфоном хочется просто пользоваться. Тоже самое и с компом, там правда проще ибо почти всегда можно откатиться без последствий, исключения есть конечно, например Chrome ругается при каждом старте на профиль если его откатить (к слову это была ещё одна причина почему я с него на Firefox ушёл).

* у меня просто предусмотрен чт. апдейтов, который идёт следом на неделе когда случается вт. апдейтов от MS и когда я два-три часа уделяю тому чтобы разобраться чего за этот месяц понавыпускали и чем мне эти обновления ОС и софта грозят, пользуюсь Windows и Android. Таких как я, наверное, не очень много, но просто не хочется возиться с глюками, впрочем, как и ломать рабочие инструменты.

P.S. я просто фрилансер, а от того ещё и админ сам себе (профессионально услуги не оказываю) и сервис инженер (это если только компами ограничиваться), а не только разработчик.
Google Chrome пользовались? Точно не помню с какой версии, но я просто потерял те уведомления об обновлениях, а зайдя в очередной раз в Справка > О Браузере я с удивлением обнаружил увеличение мажорной версии на десяток-другой. Вот так нужно делать автообновления!
Ну я бы не согласился, посмотрите сколько места занимает папа %User%\AppData\Roaming куда ставится Google. Он каждую версию складывает в отдельную папочку, если у вас несколько мажорных версий обновилось то думаю что сейчас он занимает 3-4 Gib. Оно вам надо?
Заглянул в эту папку и не нашел Chrome. Зато нашел кучу других программ, которые сожрали 2 гига своими данными. Зачем-то там mTorrent себе все торрент-файлы складировал, например. Это при том, что я их удаляю сразу после закачки. Мда… оказывается на Десктопе все еще хуже, чем я думал до этого.
Вы бы удивились, узнав, каково на мобильных с этим делом.
Хром уже довольно давно живёт в c:\Program Files (x86)\Google\ и хранит там только текущую версию и предыдущую. Да и ту, похоже не целиком, ибо размер с текущей разнится в два раза.
А кэши свои, да, он складывает в %User%\AppData\Local. Но кэши браузеров — это уже немного другая история.
Туда его поставить можно только специально, я через автономный msi установщик ставлю, а по умолчанию он к пользователю в данные встаёт :\ Да и даже если поставить в PF то всё равно складывает обновляемые на лету плагины (dll) в профиль. С включённым SRP это забавно наблюдать )

P.S. правда я уже из-за прожорливости Хромоножки уже год как на Огнелиса ушёл.
Через сетевую установку он сам в Program Files (x86) встаёт ничего не спрашивая. Возможно ваш msi времён «до переезда», а после установки и обновления он решает из Roaming не сваливать. Хотя, мне казалось, что он когда-то сам переехал при очередном обновлении.
Я просто всё это писал к тому, что Хром перестал мусорить старыми версиями себя.

А плагины, кстати, да, он хранит в Local.
Благодарю, хорошо что так и что они это пофиксили. У меня то точно не актуальные данные ибо только из автономных инсталляторов уже давно ставлю (так удобнее просто). Так что просто не знал что творится с сетевыми установками уже несколько лет точно.
Из-за забитого гвоздями автообновления уже не рекомендую хром никому, кто ходит в браузере за пределы соцсетей. Ибо разработчики пытаются загнать в свое светлое будущее, которое нафиг не нужно. То они решат, что им QuickTime plugin теперь не нравится, и в свежем новом хроме просмотр камер видеонаблюдения с китайской железки не будет работать никогда. То они запилят свой ppapi и начнут его жестко впихивать, выключая проверенный временем nsapi, в результате насовсем перестают работать корпоративные балалайки на Java.
До кучи: я искренне не понимаю как они тестировали ибо один и тот же Flash тормозил на ppapi и хорошо работал на «древнем» npapi.

P.S. сам тоже ушёл на Firefox и всех потихоньку пересаживаю. Родители вообще довольны были когда им поменял, особо вертикальные вкладки понравились (TreeStyleTab) ибо у них мониторы широкоформатные.
Афффтор просто пытался сказать, что даже при наличии многих веб кросс-мобильных технологий, таких популярных таких разных. Все равно нужны статьи для Хабра которые будут просто для десктопа. Иногда меня сильно удивляет скурпулезная мода на веб и мобаил, в особенности на Хабре. Мне кажется подавляющая аудитория заинваченных юзеров, это либо веб или мобаил разработчки, ну конечно за исключением Ализара, он просто копи пастер ))
Ну устройте опрос, кто под какую платфому пишет (desktop / server / mobile / web / embedded / game console / etc.) — удивитесь.

Мне кажется, что автор прав в том, что статьи всё больше про новые технологии, а не про устоявшиеся, потому что по поводу устоявшихся технологий всё уже на десять раз обсуждено, ничего нового не напишешь.
И бродят по «просторам» корпоративной сети 100500+ версий одной и той же программы, потому что пользователь скачал на комп первую попавшуюся с компьютера коллеги и пользуется, а письма о необходимости обновиться игнорирует. А потом, в довершении всех бед, автор программы увольняется из компании и программа остаётся без поддержки и развития. А компания — не разработчик ПО и не может содержать огромный штат программистов. (Реальная ситуация.)

Если ПО работает с БД, то наличие сети в любом случае необходимо, а это, по-моему, означает, что проще разместить такое ПО на серверах и управлять в одной точке, а не носиться по пользователям. Кстати, не очень просто и приятно объяснять пользователям, что у них не работает программа, которая работала ещё полчаса назад, только лишь потому, что появилась проблема с клиентом Oracle, которая возникла из-за того, что кто-то «просто поставил инсталлятором всё необходимое» забив на то, что кто-то другой сделал своим инсталятором то же самое, но несколько раньше.

Я не против десктопных приложений. Я против «безумных» авторов, которые считают, что только их программа написана правильно и не учитывают очень большого количества нюансов (например, упоминаемые уже ранее завышенные полномочия пользователя)
В корпоративной сети должны быть корпоративные системные администраторы, которые не должны допускать возможности установки у разных пользователей разных версий программ. А рядовым пользователям вообще админские права на установку софта не давать.
Полностью с Вами согласен! Но реалии таковы, что очень часто программисты пишут не «заморачиваясь» с разграничением полномочий и без администраторских полномочий ПО не работает.
Тут вопрос к компетентности админов, а также тех, кто их нанимает и проверяет.

Если ПО работает с БД, то наличие сети в любом случае необходимо, а это, по-моему, означает, что проще разместить такое ПО на серверах и управлять в одной точке, а не носиться по пользователям.

Админы на предприятии не способны настраивать GPO?

появилась проблема с клиентом Oracle, которая возникла из-за того, что кто-то «просто поставил инсталлятором всё необходимое» забив на то, что кто-то другой сделал своим инсталятором то же самое, но несколько раньше.

Админ всё ставит в одну папку, смешивая dll-ки? И не проверяя результат?

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

Тут проблема в том, что разработчики не разбираются в безопасности, при разработке ПО. Однако в случае Web об этом все узнают слишком поздно :-)
Согласен со всеми пунктами статьи кроме одного:

В десктопной программе мне не нужно рассказывать пользователю, что у него старая версия IE или нет Flash или заблокировна Java — я просто поставлю инсталлятором всё необходимое.


А откуда у пользователя возьмется инсталлятор?

Как выглядит «установка» вебсайта — один раз установил новый браузер, который обновляется сам и дальше просто заходишь на почти любой сайт и пользуешься

Как выглядит установка приложения на Mac, Android или iOS — зашел в магазин приложений, нажал купить или установить бесплатное, установил.

Как выглядит установка десктопного приложения под Windows? Зашел в Google получил кучу ссылок на кучу разных сайтов обвешанных рекламой и всячески старающихся спрятать кнопку «загрузить», от чего и блокировщик не всегда помогает. Начинаешь скачивать инсталляторы — а они все нашпигованы разного рода рекламными приложениями и просто зловредами. Причем далеко не всегда установщик позволяет хотя бы отменить их установку.

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

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

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

Сравните это хотя бы с Android и iOS.

А обновлять надо хотя бы ради безопасности.

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

Отсюда отсутствие денег для разработчиков, которые вынужденно переключается на веб, мобильные приложения или даже десктопные игры под Steam. На десктопе остается только open source и тяжелые копроративные приложения вроде MS Office, Autocad, Photoshop или каких-то внутренних разработок.

Обиднее всего что все это можно было бы решить одним очень простым действием — сделать нормальный магазин приложений. Но Microsoft упорно не хочет этого делать даже под Windows 8 — 10 еще не пробовал но в любом случае пока она еще займет доминирующее положение, пока разработчики начнут учится под нее писать… а ведь магазин можно было бы добавить сервис-паком уже в Windows XP, в 7 точно.

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

Десктопный софт выглядит одинаково каждый день


А это как мне кажется большая проблема не столько десктопного сколько софта вообще. Без обновлений не будет безопасности, но при этом обновления регулярно портят и непредсказуемо меняют интерфейс что сильно вредит работе с софтом.
Можно смело юзать стим в качестве магазина приложений :)
К сожалению их там почти нет. Плюс я не совсем уверен можно ли там отключить достаточно громоздкую систему онлайн-DRM хотя бы для бесплатных приложений.
там нет ДРМ защиты. Стим об этом говорит очень явно. ДРМ ставит разработчик софта. он может поставить дрм свой или любой какой пожелает. Но если этого не делает, то любой софт будет работать просто кликом по ЕХЕ файлу и без стима. Ну и при условии что софт не завязали на сам стим обязательно.
То есть там схема отличается от игр? Или в играх DRM тоже отключается? У меня просто было ощущения что игры там все с DRM, даже те, которые в других местах продаются без него.
В некоторых играх там сторонние DRM-технологии. Полагаю, и отключить можно при таком раскладе.
А что за некоторые игры? Я видел только игры с защитой от стима + ещё что-нибудь сбоку (от Microsoft какой-то сервис был, нынче вроде мёртвый).
Например, вот store.steampowered.com/app/48240 (Кстати, рейтинги ей слили как раз за эту DRM: там привязка к железу компа, и нельзя поставить игру больше, чем на три разных конфигурации, кажется).
Анно работает через Uplay, при необходимости можно получить у них еще активаций. И защита именно от убейсофта. Но это отдельный случай. Очень отдельный. Я имею ввиду игры от юбисофта.
GTA хочет кроме Стима ещё свой Social Club.
Игры от Майкрософт хотят кроме Стима ещё свой Xbox Live.
Игры от Ubisoft хотят кроме Стима ещё свой Uplay.

Плюс попадаются воистину дикие вариации, типа DCS World где сама игра бесплатна, платишь ты за модули к ней, но каждый модуль имеет свою защиту с вводом кода и активацией его не более 10 раз. Т.е. переустановил систему с игрой более 10 раз — до свидания. Я понимаю, что это много, но как-то напрягает внутренне.
Майкрософт давно забила парить свою систему (была Games for Windows Live). Тот же ремастер Fable вышел без подобных штук.
А, точно, вот оно как звалось! Ну может быть, давно ничего от них не брал. А несколько старых игр что есть — те требуют.
Ага, например, Insanely Twisted Shadow Planet одна из таких.
Нет там уже GFWL. После объяаления о его закрытии многие игры перевели на Steamworks.
А ачивки уже работают в стиме?
Запускал игру 31 августа прошлого года, тогда ачивку выдали. Если с тех пор не вышло апдейтов, которые их поломали, то всё работает.
Спасибо ) Теперь можно и доиграть в неё.
Само собой в разных играх технологии разные. Но есть немало игр которые одновременно продаются на GoG без всякого DRM (или через сайты разработчиков или вообще бесплатно доступны).
Это решает разработчик игр\софта\что_бы_то_ни_было_в_стиме.
Многие игры можно запустить без стима. Проблема в том, что в играх есть, например, привязка к аккаунту стима или ачивки. Они требуют стиаАПИ, а как следствие требуют стим.
скрытые галочки об отмене установки разных зловредов

Ad-ware под Android ничуть не лучше, чем все эти галочки в десктопных приложениях. И часто тоже добавляют в систему несколько ярлыков для установки других ad-ware.

Насчет скачивания десктопных приложений — их надо качать только с официальных сайтов или официальных зеркал. И не будет проблем. А для поиска нужного софта есть прекрасный сайт alternativeto.net. У каждой программки там есть ссылка на официальный сайт.

скачивание пиратки под Windows до сих пор на порядок проще, удобнее и безопасней чем покупка лицензии.

Эта мысль требует пояснения. Не помню каких-то особых проблем с покупкой. Иногда только письмо с ключиком приходит с опозданием.
Ad-ware под Android ничуть не лучше, чем все эти галочки в десктопных приложениях. И часто тоже добавляют в систему несколько ярлыков для установки других ad-ware.


Лично я пока не сталкивался — как минимум с учетом комментариев и оценки. В любом случае при желании такая проблема решается элементарно — модерацией магазина.

Насчет скачивания десктопных приложений — их надо качать только с официальных сайтов или официальных зеркал.


Недавно скачивал K-Lite codec pack с официального сайта — в комплекте с установщиком шла непонятная хрень с классическим «нажмите Decline чтобы продолжить установку без этой хрени».

Эта мысль требует пояснения. Не помню каких-то особых проблем с покупкой.


Как минимум надо каждый раз разбирать — настоящий ли этой сайт автора или поддельный где у вас попытаются увести данные карты.

Возможно для технического специалиста это и не проблема, за неопытного человека при поиске сайта с оплатой в гугле я бы не поручился — именно на них всевозможные фишинги обычно и нацелены
Тут речь не только о «пиратке» в плане кряков и прочего сколько ещё и о лицензионном соглашении, способах дистрибьюции и других технических деталях ибо даже имея ключ удобнее скачать с торрентов пересобранный образ с уже интегрированными обновлениями на текущий месяц дабы не обновляться неделю потом, а до кучи ещё (говорю про 7) с изменённым установщиком (от 8 ки) чтобы можно было ставить образ с USB 3.0 без дров и т.д. и т.п. С XP тоже самое было ибо нужно было качать из неофициального источника образ в котором есть драйвера на SATA. Ну и конечно огромное удобство в том, что это образ, а не диск, который даже прочитать нечем. Описываю я это к тому, что все эти технические удобства без кряков уже нарушение лицензионного соглашения и «пиратка».

P.S. Про 8.x и 10 честно скажу ещё — не знаю, может стало проще. 8.x мимо меня прошла из-за глюков просто на этапе тестов, а 10 сейчас стоит в виде бесплатного апдейта на планшете на котором 8.1 был, что с дистрибьюцией не смотрел ещё.
Не согласен. Я вот совершено не знаю, кто и как собирал этот образ с обновлениями, что туда еще встроили без моего ведома и т.п. С драйверами на современном железе проблемы крайне редки. Более того, недавно ставил лицензионную 7-ку на почти 10-летний нотик — и даже там практически все гладко встало. А более свежий компьютер вообще не вызывает проблем с установкой. Что до XP с ее SATA-драйверами — ну что тут поделать, система старая. И существует официальный способ эти драйвера ей скормить. Ну и самому запустить nLite никто не мешает.
Скажите, вот вам на выходных по работе пристали срочный документ, можете ли вы на память сказать можете ли вы открыть его в купленной вами персональной версии чего-там-у-вас, или по лицензионному соглашению при работе с рабочими документами вам нужна версия для предприятий?
Не могу сказать, но заморачиваться таким вообще не стал бы. У меня, кстати, MS Office, купленный по программе Microsof HUP, там лицензия действует на период, пока я работаю в текущей компании. И это, как я понимаю. предполагает свободное редактирование корпоративных документов.
> Не могу сказать, но заморачиваться таким вообще не стал бы.

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

Донатить создателя это не мешает, впрочем.
Я вот могу за себя сказать: нет, по лицензионному соглашению на купленную мной для дома версию я это сделать не могу, но я могу поставить дома экземпляр с корпоративной лицензией.

(другое дело, что я почти всегда все равно полезу на рабочий комп через терминал, потому что ворда мало, наверняка понадобится в код лезть, ну и так далее)
Как выглядит установка десктопного приложения под Windows?

Не поверите. Зашел в магазин, нажал кнопку и установил.
Не поверите, но в этом магазине (Windows Store, или у вас есть другой вариант?) нету классических программ. Там только Metro-приложения, а также приложения для рабочего стола в Windows RT. Вы тоже можете не верить, но лично я в этом магазине не нашёл ни одного полезного для меня приложения для десктопного Windows. Не знаю как у других, но лично у меня на диске D: каталог с именени Soft размером в 90 Гб со всеми необходимыми инсталляторами.
Да, говорят, что возможность публикации классических программ в Windows Store в разработке. Поживём, увидим.
Ну как минимум нативный офис там есть (не тот, который Metro). А значит возможность есть.
Что-то не вижу. Просвятите?
Как буду под виндой, скину Вам скрин.
А это только о том говорит, что разработчики этого самого софта (вам, который полезен) не позаботились о том, чтобы разместить своё приложение в этом самом магазине. Потому что возможность классические приложения размещать там есть с самого начала (года три, уже получается как).

Не знаю как у других, но лично у меня на диске D: каталог с именени Soft размером в 90 Гб со всеми необходимыми инсталляторами.

Увы, но это не практичный подход, потому что софт имеет тенденцию устаревать и обновляться. Лет 10-15 назад так и делали все, из-за отсуствия интернета и частого обновления. Сейчас это уже не актуально. Весь софт проще скачать уже со всеми патчами сразу с сайта производителя, если уж на то пошло. Да и какой смысл весь софт там держать? Нужный софт весь и так уже установленный стоит.
Ну, 90 ГБ инсталлях — это явно болезненная тяга к коллекционированию. У меня тоже такое было.
Вы шутите? Публикация классических Win32 и .NET-приложений по-прежнему недоступна, разве что в виде ссылки на официальный web-сайт. Или вы готовы прислать опровергающий скрин, в котором из Windows Store устанавливаете классическое Windows-приложение?
Потому что возможность классические приложения размещать там есть с самого начала (года три, уже получается как).


А можно какие-нибудь ссылки на это. Пока я видел прямо обратное:

For one thing, you’ll notice that the app price isn't listed. We don't include the price because the Windows Store doesn’t handle the acquisition process for desktop apps. (In fact, desktop apps aren’t available for download from the Windows Store—they’re simply listings.) The tile also makes it clear that the app is a desktop app.

When customers click the tile for a desktop app, they see a product description page with information about the desktop app, very similar to the Metro style app description page. The main difference is that in order to acquire the desktop app, the customer clicks a link that takes them outside of the Windows Store—the developer is in charge of the (paid or free) acquisition experience.

blogs.msdn.com/b/windowsstore/archive/2012/06/08/listing-your-desktop-app-in-the-store.aspx

То есть в магазине банально ссылка на сайт программы и не более того.
Если так, значит увы. Не пользовался этим функционалом, но видел еще на заре вин8 что они там были. То, что там было, мне не улыбалось («Мои вкусы очень специфичны. Ты не поймешь»), так как не было нужным софтом. Но если я ошибаюсь, прошу извинить за дезинформацию.
Кстати говоря, Win32 приложения скоро можно будет публиковать в Store, работать все это будет в «песочнице», как например Click2Run версия офиса. Ждем следующего следующего обновления для Win10.
А в «песочнице» это с уровнем integrity — untrusted или там что-то новое делают? Просто если первое то совсем не понятны элементарные вещи, вроде того как аудиоплеер будет файлы открывать и т.п.
Честно — не знаю. Знаю только, что технология называется App-V.
Ах, вон оно что, благодарю! Это довольно известный механизм, хоть и не распиаренный, а зря он уже давно есть и
это хорошо, значит работать будет нормально. По сути (сама технология App-V) это уже установленное портабельное приложение со своей мини копией окружения. То есть реальная песочница! Просто раньше эта технология была только для бизнеса доступна и делать контейнеры можно было только на сервере.
Ну так не зря они Drawbidge мутили и всю эту тему с пикопроцессами :) Пора бы уже за 15 лет с момента старта Singularity и какие-то практические результаты показывать.
на билде говорили, что часть приложения в untrusted.

Они упаковывают его так, что у него свой собственный реестр, свой собственный system и пр. Но все остальное как раньше.

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

Я правильно понимаю, что там нет возможности покупать? В таком случае денег разработчикам он не принесет и проблему отсутствия интереса к дексктоп-разработке не решит.

А также нет подробных описаний, скриншотов, отзывов — то есть проблему поиска новых приложений он не решит, надо уже заранее знать какой пакет устанавливать?

Надеюсь все это не покажется критикой проекта, просто он относится к совершенно другому классу программ.
Всё так и есть. Шоколад, скорее, фундаментально решает проблему с обновлением уже установленного софта.
Это уже веселее, только много чего там нету (и, вероятно, не будет).
Здравствуйте, меня зовут Георгий, я тоже разработчик десктопных приложений под Windows… Мак и Линукс и я шлю Вам лучи добра и поддержки! :)
Да, конечно, у десктопных приложений есть свои ниши: всевозможные редакторы картинов, музыки, видео, игры, средства разработки. Но для большинства других приложений переход на веб- и мобильную платформу сейчас не «рюшечки», а необходимость. Начать с того, что сейчас количество пользователей смартфонов в мире превышает количество пользователей десктопов.

> Десктопный софт работает без интернета

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

> Десктопный софт выглядит одинаково каждый день

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

> Десктопный софт доступен для расширения

Веб-софт доступен и гораздо более удобен: Chrome DebTools открывается по нажанию всего одной клавиши на любой странице. Для написания самих расширений достаточно выучить одну технологию: HTML5 + browser extensions.

> Десктопный софт работает

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

> С десктопным софтом быстрее начать работать

Предположим, вам нужно сделать простые действия с PDF файлом (объединить, разделить, и т.д.). Предлагаю сравнить, сколько времени это займёт на smallpdf.com, и сколько займёт поиск и установка соответствующей программы.

> Десктопный софт работает быстро

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

> Десктопный софт можно контролировать
> Саму инсталяху можно проверить антивирусом.

Поправка: не можно, а нужно. Я вот с большим недоверием отношусь к инсталляторам от неизвестных мне разработчиков. В браузере и на мобильном это не проблема — я защищён их системой безопасности.

> Все основные фреймворки и библиотеки сложились и устаканились

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

> Лицензирование десктопного софта просто и понятно
Десктопный софт всегда взламывают. Поэтому в серьезных приложениях встречаются совершенно безумные схемы с множеством ключей и серверами лицензий (так что ваш софт все равно не будет работать без интернета). С облачным софтом все гораздо проще — вы просто выбираете план и платите деньги. Но если вы настолько круты, что можете купить приложение на совсем, то вас устновят его на ваши сервера

Также
> Десктопный софт можно контролировать
А софт, работающий на локальных серверах — еще проще. Потому что не надо бегать по всем пользователям — все обновления и изменения делаются в одном месте, после чего начинают работать у всех
Вы наверное даже Экселем предпочитаете в облаке пользоваться :)
Я пользуюсь Google Sheets.

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

>Но для большинства других приложений
Расскажите, как необходимы инженерам переход на веб и мобильные платформы:)

>Веб-софт доступен и гораздо более удобен: Chrome DebTools
Это не веб софт, это часть браузера.

>В браузере и на мобильном это не проблема — я защищён их системой безопасности.
Браузер как-то защитит документы в облаке?
На мобильных не бывает троянов и вирусов?
> В большинстве десктопного софта это некритичная функциональность

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

> Расскажите, как необходимы инженерам переход на веб и мобильные платформы:)

Ну я — инженер. В смысле, software engineer, и почти половину того, что мне нужно делать, я делаю в браузере. Сами по себе средства разработки, как я написал, пока имеет смысл делать десктопными, да. Хотя… вот компилируется и запускается то, что я написал тоже в облаке.

>> Веб-софт доступен и гораздо более удобен: Chrome DebTools
> Это не веб софт, это часть браузера.

Это был ответ про написание расширений. Которое легче в вебе, чем на десктопе.

> Браузер как-то защитит документы в облаке?

Ну вообще-то да, документы в облаке не подвержены поломкам винчестеров и десктопным вирусам.

> На мобильных не бывает троянов и вирусов?

Ну, я вот не сталкивался. Теоретически да, они бывают, но их опасность гораздо ниже. Любая программа, установленная на десктоп по умолчанию имеет доступ ко всему диску, мобильное приложение — наоборот. На десктопе несложно перехватывать клавиатуру, на мобильном это почти невозможно.
Ну вообще-то да, документы в облаке не подвержены поломкам винчестеров и десктопным вирусам.

Мне как-то Dropbox прислал письмо: извините, мы просрали ваши файлы. Не все, конечно, но увы, мы сделали всё, что могли.

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

Да ладно. На андроиде программа (например, какая нибудь очередная клавиатура) просто попросит соответствующее разрешение. Что мешает нажать ОК так же не глядя, как это все делают на десктопах?
> Мне как-то Dropbox прислал письмо: извините, мы просрали ваши файлы. Не все, конечно, но увы, мы сделали всё, что могли.

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

> Да ладно. На андроиде программа (например, какая нибудь очередная клавиатура) просто попросит соответствующее разрешение. Что мешает нажать ОК так же не глядя, как это все делают на десктопах?

То что это явный пермишн? То что по программе ясно видно, что это клавиатура, а не wallpaper с котиками? То что она будет выкинута из аппстора, как только об этом станет известно (а оно станет).
Посмотрите отчёты компаний, которые делают те же антивирусы. Иногда «станет известно» — это вопрос года, а то и больше.

Я как-то и под виндой на вирусы не жалуюсь. Но есть всякие любители отключить UAC первым делом после установки винды, например.
Мне кажется, в последнее время стало меньше вирусов под виндой во многом благодаря тому, что люди стали ставить меньше программ. В конце 90-з — начале 2000-х на компьютер обычно ставили множество утилит, и легко было подхватить вирус. Сейчас многие задачи решаются теми самыми мобильными приложениями и веб-сервисами и необходимость в инсталляции программ уменьшилась.
>Сохранение в облаке — весьма важная составляющая.
Важная, но некритичная. Фотошоп без интернета не подгрузит коллекцию новых фильтров или кистей, но фотографию в нём обработать всё-таки можно будет.

>Ну я — инженер. В смысле, software engineer
А инженера-проектировщикам что расскажете?)

>не подвержены поломкам винчестеров и десктопным вирусам.
И могут гарантировать, что мои данные никуда не уплывают и никому не продаются?

>Ну, я вот не сталкивался.
Я и на десктопе уже давненько не сталкивался.

>их опасность гораздо ниже.
Весьма спорный вопрос. На телефоне намного больше личной информации хранится, а у очень многих он же служит и для доступа к интернет-банку…
Здравствуйте, меня зовут Максим и я шароварщик. А что мне еще делать, если за десктопный софт мне платят деньги? :)
Как же меня в своё время бесил Gmail, который к такой элементарной вещи как почта каждые 2 недели придумывал то фильтры, то теги, то категории, то 5 разных видов UI, то чат, то ещё какого-то черта лысого.


Как же меня радовал Gmail, когда каждые 2 недели придумывал то фильтры, то теги, то категории. Хотя все это сейчас происходит в Inbox, поэтому продолжаю радоваться уже им.

И как раз в пользу подобных онлайн-продуктов говорит то, что они меняются постепенно. Давайте вспомним как офис внедрял новый Ribbon Bar в Офисе. Это вызвало целую кучу негодования, так как пользователи не могли перейти постепенно на новую версию, которая объективно лучше.

Также стоит вспомнить, что новая политика обновления ПО нас радует и на десктопе, что делает его гораздо лучше. Это Браузеры, в первую очередь. Они меняются каждый день, обновляются, радуют новыми возможностями. Благодаря этому ими даже приятно пользоваться, иначе пришлось бы использовать Web-версию, не иначе. )

Мир меняется, старым видам приложений остается все меньше места.
Что-то я давненько не наблюдаю ничего нового в Inbox.

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

Давайте не будет тут вспоминать Кинопоиск. Это был очевидный фейл. Но, кстати, он показывает на сколько онлайн-продукты теснее взаимодействуют с аудиторией. Это увеличивает критичность ошибки. MS уже не стал тогда ничего поменять, как и в случае выпуска Windows Vista, например. Ну нет альтернативы и все. Никто не побежит делать другую версию операционки. И большую часть негодования они просто пропускают мимо ушей. А в онлайне это сразу начинает вызывает видимую реакцию с серьезными последствиями. Хотя Яндекс тоже мог забить просто, хуже бы уже не стало.

В Inbox мне бы тоже хотелось видеть еще более активное развитие, но хотя бы так. Последнее, что у меня появилось — группировка оповещений, вроде.
MS тогда не стал ничего менять не потому, что пути назад не было, а потому, что они знали, что делают. Тот же риббон наверняка не с потолка взяли, а проводили исследования, и лично мне он сразу понравился больше, но люди в основном ретрограды по сути. И сейчас с аудиторией Microsoft взаимодействует не менее тесно. Я очень жалею, что они сдались под напором негодующих консерваторов и вернули кривой и неудобный «Пуск» в винду.
Ну Риббон действительно как-то серьезно исследовали и перед запуском потихоньку о нем рассказывали. Мне он тоже понравился, хотя я, разумеется, тоже не мог найти какие-то обычные функции, но так как все достаточно интуитивно получилось, разобрался быстро.

C Windows 8 и пуском все сложнее. Она, как и Vista, крайне сырая. Не пробовал пока 10-ку еще, так как есть некий страх поиметь проблем с Vagrant и моя видеокарта не нравится новой версии. Но я надеюсь, что там все гораздо лучше.
C Windows 8 и пуском все сложнее.

Оно не сложнее. Это был просто необходимый шаг к смене концепции ОС. Win32-софт безнадежно оброс легаси-костылями, отсюда и все эти виндо-проблемы, о которых даже в этом топике сказано много слов: дистрибутивы, разбросанные по миллионам сайтов, уязвимость для malware, криво написанный софт и пр.
Новый Пуск в Windows 8 — лишь внешнее отражение смены парадигмы: переход от win32-легаси к новой системе дистрибуции ПО через магазин Windows Store, который был призван решить большинство существующих проблем. Новый Пуск должен был, в первую очередь, показать пользователям возможности нового типа ПО — установка/покупка одним кликом, виджеты, собранные на одной странице, возможность синхронизации данных между устройствами.
Microsoft, на мой взгляд, совершили фатальную ошибку, не приложив достаточных усилий для того, чтобы объяснить всем пользователям, что же действительно самое главное в новой Windows 8 и как получить максимум отдачи от смены концепции.
Пользователи просто не «въехали». Они решили, что новый Пуск — украшательство ради украшательства, и это, естественно, вызвало шквал негодования — получалось, что у них забрали привычный дизайн и функционал, и ничего не предложили взамен. Если бы MS умела так же хорошо пропагандировать свои разработки среди пользователей, как это делает Apple, восьмерка (ну хорошо, 8.1) могла бы по популярности превзойти Windows 7.
На фоне этого незамеченным прошла вся та огромная работа, которую проделала Microsoft для разработки кардинально нового UX для работы с тач-скрином. Это вопрос, конечно, немного субъективный, но я лично считаю Windows 8.1 самой удобной ОС для работы с планшетом. Windows 10 — это натуральный шаг назад в плане юзабилити.
Windows 10 — это натуральный шаг назад в плане юзабилити.

Особенно с тач-скрином :(
Ну да, я именно тач-скрин и имел ввиду. Насчет десктопного интерфейса — сложно сказать однозначно. Что-то лучше стало, что-то хуже.
Microsoft, на мой взгляд, совершили фатальную ошибку, не приложив достаточных усилий для того, чтобы объяснить всем пользователям, что же действительно самое главное в новой Windows 8 и как получить максимум отдачи от смены концепции.
Пользователи просто не «въехали». Они решили, что новый Пуск — украшательство ради украшательства, и это, естественно, вызвало шквал негодования — получалось, что у них забрали привычный дизайн и функционал, и ничего не предложили взамен. Если бы MS умела так же хорошо пропагандировать свои разработки среди пользователей, как это делает Apple, восьмерка (ну хорошо, 8.1) могла бы по популярности превзойти Windows 7.

Так в том и проблема, ведь UI их никто для десктопа менять не заставлял. Ещё в бетках 8 была норм, но потом они сломали UI и даже я как тестер её просто бросил и перестал следить, как итог в релиз попала куча багов, которые только после 2 или 3 патчей только в 8.1 поправили, а некоторые поправили только в 10 (например у меня часть приложений так на 8.x и не запускаются, но на 7 и 10 работают). Ах да, я до сих пор сижу на 7 ибо 8.x тихо мирно прошёл мимо, а 10 настолько сырая и глючная, что переходить на минное поле с мягкой лужайки с травушкой совсем не хочется. Так и стоит 10 на одной машинке для тестов. Да и опять же в 10 есть просто тьма мест в которых функциональности из 7 просто нет, чтобы далеко не ходить — те же свойства подключения WI-FI по правому клику на названии соединения, например. Вот таких мест с потерянной или размазанной по куче мест функциональностью просто ужасно много. Про глюки я уже тоже тут писал: при 100 % загруженности проца новомодный гуй 10 просто висит и не обрабатывает никакие события вообще, при этом все win32 приложения работают нормально. И это я всё про релиз 10 :(
UI их никто для десктопа менять не заставлял

А как еще им было продемонстрировать возможности нового типа приложений? Сделать отдельное приложение? Его бы никто не запускал. К пользователям, конечно, нужно относиться с уважением, но они, в массе своей, чрезмерно консервативны.
Хотя да, нужно было сразу разделить планшетный режим UI и настольный, как это было сделано в 10-ке. Для планшета, я продолжаю настаивать, интерфейс 8-ки почти идеален.

10 настолько сырая и глючная

Согласен. Может, не «ужас-ужас-ужас», но «немного ужас» точно :)
А как еще им было продемонстрировать возможности нового типа приложений?


А зачем эти возможности демонстрировать там где они не просто не нужны, но еще и вредят?
Я именно это и подразумевал, говоря, что все сложнее. Парадигму десктопа нужно кардинально менять, думаю, всем понятно. Но решения бывают хорошие / проработанные и плохие / сырые. В Случае с Windows 8 нам дали не просто новую парадигму, а именно сырую новую парадигму. Использование глобального Store нам известны давно. Это и мобильные платформы и некоторые даже использовали Ubuntu, например. Да что там — Steam даже. Идея-то в целом рабочая. С магазином никаких проблем нет, проблема с тем, что там продается.

Виджеты — штука, о которой я мечтал еще с Win Me, честное слово. Всегда думал как бы здорово было добавить в какое-то место на рабочем столе информацию о погоде или еще что-то. Даже пробовал разные программы. А в Vista использовал немного эту инородную и тормозную панель с виджетами. Но их огромная проблема в том, что они пытаются вести себя как полноценные программы. Пытаются жрать ресурсы, перетянуть на себя фокус внимания и т.д. В виджетах Win 8 такая же беда. Они предлагают некую функциональность, но вместо нее дают только мелькающую анимацию. Представьте, если бы в Фотошопе или Офисе вкладочки, вдруг, начали все переливаться разными цветами, мигать и т.д. А еще бы начали новости спорта показывать.

Самый важный фейл заключался в том, что приложения Win 8 стали пытаться имитировать работу с мобильными устройствами на декстопе. Занимают полностью экран, скрывая все элементы системы. Таким образом они предлагают некий «потоковой» вариант использования системы, а не «распределенный». А это десктоп! Мы тут привыкли, что у нас параллельно браузер и скайп открыт. Открыт счет и интернет-банк. И у нас большие экраны, черт побери. И эти экраны без тача, очевидно. И тут нет кнопки «Домой» или «недавно открытые приложения», как на телефоне. Эти штуки идут полностью вразрез с задачами десктопа и текущей практикой использования. Более того, подобного типа приложения появились же еще в Vista. Там некий медиа-центр был. Он был прообразом приложений Win 8, по сути. Неужели нельзя было тогда уже оценить этот опыт?

Я пробовал использовать Win 8 приложение Viber. Допустим, даже, можно как-то смириться, что я приложение иногда открываю на весь экран и теряю обзор некой своей основной программы. Но грузится это невероятно долго, при этом параллельно не давая мне возможность что-то еще делать. Внутри приложение тормозит невероятно. И в довершение всего оповещения приходят очень проблемно. Однажды даже была задержка на 30 минут оповещения в сравнении с телефоном. Я думал, что проблема в Viber. Но нет, Skype работает точно также. И даже системные настройки в виде Win 8 приложения работает крайне трудно.

То есть, в итоге, я не смог получить никакого положительного опыта в новой парадигме. И никакое обучение или информирование бы не помогло. Сейчас использую Win 8.1 просто потому, что уже все настроено и не хочется терять время на переустановку. Ни одного виджета и ничего не мелькает. Пуск содержит только ярлыки на основные рабочие программы. И рабочий стол по прежнему помойка.
Абсолютно поддерживаю!
Кстати говоря для погоды попробуйте sWeather, мне раз и навсегда помогло, висит иконка в трее и отлично, её всегда видно и она абсолютно не отвлекает.
Ну, теперь с погодой проблем нет особых. Google Now предупреждает даже о резком изменении температуры. Да и трей не резиновый. В любом случае, спасибо за совет, вдруг пригодится еще где-то :)
Всегда думал как бы здорово было добавить в какое-то место на рабочем столе информацию о погоде или еще что-то.

Проблема с виджетами на рабочем столе в том, что они почти всегда закрыты развернутыми окнами. Это я по опыту Висты помню. Эту проблему виджеты в новом меню Пуск частично решали — не нужно сворачивать и разворачивать все открытые окна, чтобы на них посмотреть. Нажал Win — и все виджеты перед глазами. Нажал Win повторно — можно возвращаться к работе.

В виджетах Win 8 такая же беда. Они предлагают некую функциональность, но вместо нее дают только мелькающую анимацию.

Не могу согласиться. Есть, конечно, такие, что только мелькают. Но, например, приложение погоды показывает сокращенный прогноз, приложение Вконтакте показывает новые сообщения, приложение Новости — заголовки важных новостей. Я, например, этим даже пользуюсь.

Самый важный фейл заключался в том, что приложения Win 8 стали пытаться имитировать работу с мобильными устройствами на декстопе.

Вы правы, это действительно знатный фейл. Новый UI чудесно работал на планшете, со всеми этими жестами и свайпами, но на десктопе пытаться их повторять мышкой было совсем неудобно. Нужно было сразу делать, как в 10-ке — возможность запуска Store-приложений в окнах и выбора типа UI. Почему так не сделали — не знаю.
Но, справедливости ради — десктопные-то приложения и десктопный режим никто не забирал, можно было продолжать одновременно работать хоть с десятками win32-приложений.

Я думал, что проблема в Viber. Но нет, Skype работает точно также. И даже системные настройки в виде Win 8 приложения работает крайне трудно.

Хм, я Viber не пользовался, про него ничего сказать не могу. Но Скайп в ModernUI работал у меня, вроде, нормально, остальные приложения — тоже. И не только на десктопе, но и на планшете с Atom-ом.
они почти всегда закрыты развернутыми окнами

Так они и не нужны в целом. Часть из них на рабочем столе смотрелось бы очень гармонично, особенно погода. Нажимать Win или Win+D — не принципиально. Да и в целом рабочий стол пора бы изменить по сути. Но я так понимаю, что виджеты все же пытаются сделать именно функциональными (как это и на телефонах работает). И такое ощущение, что любой ярлык на приложение было задумано превратить в виджет. А это не нужно. Даже на телефоне можно несколько экранов использовать и виджеты-информеры обычно занимают отдельное пространство от ярлыков приложений.

Но, справедливости ради — десктопные-то приложения и десктопный режим никто не забирал

К сожалению, дело не в этом. Также как и одновременное включение двух браузеров в Win 10 — это фейл. Это неспособность четко и однозначно выдать хорошее качественное решение. Попытка дать пользователю выбор между «старым» и «сырым». Создается впечатление, что MS просто не понимает куда и как двигаться. Это печально.

По поводу Скайпа не знаю с чем беда. Вроде и комп не совсем уж древний и ресурсов свободных хватает. Но такое ощущение, что именно со связностью какая-то проблема. Даже ввод текстов тормозил иногда. Я написал целое предложение, а в окне оно появляется через секунду. С чем связано, не понимаю.
Виджеты — штука, о которой я мечтал еще с Win Me, честное слово. Всегда думал как бы здорово было добавить в какое-то место на рабочем столе информацию о погоде или еще что-то. Даже пробовал разные программы.
rainmeter же. Conky для винды)
Спасибо за информацию. Выглядит очень круто! :)
Поставил Rainmeter. Правда там еще тот конструктор, но как появится время, настрою что-нибудь себе.

Так вот, мой посыл был в том, что это должна делать система. Это все MS нужно было развивать еще бог знает когда.
Разве MS это нужно? В линуксе конки не дефолтные. Не знаю, есть ли вообще под мак что-то подобное. Кстати, в винде есть тайл с погодой)

Кроме того, вы же понимаете, что майкрософт ни за что не сделает дефолтный для системы софт с LUA и юзерскими дллками, в котором настройки раскиданы по куче файлов. Но именно это даёт rainmeter'у такую гибкость.
Дело не в решении текущем. Тут вопрос именно в том, чтобы менять парадигму взаимодействия с десктопом. По сути Windows до сих пор использует все то, что у нас еще было в Windows 95, а то и 3.11. Те же окна, те же папки и файлы, тот же принцип установки и удаления программ. Та же мышь и клавиатура. При этом стало много интернета и умерли дискеты с компакт-дисками.
Тут вопрос именно в том, чтобы менять парадигму взаимодействия с десктопом

Зачем? Что в текущей, древней парадигме неверно с точки зрения сегодняшнего дня? Если говорить именно о десктопе, не планшетах.
Зачем. Отличный вопрос. Если бы я представлял 1000 голов, а не одну, то вероятно мог бы предложить некий комплексный ответ. Но так как я не особо этой темой занимаюсь, то могу только некоторые моменты попробовать предложить.

Файловая система

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

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

Сетевые устройства

Тоже самое. Уровень должен быть выше и без файловой системы. Если в моей домашней сети есть компьютер жены, а у меня есть какой-то документ нужный, то я просто мог бы нажать «дать доступ жене к документу». И в этой сети в идеале должны находиться компьютеры друзей и других участников. То есть не обязательно должен отражаться физический уровень сети. При этом пользователь не думает о том, где хранятся эти файлы. Если он дал доступ жене или другу, то они просто работают вместе с этим документом.

Периферийные устройства

Пользователь просто не должен знать ничего о драйверах. Воткнул принтер, сканер или включил Wi-Fi устройство. Система весело сообщила, что устройство готово к использованию, а на телевизор, который «появился в вашем доме» можно вывести видеофильмы. Музыкальная система готова проиграть любимую музыку…

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

Вот такое, примерно, видение у меня.
Замечательно.
Касаемо файловой системы:
1) Структурирование. В самой обычной MS Windows начиная с Windows XP есть директории по умолчанию для картинок, например. My Documents или Program Files — все это стандартная структура, предназначенная именно для этого. Другое дело, что люди через одного не хотят ею пользоваться, а наоборот, хотят хранить файлы в «своем» месте.

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

2) Работа с файлами на устройстве — точно так же, в самой обычной винде есть т.н. helper, который вопрошает, что сделать со смонтированным устройством — открыть ли его в файл-менеджере или натравить на него какую-то программу. Список этот, естественно, можно пополнять и вставлять туда хоть графические редакторы, хоть музыкальные проигрыватели. Для всего есть стандартный API. Другое дело, что разработчики программ не всегда это делают.

а у меня есть какой-то документ нужный, то я просто мог бы нажать «дать доступ жене к документу».

Так оно так и делается — берется документ и включается share. Можно зашарить папку с зданным именем, задать ее как ресурс сети и работать так, как вы хотите. Точно так же, как вы, например, шарите принтеры.

Пользователь просто не должен знать ничего о драйверах. Воткнул принтер, сканер или включил Wi-Fi устройство.

Последний раз серьезно «ставил» драйвера в Windows 2000. В XP уже требовалось всего лишь указать папку, где все лежит. В 7ке и того проще — половина из коробки по умолчанию работает. Lenovo.

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

И тут нет проблемы — создается «домашняя сеть» на базе Wi-Fi десктопа и к ней подключается что нужно.

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

Например, расшарить документ для жены. Вы предполагаете, что юзер должен знать о концепции файловых шар, прав к ним. Создать отдельную папку, если надо расшарить только один документ. Оппонент ваш считает, что всё это слишком сложно. Нужно тыкнуться в файл, должна появиться опция «расшарить контактам...» и у жены в приложении на кнопке «открыть» в разделе «расшаренные файлы» сразу появится файл.

Или с WiFi сетью для музыки. Можно поднять сеть, зайти в шару, открыть файлы плеером. А можно нажать на файл, выбрать «передать», появится список DLNA-устройств, и файл начнёт проигрываться.

Во втором случае, когда за пользователя заранее подумали, отдельные задачи он решит быстрее. Но как только возникнет сценарий, заранее не предусмотренный, задача не решится вообще никак. Поэтому «новая» парадигма всегда будет соседствовать со «старой».
Это не вопрос файловой системы или смены парадигмы. Это задача приложения-сервиса. Обычного такого себе пользовательского приложения. Ведь есть же хелперы, скрывающие что-то под собой — тот же «мастер» подключения к Wi-Fi, или банальная иконка «размонтировать» или то же окно «что бум делать с этой флешкой, которуб ты сейчас воткнул?» — все вспомогательные приложения. Никто не мешает написать такие же для легкого расшаривания файлов. Но это все будут надстройки, парадигма — та же.
Это будет очень костыльно. Например, юзер нажал в файл «расшарить», а в папке ещё 100500 файлов. Что должен сделать визард? Создать отдельную папку, расшарить её и сделать в неё симлинк на файл? Или расшарить всё папку, в которой есть файл и настроить ACL, чтобы доступ был только к одному файлу?

То же с WiFi. Одно дело DLNA, другое — доступ через SMB-шары. Эмулировать одно через другое получится очень криво и ненадёжно, т.к. код «оболочки» будет работать на массе допущений.
Это будет не костыльно, это будет правильно. Такие вещи — не в компетенции файловой системы. Ее дело хранить файлы и управлять разрешениями. Простые решения «для домохозяйек» — как раз уровень прикладников.

Поэтому домохозяйкам не нужна файловая система.
Костыль — это когда файловую систему заставляют заниматься тем, что не предусматривалось при её разработке.
Вот, qw1 меня очень правильно понял, кстати.

Это и есть главная проблема MS, на мой взгляд. Они всегда работают над платформой, а не конечным решением. В то время, как подобные концепции можно воплотить только на системном уровне. И именно это делает Google и Apple, а MS не делает. Именно поэтому я расшариваю документы через Google Docs всем, а не какие-то папки делаю. И, вы возможно удивитесь, но я вообще перестал настраивать домашнюю сеть. Дома стоит 3 компьютера и все связаны исключительно через интернет. Даже файлы через Dropbox передаются, если нужно. Потому, что я даже лезть не хочу в эти настройки и смысла не вижу. А учитывая, что интернет безлимитный и быстрый, даже тяжелые файлы часто качаются на два компьютера параллельно из интернета. А у меня образование ИТ.

Вы говорите про папку для изображений. Так это просто папка, понимаете? Более того, она засунута бог знает куда. Если упадет система, то придется выковыривать свои изображения с напильником. Поэтому, разумеется, я положу свои фото в другое место. И даже на другой жесткий диск, подальше от системы. Все остальное тоже самое. Хэлперы, которые типа говорят открывать что-то, когда я вставляю флешку. Да не надо оно. Я может через час только документ решу открыть. А может через неделю. И где этот хэлпер будет тогда? А если каждое приложение начнет предлагать свои мастера, то это будет абсолютная катастрофа.

При этом, разумеется, я не говорю, что нужно убить все старое и заменить абсолютно новым. В том же Android по прежнему есть файлы и к ним можно получить доступ. Но это требуется в исключительных случаях или определенным специалистам. Это более низкий логический уровень. Давайте вспомним про DOS. В с сравнении с ним Windows стал новым уровнем. Так вот, сейчас требуется такой же новый уровень над Windows, который смогут использовать любые люди интуитивно (дети, пожилые).

Мы видим возможности этого уровня уже сейчас, даже придумывать ничего не нужно особо.
Пример с дропбоксом некорректный: у меня все фоточки, к примеру, через OneDrive синкаются, даже ставить никакого стороннего софта не надо. Более того, сфотал на телефоне, и прикрепил к посту на компе. Документы так же.

Но по сути вы правы, очень часто нехватает именно готового вертикального решения. Либо какой-то мелочи в этом решении.
Ну почему не корректный. OneDrive сам выглядит как стороннее приложение. Я, честно говоря, не использовал и не знаю на сколько это удобно. Сужу по тому, как с ним сталкивался и выглядит он как обычная программа. И в целом разницы в концепции использования с Dropbox, видимо нет. То есть это не нативно все равно. А прослойки вообще, по хорошему, можно было бы избежать.
В 10ке он интегрирован в систему. и где граница того, выглядит приложение как стороннее или нет?
В 8-ке он тоже интегрирован. По нему и сужу. В 10 можно расшарить файл с рабочего стола, например?

Если это что-то близкое с функцией копировать-вставить — это системное. Оно пронизывает всю систему насквозь. Сторонее приложение работает обычно локально и занимает небольшое выделенное пространство для своей работы и не может влиять на часть функций даже там, где это может быть логично. Например, Dropbox не может дать мне расшарить вообще любой файл в системе, мне нужно для этого использовать специальную папку. Это логично с точки зрения их бизнес-модели, но с точки зрения пользовательской — это условность.
настолько, насколько вы описываете — нет не встроен. Встроен, через отдельные приложения — офис, фотографии, OneNote.

А насчёт рабочего стола — коллега просто переносит его в OneDrive b он синхронизируется. Да, было бы неплохо синхронизирвать его автоматически, пойду поищу фидбек.
Ну, видимо также как и в Win 8, таки. В целом понятно, что засунуть можно, настроить все и прочее. Просто это снова нас уводит в самостоятельное управление файлами и настройками. Тут даже не особо важно, что документ попадает в OneDrive. Там его также нужно искать в структуре файловой системы.
Это и есть главная проблема MS, на мой взгляд. Они всегда работают над платформой, а не конечным решением

Такое впечатление, будто читаю рекламный проспект Apple 80х.

В то время, как подобные концепции можно воплотить только на системном уровне.

Нет, эти концепции воплотимы на прикладном уровне.

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

Значит, вам нужен прикладной мастер настройки, который сделает это за вас.
Решений может быть три:
1) Либо все делается руками, на уровне разрешений файловой системы, драйверов и сервисов — это в принципе не доступно домохозяйкам
2) Либо весь интерфейс «игрушечный» и доступ к деталям отсутствует — это не устроит разбирающихся людей, которые хотят тонкой настройки
3) Либо имеем оба подхода вместе — тонкая настройка на внутреннем уровне, простые решения — на прикладном.

По-моему, вариант 3 оптимален, потому что подходит всем.

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

Да-да. А если упадет ваша система «одной кнопки» — «сделай мне красиво», то фотографии не надо будет выковыривать из рухнувшей файловой системы.

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

Никто не мешает делать перенаправления и симлинки.

И где этот хэлпер будет тогда?

Да где угодно — сделайте его по шорткату. Его вызов можно запихнуть в авторан, в контекстное меню.

А если каждое приложение начнет предлагать свои мастера, то это будет абсолютная катастрофа.

Вот чтобы такой шляпы не было, и есть централизованный хелпер и «открыть с помощью». Ассоциацуии файлов в реестре.

В том же Android по прежнему есть файлы и к ним можно получить доступ. Но это требуется в исключительных случаях или определенным специалистам.

И это и есть по сути тот самый прикладной уровень, о котором я говорю.

Вам никто не мешает написать вот прямо сейчас, в эту секунду свой собственный desktop manager для MS Windows. Вполне себе прикладной. И реализовать там все эти задумки. Только к ФС и ОС это не будет относится никак.
Вам не хватает полета мысли. Вы мне предлагаете решения в рамках существующей системы, да и проблемы ставите в ее условиях. )

Например, вот это:

Да-да. А если упадет ваша система «одной кнопки» — «сделай мне красиво», то фотографии не надо будет


Если рухнет у меня телефон, то я возьму другой и все мои фотографии из облака будут доступны уже через полчаса от силы. Никаких папок и файлов. Все просто. Для настольной системы решением может быть и облако и нормальное домашнее централизованное хранилище данных. Оно тоже не является чем-то фантастическим сейчас. Я вот понимаю, что говорю вам «хранилище данных» и вы, наверняка, опять думаете о нем как об обычном NAS. Очередной костыль.

Шорткаты, хелперы, реестр, симлинки… Мда, моя мама мечтает именно об этом. А я, разумеется, мечтаю ей это все настраивать каждый день. Такие вот извращенные мечты. Это ирония, конечно. ))

Нет, эти концепции воплотимы на прикладном уровне.

Вам никто не мешает написать вот прямо сейчас, в эту секунду свой собственный desktop manager для MS Windows.

Воплотимы, но не воплощены. Об этом и речь, что этим тупо никто не занимается.Мы с чего начали-то? С того, что Windows не удовлетворяет современным требованиям и рискует вылететь в трубу. Я пытаюсь эти самые «современные требования» сформулировать и предложить некоторое виденье того, каким дестоп мог бы быть, если бы им активно занималась инновационная компания, типа Google или Apple. Более того, они это и сделают, в конечном итоге.
Мне такое не написать, разумеется. Придется сотни жизней прожить.
Вам не хватает полета мысли. Вы мне предлагаете решения в рамках существующей системы, да и проблемы ставите в ее условиях. )

Потому что ваши «проблемы» решаются в рамках существующей парадигмы.

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

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

А я, разумеется, мечтаю ей это все настраивать каждый день. Такие вот извращенные мечты. Это ирония, конечно. ))

А зачем? Вы андроид настраиваете каждый день? У него та же файловая система внутри.

Воплотимы, но не воплощены. Об этом и речь, что этим тупо никто не занимается.Мы с чего начали-то? С того, что Windows не удовлетворяет современным требованиям и рискует вылететь в трубу

Понятно. Я с технической стороны подхожу — это все реализуемо без смены парадигмы, на прикладном уровне. Сторонняя фирма вполне может этим заняться. Например, сейчас можно найти с пяток альтернативных десктоп-менеджеров.

Другой вопрос — насколько это будет востребовано.
По-моему, вариант 3 оптимален, потому что подходит всем

Зачем идти на компромисы? Оставим iOS домохозяйкам, а Linux — гикам.
В любом случае система, изначально заточенная на определённое поведение, стабильнее и быстрее в конкретном сценарии, где реализуется это поведение, чем система, выстроенная поверх универсальной на костылях. Это как использовать РСУБД как key-value хранилище BLOB-ов. Да, возможно, но не оптимально.

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

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

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

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


Да и вопрос безопасности. Если я абсолютно спокойно доверяю свои данные Google, то в случае с Microsoft я уже напрягаюсь в определенной степени. Но это напряжение ничто в сравнении с тем, что я буду испытывать в отношении некоторой небольшой организации с небольшой историей и репутацией. Я предпочту Microsoft.
Потому что ваши «проблемы» решаются в рамках существующей парадигмы.

Вы андроид настраиваете каждый день? У него та же файловая система внутри.

Я и говорю, они не решаются, а раз за разом воспроизводятся. Честно, я просто устал настраивать Windows постоянно, думать куда и как сохранять эти фотки, выковыривать файлы из компьютеров, настраивать сети и т.д. Эти однотипные действия, которые можно не делать, происходят перманентно.

Android как раз не надо настраивать каждый день, о том и речь. И даже когда я ставлю Dropbox, то он просто работает, а документы или музыка просто доступны. Но если я хочу настроить что-то более тонко (например, чтобы ночью всякие оповещения меня не беспокоили), то это тоже доступно.
>Тут вопрос именно в том, чтобы менять парадигму взаимодействия с десктопом.

/усмехаясь/

«Как-то Сисадмин спросил:
– Учитель, не желаете ли красивую картинку для вашего десктопа? У меня есть коллекция „обоев для рабочего стола“ со звёздным небом и моральным законом.
– Почему ты думаешь, что мой нынешний „wallpaper“ хуже? – спросил в ответ Инь Фу Во.
– Я не знаю, какая у вас картинка сейчас. Я никогда не видел вашего десктопа. У вас всегда открыто множество окон.
– Я тоже его никогда не видел, – сказал почтенный Инь. – Я работаю.»/c/мудрая притча
Притча на самом деле мягко говоря не мудрая. Десктоп регулярно виден при использовании этого самого десктопа по назначению — при запуске программ через иконки. Кроме этого он виден при запуске компьютера и выключении.

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

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

/пожимая плечами/

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

2. Психология у всех разная, тащемта. Кого-то как раз картинки раздражают. И, как показывает практика, если приладу делал коллектив с преобладанием технарского склада — то скорее всего они это учтут и прикрутят возможность настроить так как тебе надо. А вот если делал коллектив дизайнерский — тут уже туши свет, кидай гранату, все будет прибито гвоздями в соответствии с их единственно верным дизайнерским видением.
Насчет настройки под себя абсолютно согласен, но жанр притчи подразумевает какие-то обобщения. А если ее свести к «некоторые пользователи действительно не видят обоев» то зачем тогда именно притча и в чем ее мудрость?
Я на своих машинах уже много лет как отрываю напрочь десктоп с иконками, треями и проч., а для запуска программ с которыми собственно и работаю пользуюсь горячими клавишами. На линуксах это делается штатными настройками icevm, на виндах несколько извращенней, через насилование реестра, но тоже без особых проблем.


Ярлык -> Свойства -> Быстрый вызов. Штатное средство, работает. Точно не скажу в какой версии винды это появилось, то ли с 95/98 то ли с 2000. В линолиуме точно было. Никаких извращений и реестров. Если не устраивает штатное средство — хоткей менеджеров полно любых. Кроме того, раньше в качестве десктопа можно было использовать обычную веб-страницу и делать там любые непотребства на html, js и css. А в семерке уже подрезали эту фичу, а ведь очень крутая штука была (а может и в висте — не пользовал её). Можно конечно еще вспомнить про стилизацию каталогов — там тоже что-то интересное было, но уже и не помню как что называется и что конкретно, так что могу ошибаться на этот счет.
Ага, актив десктоп с четвертой версией ИЕ и с 95 винды, а подрезали в висте. Заменили на гаджеты: https://msdn.microsoft.com/en-us/library/bb508509(VS.85).aspx
Ну, если вдруг кому интересно будет, раз уж упомянул.
Можно вообще использовать любой десктоп-менеджер, не только explorer.exe. (В 7ке по крайней мере).
Да, в курсе, тоже отличная фича. Работает в любой винде — там только надо прописать в реестре путь к нужному приложению. Ну и в 8/10 куст реестра поменяли. Лучшее решение для виндовых киосков (я то сам за линуксовые, но иногда там хотят именно винду).
Точно. В более старых это было в userinit емнип. Можно, например, туда вместо explorer.exe прописать notepad.exe и по загрузке иметь только блокнот на гордом черном фоне.
>Ярлык -> Свойства -> Быстрый вызов. Штатное средство, работает.

/почесав склероз/
Помню что когда-то, давным-давно пробовал, но как оно водится за штатными средствами вскоре оказалось что есть какие-то подводные грабли. В итоге в реестре HKEY_LOCAL_MACHINE..\..CurrentVersion\Winlogon было прописано Shell=c:\start.bat, а оттуда пускается hotkey manager от killprog.com
UFO just landed and posted this here
>тот же принцип установки и удаления программ
Уже не тот же, но автор статьи явно не готов отказаться от старого варианта.
Тут вопрос именно в том, чтобы менять парадигму взаимодействия с десктопом. По сути Windows до сих пор использует все то, что у нас еще было в Windows 95, а то и 3.11.


Точно так же как Android и iOS и MacOS. Я не поручусь за все оконные менеджеры под Linux но как минимум на самых распространенных вроде стандартной Ubuntu я вижу тот же самый десктоп с иконками.

Я не видел ни одной массовой альтернативы десктопу.

Скажем плиточный интерфейс Windows 8+ — это все тот же десктоп, просто там иконки с непрозрачным фоном, залитым ярким однотонным цветом, плюс вокруг каждой иконки большая область в которой нельзя размещать другие иконки. Все.
Новый Пуск в Windows 8 — лишь внешнее отражение смены парадигмы: переход от win32-легаси к новой системе дистрибуции ПО через магазин Windows Store, который был призван решить большинство существующих проблем.


А как связан новый Пуск в Windows 8 и схема дистрибуции ПО через магазин?

Почему нельзя сделать магазин для приложений с классическим настольным интерфейсом?

Как мне кажется это две никак не связанные между собой вещи.

Я в Windows 8 новым пуском просто не пользуюсь вообще — он банально не нужен на десктопе, не дает ни одной полезной возможности вообще.

В то время как Steam наглядно демонстрирует как можно делать нормальный магазин приложений даже не являясь разработчиком ОС.

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


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

Apple например сделал два разных интерфейса для настольных компов и тач-интерфейса. И кстати магазин для настольных приложений тоже сделал отдельный (и даже держал разделение планшетных и телефонных приложений в мобильном магазине).

Как мне на десктопе с мышью и клавиатурой поможет удобство использования на планшете?
А как связан новый Пуск в Windows 8 и схема дистрибуции ПО через магазин?

Я, конечно, могу ошибаться, но, по-моему, новый Пуск, должен был, во-первых, показать пользователям, что у них теперь вообще есть кардинально новый способ приобретать приложения, во-вторых, показать возможности и преимущества новых приложений — виджеты в виде «живых плиток», установка и удаление парой кликов и т.п.

Почему нельзя сделать магазин для приложений с классическим настольным интерфейсом?

У win32-приложений есть врожденные болезни, которые невозможно решить, не поломав к черту всю совместимость, на что MS пойти, конечно, не может. Само по себе создание магазина классических приложений тоже решит только малую часть проблем. Другое дело что, да, непонятно, почему не сделали одновременно и магазин win32-приложений и магазин нового типа. Может быть, чтобы избежать внутренней конкуренции и простимулировать разработчиков начать создавать новый тип приложений?

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

Я изначально говорил о том, что новый Пуск сделали таким не ради нового нескучного дизайна, а ради воплощения функционала нового типа ПО. И что многие на фоне негативных отзывов не обратили внимание на то, насколько хороша восьмерка на планшете.
А так — я тоже не понимаю, почему не пошли сразу по пути Win10 — не дали возможность пользователю менять режим работы UI с десктопного на планшетный, сохранив при этом «живые плитки» и общую концепцию.
>А так — я тоже не понимаю, почему не пошли сразу по пути Win10 — не дали возможность пользователю менять режим работы UI с десктопного на планшетный, сохранив при этом «живые плитки» и общую концепцию.

Как это бывает с монополистом — решили что пользователю деваться некуда, сожрет что дают.
Сейчас допилят мост для классических приложений, который, судя по всему, они начали пилить одновременно с восьмёркой. И будет распространение классических приложений через маркет.
У win32-приложений есть врожденные болезни, которые невозможно решить, не поломав к черту всю совместимость, на что MS пойти, конечно, не может. Само по себе создание магазина классических приложений тоже решит только малую часть проблем. Другое дело что, да, непонятно, почему не сделали одновременно и магазин win32-приложений и магазин нового типа. Может быть, чтобы избежать внутренней конкуренции и простимулировать разработчиков начать создавать новый тип приложений?
А какая вообще связь между UI и архитектурой Win32 (кроме искусственно созданной Microsoft), почему вы их противопоставляете? Можно же было делать 1-click-install архитектуру и для десктопного UI, просто в Microsoft решили поправить свои дела на рынке мобильных OS за счёт доминирования на рынке десктопов, заставив всех пользоваться «универсальными» приложениями и за счёт этого расширить WP-стор.
>Можно же было делать 1-click-install архитектуру и для десктопного UI
чем десктопный UI отличается от не десктопного, особенно в контексте 10ки?

Собственно МС активно пилит свой бридж, где она изолирует реестр, системные длл и т.д. для приложения
Мы же про 8-ку, там они вполне конкретно были fullscreen-only. Ну, и даже в 10-ке Метро-приложения очевидно ориентированы на сенсорные экраны — практически не используются контекстные меню, подсказки по наведению мыши, статусная строка, часто отсутствуют полосы прокрутки. Вот у меня обновление до 10-ки сломало мультитач на тачпаде, и я теперь не могу прокручивать не влезающий в экран контент в том же, скажем, Microsoft Fresh Paint. Потому что полос прокрутки нет.
Скриншот

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

хотите я вам на winforms такое напишу? Контекстные меню и подсказки по наведению мыши сами собой не появляются. В приведенном вами примере у приложения просто нет скрола. Когда он есть, то поведение по-умолчанию — показывать полосы прокрутки при наведении мыши. Другое поведение надо прописывать отдельно.

Ну и я про бридж для классических приложений, вроде фотошопа говорил: взял msi, прогнал через утилитку, получил пакет для распространения через стор (по крайней мере так на билде рассказывали)
хотите я вам на winforms такое напишу?
Так и Пуск с плиточками можно на WinForms написать, в чём проблема? Я именно про UI говорю.
Ну, и даже в 10-ке Метро-приложения очевидно ориентированы на сенсорные экраны — практически не используются контекстные меню, подсказки по наведению мыши, статусная строка, часто отсутствуют полосы прокрутки.

Вы пишите про конкретный класс приложений и в пример приводите далеко не самое удачное из них (для начала это Beta, которая доступна только по прямой ссылке, а во вторых второстепенное и 100 лет не обновлявшееся.)

А если взять приложение Photos: контекстные меню, подсказки по наведению мыши, полосы прокрутки — все на месте.

Так и Пуск с плиточками можно на WinForms написать, в чём проблема?

Можно, но не очень-то и удобно.
это Beta, которая доступна только по прямой ссылке
Это вы про что? Думаете, я Fresh Paint сам ставил? Нет, он предустановленный был.
Даже если оно там само оказалось (Может у вас планшет, у меня на ноуте не оказалось), это не отменяет утверждение, что это приложение — бета.
Хм, ок. они таки старое обновили, просто не так давно для 10ки было только www.microsoft.com/store/apps/9nblggh3m97p

но единственное приложение против Погоды, Почты, Фотографий, OneNote…
единственное приложение против Погоды, Почты, Фотографий, OneNote…
Это просто было единственное «метро»-приложение в моём «Пуске», которое я ещё не удалил (потому что не дошли руки попользоваться и оценить полезность).
>Как же меня радовал Gmail, когда каждые 2 недели придумывал то фильтры,

/флегматично/
Кто слаще морковки ничего не ел — тому и гмыльные фильтры за счастье.
А когда смотришь на них после фильтров того же bat'а…
8 лет назад (8 лет, Карл!) я перестал использовать Bat. С любовью в сердце вспоминаю те дни, когда я по 4 часа (!!!) в день перебирал почту и копался в спаме. Неее, никогда больше, ни при каких обстоятельствах. Никогда!

Эти ваши фильтры в Bat уже научились понимать разные словоформы?
>когда я по 4 часа (!!!) в день перебирал почту

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

_Зачем_ перебирать почту по 4 часа в день? Ее должен перебирать набор ваших фильтров, раскидывая по соответствующим папкам(ну или ярлыкам, если говорим про гмыл) — «срочное»-«важное»-«личное»-«посмотреть по диагонали если будет такое желание»-«сиськотики»-итд. Сделать это можно и там и там, ага. Но в стареньком бате это делается гораздо удобнее, быстрее, и правила фильтрации можно написать куда более подробные чем в модном крутом вебинтерфейсе гмыла. Это я какгбе на своем опыте прочувствовал, когда недавно попытался изобразить в своем гмыловском ящике что-то подобное тому что имею на своей машине в бате, который в том числе с этого же ящика почту и тянет.

Ну а про такой инструмент как view modes и вовсе говорить не приходится…
Затем, что 8 лет назад спам разбирался всякими клиентами типа The Bat и Inbox была переполнена всяческим спамом. И чтобы не упустить любую важную информацию, приходилось периодически это все разбирать. В день приходило писем по 200 на каждый ящик, а у меня их было несколько. И это были, разумеется, ящики не на Gmail, а некие корпоративные.
Ок, вы сейчас используете все те самые лучшие технологии по отсеиванию спама, которыe вам дает Gmail, но вам не нравится его интерфейс. А мне не нравится приложение с дизайном и технологиями из 90-х, все просто. Не знаю какие там такие фильтры вы используете, но меня в полной мере устраивает интерфейс Gmail и Inbox. И я периодически использую нормальный поиск по почте, включая всякие артикулы, которые закопаны в Excel-прайсах во вложениях писем. Срочное-важное без проблем отмечается. Личное — в личной почте, а не корпоративной.

Про view modes не в курсе, но если она позволила, наконец, нормально читать письма на HTML, то хорошо. Надеюсь, что она еще и использование действий в письме позволила, как это работает на Gmail. Может отписку от всяких странных рассылок даже?
>а некие корпоративные.

А это уже была проблема не сколько бата, сколько проблема дизайна в смысле построения системы, а не интерфейса приложения. По-хорошему борьба со спамом не задача почтового клиента. Резка спама должна была проводиться на том самом корпоративном почтовом сервере, под капотом сервера. Блеклисты, спамасасин, все дела. То что у гугля и прочих почтовиков нынче под капотом работает куча гномиков, которые неустанно борются со спамом, а у вас 8 лет назад на это забили — к интерфейсу вебморды/локального приложения не относится.

> Не знаю какие там такие фильтры вы используете,

Аналог того, что в гмыле «создать фильтр»: «если от такого-то пользователя, на такой-то адрес, и содержит то-то и то-то, но не содержит этого — переложить туда/пометить, etc.». После чего сообщения от людей оказываются в своих папках, сообщения от мониторинга — по ранжиру важности в своих, пачка подписок оказывается разложенной по отдельным папкам, итд итп. И, увы, то что есть в гмыле — до того что уже давно было в бате ни разу не дотягивает по удобству и возможностям.

>Про view modes не в курсе,

Это возможность для каждой конкретной папки задать тот вид в котором она будет отображаться. С тредами, без тредов, какие поля показывать в списке писем, как это отсортировать, етс. В «приложении с дизайном 90х» это есть…

> читать письма на HTML, то хорошо. Надеюсь, что она еще и использование действий в письме позволила, как это работает на Gmail.

А вот это, честно говоря, нафиг. И смотреть на очередное дизайнерское видение желания нет, и не надо мне чересчур умного клиента с действиями в теле письма.
Да были все эти фильтры настройки и т.д. Этим очень активно занимался хостер. И какую-то часть мусора это резало. Заодно с нормальными письмами. Но для публичных адресов эту лавину было не перекрыть без последствий.

Ох, я даже вспоминать не хочу всю эту кухню. Включая организации, которые сами себе настраивают спам-фильтры. До сих пор периодически происходят казусы с некоторыми организациями — то письмо идет 40 минут, то вложение больше 2 мб не проходит, то письмо в спам падает (хотя до этого два года переписки было), то тупо что-то не отправляется.

Когда я перешел на Gmail, я просто выдохнул. Тогда было максимум писем 10 спама за день. Сейчас и того меньше. И ложных срабатываний пару раз в год.

Я так понимаю, вы просто все настроили, как надо и удобно вам. Но представьте, что ваше решение обладает самым важным недостатком — проблема с тиражируемостью. Чтобы мне сделать то, что у вас там накручено — нужны огромные усилия. А Gmail просто открываешь и используешь — вся история. Если бы The Bat очень активно занимался этим вопросом сам и сделал бы локальный комбайн того же уровня качества, как Gmail, то цены бы ему не было. Поиск, спам, проверка на вирусы, синхронизация настроек, автоматический бэкап на сервер и т.д.
Отличная идея! Написать браузер на Javascript и запускать его в браузерах. Тогда сама самой отпадет проблема совместимости, потому что все веб-приложения будут работать в одном кросплатформенном Javascript-браузере ;)
Здравствуйте, меня зовут Дмитрий и я мало того что пишу под винду, так еще и на winforms, и в беклоге задач еще на год минимум. Спасибо вам за ваш пост, теперь я перестану стыдится этого. (на самом деле и не стыдился :) )
Наконец-то эта статья появилась. Сам уже хотел писать что-то подобное. Просто странно постоянно читать общие статьи о программировании, где подразумевается по умолчанию, что приложение для пользователя — это веб-фронтенд и никогда не упоминается desktop UI. Наверное, это выглядит как старперство, но пока еще есть много программистов, выросших на десктопах.
Так не читайте, пишите! Я бы тоже почитал, а то у меня складывается впечатление, что в этой области все паутиной заросло уже.
Ну, видимо, отчасти заросло-таки :-) Если все операционки движутся в сторону облаков, то и приложения идут туда же. Хочется нам этого или нет. Ниша десктопов и локальных приложений еще далеко не схлопнулась, но статьи сейчас пишут все больше совсем молодые разработчики, отсюда и впечатление, что кроме облаков и веба ничего нет — молодежь просто с этим мало знакома.
Они не просто выросли на десктопах, они еще и делают софт (в том числе для мобильников) на десктопах.
Хорошо понимаю «крик души» автора. Но нельзя не признать, что ниша десктопов становится все более узкой — это либо спец.приложения типа Автокада, либо хардкорные игры. Времена CD-eject-оров и шаровары за 9.99$ ушли и вряд ли вернутся (эх, а ведь только вчера зашел в ShareIt Control Panel и поудалял оттуда все старые проекты, все равно висят без дела уже несколько лет).

Простой пример из жизни, раньше когда надо было сделать pdf, я бы поискал конвертор, скачал и пр. Сейчас я гуглю «doc 2 pdf online», захожу на сайт, конвертирую, закрываю. Да, это потенциально ненадежное решение (если не будет инета, я не смогу сохранить файл), но вопросом жизни и смерти в данном случае это не является. Если бы я делал это для работы и постоянно, а каждая минута простоя стоила бы денег, наверно поискал бы оффлайн-решение.

А в целом да, мне совершенно не нравится тенденция «интернетизации» приложений. Онлайн-карты, онлайн-словари, и пр. У меня в телефоне все оффлайновое, и работает прекрасно без инета :) Зато и заграницей могу спокойно открыть карту в Androzic не думая, надо ли мне платить за траффик и где достать местную симку. Но… это уже Андроид, не десктоп.

Да, можно писать приложения и под десктоп, только легко ли будет найти новую работу если старый проект закончится? Я вот например могу хоть сейчас под MFC что-то написать, только кому оно надо?
Игры давно ушли в Steam — и он как мне кажется один из лучших по функционалу магазинов. Особенно в плане поддержки молодых авторов или проектов для узкой аудитории.
GOG начал активно развиваться. Будем ждать, а то в стиме долгое время был застой, а сча вроде снова активизировались.
Ниша десктопов на самом деле всегда была узкой, просто раньше огромные орды пользователей были вынуждены пользоваться десктопами для простеньких целей, для которых им десктоп на самом деле не был нужен. Эти пользователи, при всем уважении к ним, были довольно условными с точки зрения рынка ПО — они как бы существовали, но на самом деле никогда не являлись активными, они никогда ничего не покупали и даже не думали покупать и проблема здесь была даже не в уровне доходов или пиратстве, просто человек использовал ПК как некий утилитарный инструмент, а все что было за пределами его ниши использования проходило мимо его.

Я вот знаю ситуации, где у человек ПК годами использовал только чтобы 1-3 раза в день совершать Skype звонки — это было единственное ради чего он держал дома компьютер, он по сути даже не браузил интернеты, такому пользователю все остальное просто неинтересно, ему не нужны ваши продукты, ПО, сервисы и прочее. Может его и можно заинтересовать каким-то программным продуктом или сервисом, но это будет не тривиальная задача. Что сделал этот человек несколько лет назад? Правильно, перелез на планшет и забыл о своем ПК. Но этот пример не говорит о том, что рынок ПК перестал приносить деньги — подобные «отваливающиеся» пользователи никогда особо и не покупали ПО, а те кто покупал его ранее в своем большинстве и продолжают покупать. Другой вопрос, что стало сложнее заработать как раз таки на продаже случайным людям всякого мелочного барахла достаточно спорной ценности. А так индустрия продажи ПО, даже относительно мелкого, вполне себе живет и здравствует даже на Mac OS X, где уж казалось бы нету переизбытка пользователей, было бы странно если на Windows эта индустрия чувствовала себя хуже.
Да, именно так. Рынок простеньких «калькуляторов» ушел на планшеты и смартфоны, либо был вытеснен бесплатными решениями типа почты или карт от гугла.

Автор просто смешал в одной статье 2 разных момента: все возрастающая интеграция софта с вебом, и Windows как платформа для ПО.

Как бы мы не хотели большего, большинство юзерских задач это действительно не rocket science — заказать отель, такси, посмотреть маршрут, посчитать на калькуляторе и пр. И эта ниша из десктопов действительно ушла.
да ладно ребят, может не та те хабы подписаны? Я только с хабра узнал про qt, и много чего десктопного.

Очень жаль что остаются разработчики которые думают только об одно ОС. Пользуясь OS X уже несколько лет я не вижу себя за ОС Windows. При этом есть огромное количество приложений которые мне не обходимы но разрабы считают что раз у них Windows, значит и клиенты под windows должны быть. Выручает wine но не всегда.

И я откровенно не понимаю почему нельзя заморочиться и делать приложения более кроссплатформенными? Нет нормального фреймворка? Блин может потому что у разрабов нет потребности или желания? Нет спроса нет предложения. Хотя меня лично бесплатный Qt Studio всем устроил. И потратив 4 часа компьютерного времени на компиляцию окружения я прекрасно написал себе dll из под мака для моих нужд.

Переживаете что никто не пишет статьи про windows разработку? Welcome! Я лично прочитаю, плюсану и поблагодарю увидев такую статью.
Для меня хабр не то место где люди постоянно критикуют и ноют. (простите но это нытье) Для меня это место где любой энтузиаст может имея лишь желание написать хороший и полезный материал, задать любой технический вопрос, и получить зачастую очень квалифицированный ответ.

Так что нет статей про windows разработку, начните их писать! Я обязательно подпишусь и буду читать. Для меня эта тема далекая но очень интересная.
Ну, кстати, на кое что могу ответить со своей колокольни: часто приложение очень сложно сделать кроссплатформенным потому что оно очень большое и внутри много всякого легаси и (или) платформо-зависимого кода, вот, для примера FlylinkDC++ и для того, чтобы его сделать под OS X или Linux потребуется, как минимум на половину (UI часть) полностью с нуля переписать, при этом в ядре есть тоже куча фич, вроде работы с потоками NTFS или работа с системными механизмами синхронизации или с менеджером потоков системы. Проблема от того, что ноги у проекта растут ещё из 90х а разработчиков полтора человека. Однако почему новые проекты очень часто пишут не кроссплатформенно или на заведомо устаревших технологиях мне не понятно.
По старому коду согласен на все 100. По новому тоже. У меня лично мало уважения вызывает продукт, особенно если он стоит хоть копейку, который был недавно написан и его разработчик не задумался о кроссплатформенности.
Мне, как .NET-разработчику (точнее WPF), было очень обидно читать ваш комментарий :(
mono работает вроде как на OS X и Linux. Вроде бы keepass так предлагает запускать свой продукт
Только WinForms приложения. WPF пока и нет и скорее всего не будет. Вся надежда на kekekeks
Есть ещё Eto.Forms, даёт XAML и биндинги к платформозависимым виджетам (на никсах использует контролы из Gtk и MonoMac). По сути десктопный аналог Xamarin.Forms. От перспекса выгодно отличается тем, что готово к использованию, а перспекс пока в альфе.
Мы в ряде продуктов не думаем о кроссплатформенности принципиально. Поскольку целевая аудитория никогда в жизни не будет пользоваться *nix-системами. Но это довольно специфический софт, не на массовую аудиторию.
Сейчас заглянул на hh, там 2.5 вакансии с упоминанием макос как основной ОС. Линукса на десктопах ещё раза в 2 меньше, не буду уж выискивать (тем более платежеспособность вообще не вызывает надежд)

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

Не говоря о том, что любой сколько-нибудь сложный софт потребует оверхед на разработку измеряемый в человеко-годах.
А что собственно сейчас принципиально нового можно написать про разработку под винду и на какую тему? Я, как разработчик под windows, смотрю вот на эти все новые винды и знаете что? Я не вижу там ничего принципиально нового. Меня как-то спросили «Вот в чем разница между десктопной виндой и серверной?» — мой ответ был «Ничем». Вот с точки зрения разработчика ПО все винды — одинаковые внутри, за исключением того процента случаев, которые сюда не попадают. Нет, я серьезно, если выкинуть всю эту мишуру типа десктопные/серверные приложения/названия/версии — в основе останется все тот же WinAPI и ядро NT. Которые работают точно так же как и десять и пятнадцать лет назад.
Да, я не спорю, ОС стали сложнее, функциональнее, появились новые апи, повершелл, новые красивости. Но в вот в основе лежат идеи, концепции, и код тысяча девятьсот лохматого года выпуска. А местами вообще деградация: в десятке такой большой выбор цветов освновной темы — розовый оттенок, серый и немного зеленого оттенка. 48 штук. Больше нету легкой классической темы. Полностью отключить тормозную анимацию нельзя. Не, я конечно понимаю, что анимации, полупрозрачности — это красиво. Но для меня компьютер — это инструмент. И я хочу чтобы он быстро работал. А из красивостей я лучше на сиськи посмотрю, чесслово, куда приятнее глазу.
Так вот, отвлекся. Я просто хочу сказать, что основные принципы разработки под виндовс остались почти без изменений и многое из того, что было написано 5-10-15 лет назад про разработку под виндовс все еще вполне актуально, ИМХО. Ну, а если не так — значит я просто слоупок и все делаю по старинке.
С другой стороны — инструментов разработки стало больше, многие стали сложнее и намного объемнее. Вот про новые инструменты и методы разработки всегда будет что-то написать. Например, сегодня вполне можно разрабатывать десктопные приложения на браузерных движках и стали появляться новые инструменты для этого. Кстати, а кому-нибудь данная тема вообще интересна?
Открою секрет в вебе тоже многие вещи все еще можно делать так как 10 лет назад. Но не желательно. .Net развивается, Qt развивается… да много чего.
Пишите про инструменты, про ваши ноухау и грабли на которые вы наступали, про паттерны проектирования, про модификации в C++ стандарте. Тем куча.
Согласен с VoidVolker. Что про Qt, инструменты, модификации в С++ стандарте, и прочее можно писать, это очевидно. Но тут дело, что автор статьи явно вычеркнул из темы веб, кроссплатформенность, и прочие абстрактности, он хочет читать исключительно разработку десктопных приложений под Windows. И здесь действительно нового практически нечего писать.
Ну про кроссплатформенность, я видимо не заметил. Хотя все же считаю что она нужна и ее нужно развивать. Хотя бы внутри win, os x, linux. Это уверен никому не повредит.
Я не знаю я например не нашел даже нормальной статьи по winsock на хабре. А очень хотелось. Тут люди пишут лучше чем на msdn порой. Хотелось на русском статью с объяснением про блокирующие, неблокирующие сокеты. Про работу с Windows Message. Про select и overlapped сокеты. Отличная большая тема. Сейчас я в ней разобрался более менее но компетенции что бы написать статью и ответить на комменты не хватит.

Эмм… Сокеты — это такая старая штука, что про них написано еще в бумажных книгах конца прошлого века. Там нет ничего такого сверх-сложного. Windows Message — это тоже штука древняя, про неё тоже в сети полно информации.
А кросплатформенность — да, штука отличная. Я сейчас использую для десктопных приложений nwjs. Да-да, целый браузер для GUI и логика на JS. А там где критична скорость, объем и вообще — есть еще куча других фрейморков, студий, языков и т. п.
Право слово, я не знаю, как можно тему winsock раскрыть лучше, чем это сделано в msdn — с примерами.
Есть и другие задачи — например, в веб приложении воткнуть google карты проблем не составляет, а вот в настольном для них даже API нет человеческого, чтобы работать с тайлами и объектами на карте. Хотя все это делать можно, но обычно все сводится к встраиванию куска браузера в настольный софт. Работает так же медленно и убого как в браузере
Да хоть про поддержку HiDPI-мониторов. Ладно, если приложение гордо заявляет, что не поддерживает HiDPI, и оно скейлится средствами Windows, но если оно заявляет о поддержке, а на деле там нет ни строчки кода для этого, это печально.
Пытаюсь сейчас найти программиста-фрилансера для добработки приложения на VCL (Билдер да!), бОльшая часть отсеивается на начальном этапе с вопросами «А зачем VCL» и «Почему не кроссплатформенная». Кто-то даже предлагает веб-сервис написать и запускать его локально. Вообщем тяжело всё с десктоп-программерами.
Кстати, если кому нужна подработка — стучитесь в личку, проект долгоиграющий, часто надо фичи добавлять :-)
Ну новые разработчики на делфи тоже стараются уже не vcl, а FM пользовать. Они же кроссплатформенные и все из себя такие красивые… бла бла бла
К сожалению, имеется большой пласт кода написанный более 10 лет назад и завязанный на vcl. От него не уйти так просто, у меня по крайней мере сил и времени на это нет, проще доработать что есть. У меня не Delphi кстати, а C++. Он тоже умеет vcl, хотя основа дельфийская кругом к сожалению. На Firemonkey можно конечно текущий проект перекинуть безболеннено почти, но опять же это время и силы.
Я понял про билдер. Но я варюсь в делфи :)
UFO just landed and posted this here
Ну VCL и правда очень глубокое легаси. Так что надо сразу говорить: требуется доработка легаси проекта на VCL доступную версию среды тоже следует указать.

Вообще странно, что раз проект долгоиграющий и с постоянным добавлением фич но до сих пор на VCL. Просто тут есть опасность, что в определённый момент добавление новой фичи будет невозможно из-за ограничений и придётся очень быстро переводить проект на Firemonkey. Помимо этого при разработке на старых версиях C++ требуется больше времени, проще допустить ошибку, да и современные библиотек могут не заработать вообще. Ну а ещё дыры безопасности и производительность несколько ниже на старых версиях. В общем рекомендую всё таки провести оценку и потратить время и перевести проект на более современные рельсы ибо в долговременной перспективе это принесёт пользу поскольку значительно сократит издержки в процессе постоянной рядовой разработки.

P.S. Выше писал про FlylinkDC++ вот там действительно, чтобы слезть с WTL полпроекта (UI) надо просто переписать с нуля. Переход же с VCL на FM гораздо более простой и мягкий, а плюсов приносит много.
Спасибо за развернутый ответ. Программа существует уже около 10 лет и только полгода назад я перекинул её с Builder 6 на более-менее современный XE3. Видимо надо было сразу на FM прыгать, но что-то не сообразил… Лично я проектом занимаюсь всего год, ранее он был дополнением к железу, а сейчас появился шанс реализовывать его отдельным проектом.
По сути вся прога — одно сплошное UI, даже классов раньше не было. Сейчас я их внедрил и двинулся в сторону MVC чтобы разделить логику от интерфейса. А там можно на FM перепрыгивать.
Работает же — зачем трогать работающую систему?

У нас тоже все на VCL, завязано глубоко и для стыковки с Web используются отдельные конвертеры.
Про удобства для самих собственно разработчиков умолчано, видимо, неспроста…
Вы просто не умеете их готовить. Отладить десктопный софт намного проще, чем веб-службу.
На самом деле, подавляющее большинство десктопных программ таки лезет в интернет и многие-таки перестанут работать, когда «упадёт столб на Амазоновский датацентр»
Это вызывает лютую ненависть…
Все основные фреймворки и библиотеки сложились и устаканились и сегодня мало кто рискнёт стукнуть кулаком по столу и заявить что всё вот это ваше WinForms\WPF\Qt\VCL не правильно и сейчас я тут достану шашку и покажу как надо!


И что в результате устаканилось: WinForms, WPF или Qt?
У WPF и WinForms API заморожен уже много лет, что-то новое в основном народ в сторонних библиотеках клепает. Qt развивается, но из принципиально нового я там за последние годы видел только QML.
Всё в статье правильно. Вообще я считаю, что любой софт (веб, десктоп, мобильный, не важно) должен либо решать пользовательские проблемы либо задачи, но никак не создавать дополнительные, а потому парадигма с бесконечным тотальным «редизайном» с полным изменением подходов это явно создание проблем для пользователей и явное зло ибо человеку в современном мире и без этого стресса от футуршока хватает. Потому я в своих проектах всегда выбираю планомерную эволюцию, а если требуются достаточно серьёзные изменения, то это обязательно мажорный апдейт с обязательным уведомлением о серьёзности вносимых изменений.
UFO just landed and posted this here
WinForms\WPF\Qt\VCL


Посмотрел на бэкслэши. Вот теперь верю, что вы — Windows-программист!
UFO just landed and posted this here
Все примеры вымышлены, а совпадения — случайны.
;
Нет, правда, иногда от чтения Хабра у меня возникают именно такое ощущение, что нормально, нет, даже не «нормально», а допустимо и одобряемо сегодня писать только микросервисы для каких-то стартапов,


Мы разные Хабры читаем, наверно. Это зависит же от подписок на хабы.
У меня в основном по С и С++, все про десктоп + о шифровании и безопасности. Алгоритмы опять же десктопной реализации.

Вообще — всю «карьеру», 13-15 лет, пишу десктопные под Win. Непочатый край впереди.
Поставил вам минус за откровенную ложь.

В одной статье совместить «мне не нужно разрешение от пользователя» и «десктопный софт можно контролировать», это вы лихо.
REST API говорите ваш софт поддерживает? И где ж гарантия, что оно все не отвалится, как только я откажусь купить заново версию 2.0? Если ПО требует авторизации, то вся модель лицензирования может измениться одни кликом менеджеров. Давайте автономный софт и не обманывайте нас, пожалуйста :)
Всё будет работать автономно, конечно же. Просто перестанет синхрониться с веб и мобильной версией.
Ну вот, началось. Ваша программа превратится в тыкву :)

На самом деле, ваша статья полнится манипуляциями и подтасовками.
Например, сайты у вас «для стрижки пуделей», а программы — они все для проектирования.
Нельзя так.

Лицензирование десктопного софта просто и понятно

В корне не верно увязывать лицензирование и платформу. Есть куча фриварных сервисов в вебе (Google Docs) и куча феерически залицензированного софта, как вы сами указали.

С десктопным софтом быстрее начать работать

Это неправда. Сайт как раз всегда доступнее для первого «запуска». По крайней мере не менее быстро, чем программа, если требуется регистрация.

Так можно пройтись по всем пунктам, я думаю вы и сами это видите.

«Десктоп -> Веб» — это очередной переход от автономии и надежности к комфорту и экономичности. Подобно «Автомобиль -> Электромобиль» или «Телефон -> Интернет». Но надежность и автономия рано или поздно приносятся в жертву. Как, например, никому не нужны «автономные армии» прошлых тысячелетий, история выбирает «уязвимые армии» с растянутыми коммуникациями.
Ну что же ты поделаешь, если сайты действительно «для стрижки пуделей», а программы — для работы? Во сколько Вы оцените долю развлекательно-информационных сайтов в Интернете? Взять только Ютюбчик и социальные сети — это уже пол-интернета, а то и все три четверти. На десктопе (локальном) ютюб и социальные сети невозможны, а вот всякие автокады — наоборот, очень даже. Вот и Вам и доли рынков.

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

Сайт как раз всегда доступнее для первого «запуска».

Ну ок, давайте сравним время разворачивания виртуалки из образа в случае, например, Амазона и локально установленном VirtualBox. Сколько времени у Вас займёт с нуля регистрация в Амазоне, подтверждение почты, подвязка кредитки, её верификация, загрузка туда своего образа и т.д. и сколько времени займёт скачать инсталяху VirtualBox и стартануть в нём образ?

И да, программа моя не превратится в тыкву — иначе я бы не писал эту статью. В ней появится ровно одно предупреждение о том, что теперь данные не синхронизируются с сервером и всё доступно только локально. Если юзеру не нужна веб или мобильная версия — в его жизни не изменится ничего.
Доля развлекательных программ (игр) среди программ тоже огромна. Не думаю, что они уступают ютубу. В любом случае, они сравнимы.
Лицензирование — неправда. Большинство онлайн-сервисов бесплатны и при этом предоставляют очень крутой функционал. Навскидку из моего пакета — Google Drive, Google Docs, Google Maps, Gmail. Это офигенные веб-приложения, которые делают каждый мой день лучше и интереснее. Управление проектами и даже частый просмотр репозитория я тоже делаю через веб.

Развертка виртуальной машины — это за уши притянутый пример. Это надо примерно 0% людей на планете. Миллионы веб сервисов запускаются и разворачиваются в пол-клика, и мне при этом не нужно думать, что за ехе-вирус я выкачал в очередной раз.
UFO just landed and posted this here
Люди любят узнавать что-то новое, обнаруживать неожиданное применение старым навыкам. Десктопный софт под Windows — это существенно больше лет опыта разработки, чем мобильный и веб. Это просто нагуглить, легко понять; тут просто не о чем писать.
Можно и свой крик души?

Напишу в вашем стиле, если вы не против:

— Десктопный софт всегда работает медленно.
Если написанное ПО чуть больше чем телефонный справочник и имеет пользователей хотя бы ~500 человек. Все ПО начинает безмерно лагать (включая хваленный Windows, который «просто работает»), а уж сколько ресурсов нужно выдать под десктопное ПО я промолчу. Можно посмотреть на 1C (локальную на 5 пользователей: 2 ядра на приложение, 2 на ОС и 8Гб ОЗУ. Не жирно?)и похожие продукты. И бесконечные правки багов, новые релизы, проблема с совместимостью. Как на серверной стороне так и на клиенте. Скажете есть криворукие программисты и будете правы, но таких продуктов, как 1С, большинство.

— Десктопный софт (под Windows) практически не траблшутиться.
Логи? Какие логи? Ошибка -50043. Можете посетить сайт microsoft для уточнения. Переходим по ссылке, и что мы видим? Извините данная статья еще не подготовлена!
Админ, место на диске С закончилось. Куда? Программа логи пишет! Она же умная, она умеет следить за размером. Ты сам виноват, не настроил! Ок! Настраиваем.
Админ место закончилось на диске С. Как так? Я же настроил EventLog. Ха! А я еще и файлики пишу!
Не все ПО под windows с логами выглядит так, но бОльшая часть.

— Десктопный софт всегда головная боль админов по поддержке.
При установке «декстопПО 7.0» нужен net framework 3.5. Ок, накатываем ГПО.
Ура! Вышла новая версия «десктопПО 7.1» с поддержкой новых «рюшечек» (автор у тебя позаимствовал). Что не ставиться? Точно! Мы же теперь на новом фреймворке net 4.0, будьте добры — накатите на 500 машин.

-Десктопный софт ужасен при установке.
Зачастую программисты вообще не парятся с инсталяторами. Как в голову прийдет так и делают этот зоопарк. А вот мой любимый: если долго писать софт на MS Visual Studio в debug режиме, то проект в release можно просто не собрать! И прошу заметить это в лучшем десктопном IDE от Microsoft. И тянется это, на сколько я помню с VS 5.0, те с 2003-го года примерно.

-Десктопный софт «отлично» удаляется.
Что удалить? А вы точно уверены? А может я все-таки сделаю точку восстановления? А, так ты пользователь? Тогда извини.
Что? Файлы за собой удалить? Реестр почистить? Зачем? А вдруг пригодиться?
Попробуйте поставить ЛЮБОЙ антивирус на больше 500 машин с первого раза по гайду разработчиков через ГПО! Это у меня тест для администраторов, устраивающихся к нам в офис :)

-Десктопный софт беден на комьюнити.
Да, да. И не смотря на хваленный MSDN и проч. в 10% случаев вы не найдете ответ на свой вопрос. Или получите ответ типа «by design». Ждите новых версий (это только к шараваре)! К бесплатному софту почти всегда предлагают кучу рекламы и спам-программ. Есть отличные проекты, но по моим ощущениям их меньшинство.

-Десктопный софт запускаешь и он не работает.
Наша программа «десктоп 7.0» не ставиться? А какая у вас ОС? Windows XP? Правда? Ну вы даете, это же прошлый век!
Опять не ставиться программа? А вы виндовс переустановили? На Windows 10? Ну вы даете, она же еще сырая! Нет, наша программа не работает с «сырым» продуктом.
Наша программа опять не ставиться? Windows 7 теперь? А что пишет? Так, дорогой мой, вы забыли выключить UAC. Что это? Ну не мне же вас учить работать с ОС. Выключили? А теперь опять не ставиться? Странно, должно работать. А так вы не администратор на компьютере? Нет, наша программа требует прав администратора и ни как иначе.

Надеюсь вы понимаете, что я постарался показать как выглядит Desktop ПО для «домохозяйки»/«тетеньки из бухгалтерии»/(подставить нужное). :)

Ну и для меня как пользователя шарованного софта под Windows, человека, который 9 лет админил и поддерживал софт на платформе Windows, надеюсь, что ваш век подошел к концу. Заметьте, я пока работаю с софтом под Windows в middle-сегменте и понимаю, что вас оттуда выгнать очень не просто. Но я стараюсь, по мере своих сил, всячески не допускать распространения desktop у нас в компании. Я могу долго и подробно рассказывать про издержки/потраченные впустую человеко-часы и проч., но ваша статья не об этом, верно?

П.С. И у меня возникло стойкое ощущение после прочтения текста, что автор «тролль» :) не обижайтесь.
При установке «декстопПО 7.0» нужен net framework 3.5. Ок, накатываем ГПО.
Ура! Вышла новая версия «десктопПО 7.1» с поддержкой новых «рюшечек» (автор у тебя позаимствовал). Что не ставиться? Точно! Мы же теперь на новом фреймворке net 4.0, будьте добры — накатите на 500 машин.

Вот что правда то правда. NET — зло, даешь Native Win32. Если без шуток, то самые «забавные» чувства я испытал устанавливая ПО, которое требовало net 3.0 (?) при том, что на машине стояли все framework'и от 2.0 до 4.0, но НЕ 3.0. Зато 3.1 был (я могу путать версии, но суть та же). И я не могу теперь установить 3.0, потому что уже есть 3.1. А софту именно 3.0 подавай.

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

Почему это делают только сейчас в виде Net Native и все еще не доделали — вопрос к Microsoft. Видимо примерно такой же, как вопрос о смысле планшетного интерфейса в Windows 8.
UFO just landed and posted this here
Ну вот хорошо бы было авторам того приложения знать об этом.
Наверное потому же, почему до сих пор не сделали — рефлексия как ключевая часть языка. Либо компилировать все зависимые фреймворки в статические либы (и получать по 50МБ экзешников), либо вырезать всё ненужное, и компилировать уже это (чем сейчас и занимаются) — но тут уже нужно не оплошать и не вырезать лишнего. И это довольно сложная проблема, не решаемая в 2 приема. Назрела необходимость, перевешивающая все эти минусы — этим занялись, всё просто.

А вообще я очень хотел бы какую-нибудь AOT компиляцию на целевой платформе, чтобы совместить преимущества джита и обычного компилятора (с оптимизирующей фигней, а не 50мс на метод и свободен). Что-то подобное из дотнет-приложений я видел в Paint.Net, при установке, но глубоко не копался, чем он там занимается.
Выбирая между дополнительными 50 мегабайт на диске и необходимостью установки у пользователя нужной версии фреймворка многие выбрали бы первое.

И даже с некоторым урезанием возможностей языка смирились бы.

Тем более что под той же iOS это подход по умолчанию — там нельзя ставить в систему свои фреймворки.

Разработчики Unity где для скриптов используется C# и Mono сейчас перешли на компиляцию С#( Net IL) в C++ который потом уже собирается под целевую платформу компилятором C++ — это оказалось удобнее и эффективнее.
Технически ничто не мешало это сделать с самого начала, еще в 1.0.
Технически ничего не мешало с самого начала сделать Страуструпу темплейты в самой первой версии C++, но почему-то он это сделал только в 3.0.
Да-да, с логгингом вообще беда. Мне на работе приходится разрабатывать приложение на C# — так стоит только сделать граф. интерфейс, как stdout магическим образом перестает работать. Был сделан класс для логгинга — вот только передавать его в каждый статический метод оказалось очень жирно; а еще за мультипоточностью этого класса надо следить, сортировать сообщения по времени из разных потоков…

В конце-концов из кучи кода повырезал его к чертовой матери, отлаживаю под Mono — хотя бы там stdout работает — а для отладки на компах без моно и IDE сделал какой-то хак, который запускает по нажатию кнопки окно терминала, и туда все пишет. Довольно криво, потому что когда родной терминал запущен, то работает плохо — при большом кол-ве вывода, он вызывает невнятные задержки. Костыли, костыли…
А зачем вы свой велосипед для логов делали делали когда есть готовые?
Я сейчас погуглил, и не вижу никаких встроенных средств. Если вы про внешние фреймворки, то не вариант — это маленькая тулза (которая впрочем уже малость разрослась, но все же), предполагающая распространение единственным исполняемым файлом, т.е. нужен минимум внешних зависимостей.
UFO just landed and posted this here
И еще вроде ILMerge для этого всегда был.
так стоит только сделать граф. интерфейс, как stdout магическим образом перестает работать.


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

Перенаправление в файл без Моно не реализовывалось, пока нет необходимости. Но в отдаленных планах такое есть.
В принципе, может это какая-то соосбенность шарпа, но вообще консоль создается и через freopen stdout мапится на нее. Или можно смапить на файл.
support.microsoft.com/en-us/kb/58667
Здесь, в одном из комментариев внизу:
stackoverflow.com/questions/54536/win32-gui-app-that-writes-usage-text-to-stdout-when-invoked-as-app-exe-help
А зачем вам окно терминала для логгинга? Так теперь модно что ли?
А как вы собираетесь отлаживать программу на ПК без отладчика и IDE?
Не знаю зачем зачем мне отлаживать без отладчика, но хоть Trace.Write с листенером
Без отладчика затем, что у вас приложение работает, а на компе через три кабинета — не очень. И устанавливать туда IDE ради мелочного бага — как-то не комильфо.

Да, TraceListener любопытная штука… С одной стороны печально, что я не знал о таком хаке над языком; к слову, спасибо. Но с другой стороны, я могу наверняка сказать, почему такая идея мне не приходила, и более того, даже не пришла бы в голову. Следите за мыслью: TraceListener — эдакая глобальная сущность, являющаяся с точки зрения языка классом, но на самом деле представляющая собой объект. То есть, чтобы нагуглить существование подобной штуки, я должен совсем отчаяться найти решение в рамках языка — т.к. это потребовало бы для меня сначала понимание, что я должен сделать нечто еще более глобальное, а потом уже мысль «Может кто-то уже сделал; давай-ка погуглим…». Но дело в том, что в рамках языка решение существует, это стандартный ввод/вывод. Проблема лишь в кривой его реализации под одной из ОС.

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

Разумеется вы можете спросить — «ведь Console.WriteLine» являет собой такой же хак над языком, почему об этом мысль не возникла?». Ответ прост: я думал об этом в разрезе существования класса Console именно как части языка, а не как хака; ведь стандартный вывод всегда и в большинстве языков используют для отладки, во многих приложениях даже существует возможность контролировать количество вывода в ран-тайме.

Но сейчас самое интересное: переделал бы я приложение при возможности, после находки такого хака?! Нет. Ведь у меня по-прежнему лишь два варианта: писать в файл, для обработки пост-фактум, и… писать в терминал для обработки, так сказать, онлайн! По файлу необходимости пока не было, но перенаправление тоже стандартная возможность при работе с stdout, и кто-то уже выше даже показал способ.

В результате, нет абсолютно никакой разницы нет между этими классами, по-крайней мере в сфере необходимого мне применения.
TraceListener — эдакая глобальная сущность, являющаяся с точки зрения языка классом, но на самом деле представляющая собой объект. То есть, чтобы нагуглить существование подобной штуки, я должен совсем отчаяться найти решение в рамках языка [...] Но дело в том, что в рамках языка решение существует, это стандартный ввод/вывод.

На самом же деле, ни Trace, ни Console не находятся «в рамках языка». Оба они существуют в стандартной библиотеке, и степень их «стандартности» совершенно одинаковая.

Что характерно, Diagnostics.Trace — это, как раз, правильный способ делать диагностический вывод из приложения, неоднократно описанный в документации, и работающий разными способами в зависимости от настройки.

(это все, конечно, исходя из того, что вы не хотите прикручивать какой-нибудь другой логгер, уровнем повыше)
На самом же деле, ни Trace, ни Console не находятся «в рамках языка». Оба они существуют в стандартной библиотеке, и степень их «стандартности» совершенно одинаковая.
Я не уверен, что мы правильно друг друга понимаем, поэтому на всякий случай уточню: степень их «стандартности» одинаковая с точки зрения библиотеки С. Но для С# — что я и пытался сказать — это некая чуждая субстанция, потому что статические методы не имеют права модифицировать нечто за пределами аргументов, это священные земли, запретное место, и каждый перенос строки, поставленный безаргументным «Console.Writeline()» пляшет ногами на столе покрытом незелёными листьями стандарта, и вопит «Я еретик!».
Что характерно, Diagnostics.Trace — это, как раз, правильный способ делать диагностический вывод из приложения, неоднократно описанный в документации, и работающий разными способами в зависимости от настройки.
Я так же не уверен, было ли это возражением, и против чего, поэтому скажу, что, как я писал выше, для средств логгинга я не вижу разницы меж двумя классами. И при поиске средств логгинга для нового языка программирования, логическая цепочка весьма коротка: «Хм-м, что бы мне поискать под C#, если отладка без дебаггера и интерактивной оболочки в C++, Haskell, Python, BASH, PHP, Pascal, Basic, C, Common Lisp происходит выводом принта в файл или терминал». Как видите, «инструмент похожий на терминал, но не терминал», чем бы он не являлся, не имеет шансов оказаться среди звеньев.
lair аха, я понял, что вы имели ввиду — что подобные статические методы являют собой часть стандарта. Да, это верная точка зрения, я хотел обратить внимание на несколько другое — вы не можете создать статический класс, чей безаргументный метод модифицирует… Хм, что? Другой класс? Объект другого класса? Невозможно создать глобальную переменную.

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

Проведите мысленный эксперимент: в вашем C# коде создается объект, и вы написали на С++ сложную библиотечную функцию, посягающую на личное пространство вызвавшей ее программы — функция проводит хитрую эвристику по поиску некоторого объекта C#, и модифицирует его значение. Теперь, вы просто вызываете эту функцию из любого статического класса С#, и — та-дам! — переменная в объекте становится глобальной, вам более не нужен объект этого класса для ее модификации.

Теперь, можете ли вы сказать, что только исходя из возможности C# вызывать библиотечные функции, данный эксперимент соответствует стандарту? Вы безусловно согласитесь, что это хак.
вы не можете создать статический класс, чей безаргументный метод модифицирует… Хм, что? Другой класс? Объект другого класса? Невозможно создать глобальную переменную.

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

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

Буду, конечно. Нет ровным счетом ничего противоречащего логике C# в том, чтобы написать статический класс Logger, имеющий набор методов Error, Debug и Info, которые бы выводили диагностическую информацию куда угодно, в том числе — во внешний файл.

(другое дело, что как и другие синглтоны, это противоречит «хорошим» архитектурным практикам, но мы же здесь не о дизайне?)
Но для С# — что я и пытался сказать — это некая чуждая субстанция, потому что статические методы не имеют права модифицировать нечто за пределами аргументов

Серьезно? Почему это вдруг? C# — это совершенно обычный императивный язык с побочными эффектами.

Хм-м, что бы мне поискать под C#, если отладка без дебаггера и интерактивной оболочки в C++, Haskell, Python, BASH, PHP, Pascal, Basic, C, Common Lisp происходит выводом принта в файл или терминал

Эмм, скажите, а вы веб-приложения и windows-сервисы тоже отлаживаете выводом в терминал (возможно, перенаправленным в файл)?

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

(и, что характерно, такие библиотеки есть и под С++, в питоне и хаскеле это часть стандартной библиотеки, ну и так далее)
Могу. И хотя формально в CLR нет глобальных переменных, есть свойства и поля статических классов, которые могут выполнять ту же функцию.
Да, интересно, я не знал. Когда я искал возможность создать глобальную переменную в C#, я остановился на самом заплюсованном ответе stackoverflow «There's no such thing as a global variable in C#. Period.», что во многом подтверждало мои мысли, и не стал копать глубже.
Серьезно? Почему это вдруг? C# — это совершенно обычный императивный язык с побочными эффектами.
C++ — это совершенно обычный императивный язык с побочными эффектами. У вас полный контроль над памятью, вы можете перейти по указателю, о котором ничего не известно компилятору, но почему-то известно вам. Вы можете забыть освободить память, или освободить ее дважды (разумеется это все плохо, я не о том). Идея в том, что нет «внешнего мира» с охраной у врат, есть огороженная опушка с домиком в лесу, и вы знаете, что за оградку выходить без крайней необходимости не стоит. То есть у вас есть выбор: делать все так, чтобы компилятор знал об этом по-максимуму, либо забить на все — что в долгосрочной перспективе приведет к хаосу.

В C# у вас нет такой свободы, вы живете в небольшом городе, окруженном много-километровой, гигантских размеров, стеной. Единственный выход наружу — главные врата библиотечных функций. В этом состоит идея языка — взять всю ответственность за управление памятью, данными, адресами на себя, забрать ее от программиста. И когда вы вызываете функцию, открываете врата, пробирающий холодный воздух оттуда намекает, что у вас больше нет контроля над тем, что сейчас произойдет, вы нарушаете идею безопасности языка.

Я продолжу мысль со следующей цитатой.
Нет ровным счетом ничего противоречащего логике C# в том, чтобы написать статический класс Logger, имеющий набор методов Error, Debug и Info, которые бы выводили диагностическую информацию куда угодно, в том числе — во внешний файл.

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

Я вот как привык лет десять назад сразу подключать логгирующую библиотеку для униформного вывода диагностики в консоль, в файл, в трейс (который в веб-приложениях можно вытащить на страницу), в event log, в БД и еще куда угодно, так и придерживаюсь этой привычки.
Опыт моей работы с веб ограничивается страничками на PHP для встраиваемого контроллера. И да, насколько я знаю, где-то на нижнем уровне все происходит приблизительно так: открывается файл, и делается дубликат файлового дескриптора с целью, чтобы теперь принты уходили не в stdout, а в файл.
Когда я искал возможность создать глобальную переменную в C#, я остановился на самом заплюсованном ответе stackoverflow «There's no such thing as a global variable in C#. Period.»

Их действительно нет.

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

Во-первых, не языка, а управляемой среды выполнения. А во-вторых, какое это имеет отношение к побочным эффектам?

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

Логике языка — нет, не противоречит. При этом он является хаком, потому что нарушает границы CLR.

Другое дело, что я не понимаю, как это связано с совершенно легитимными статическими операциями.

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

Ивент логи? Почта? Трейс?
Их действительно нет.
Иногда мне кажется, что окружающие люди мыслят слишком локально… То, о чем вы говорили, и что показано в следующем же ответе на SO, то есть статический класс со статическим полем — по сути своей и являет глобальную переменную: у вас есть к ней доступ откуда угодно, правда в пределах нэймспэйса.
Во-первых, не языка, а управляемой среды выполнения. А во-вторых, какое это имеет отношение к побочным эффектам?
Модификация по адресу, полученному функцией не из своего аргумента — суть побочный эффект.
Логике языка — нет, не противоречит. При этом он является хаком, потому что нарушает границы CLR.
Хе-хе, ну тут не поспоришь — с точки зрения CLR мы нарушаем границы ее памяти (не интересовался CLR, основываюсь на предположении, что там есть что-то о памяти), а с точки зрения языка памяти нет в принципе, мы от нее абстрагированы.

Лишь один нюанс: ведь вы же кодите на языке, используя его стандарты, вы не обязаны заботится, как это будет на нижнем уровне реализовано. Если завтра кто-то уберет слой CLR, оставив лишь язык, то в вашей предыдущей цитате останутся лишь слова, что логике языка это не противоречит.
Другое дело, что я не понимаю, как это связано с совершенно легитимными статическими операциями.
Прошу прощения, не понял вопроса.
Ивент логи? Почта? Трейс?
Я так же не очень понимаю, против чего это является возражением. Если надо отправить лог, или его часть, по почте, мы делаем/вызываем довольно нехитрую функцию, собственно, берущую часть текста, и отправляющую по почте.

Хотя… Я думаю, я понял, что вы имели ввиду… Вопрос, что есть фреймворк, где такая функция уже реализована… Да, тогда это имеет смысл. Я прошу прощения, я просто привык, что подобные вещи обычно разбиты по системе, то есть отправка по почте — одна программа, упаковка — другая, наше приложение — третья… И при необходимости составить соединяющую это все команду, которую можно вызывать из PHP — дело пяти минут.

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

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

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

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

ведь вы же кодите на языке, используя его стандарты,

Я не знаю, о каких именно «стандартах языка» вы говорите.

Если завтра кто-то уберет слой CLR, оставив лишь язык

… то мы получим что-то очень странное и неработоспособное. Можно убрать C# и оставить работоспособный CLR, но нельзя убрать CLR, оставив работоспособный C#.

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

Берущую откуда? В какой момент?

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

Я прошу прощения, я просто привык, что подобные вещи обычно разбиты по системе, то есть отправка по почте — одна программа, упаковка — другая, наше приложение — третья…

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

И при необходимости составить соединяющую это все команду, которую можно вызывать из PHP — дело пяти минут.

А зачем? Это все только ухудшает читаемость и поддерживаемость.
хотя функциональность у статического поля и глобальной переменной схожа, семантика у них совершенно различна.
Можно подробнее?
Равно как и модификация по адресу, полученном функцией из своего аргумента.
Кстати, да.
… то мы получим что-то очень странное и неработоспособное. Можно убрать C# и оставить работоспособный CLR, но нельзя убрать CLR, оставив работоспособный C#.
Очень интересно. Да, я не знал, что C# настолько завязан на низкоуровневую часть.

Знаете, в чем тогда беда? Выходит, что для программирования на C# программист должен знать CLR. Но никто не учит CLR, учат именно C#. А юмор, что по вашим словам без CLR этот язык даже не сможет существовать. Это все печально.
Берущую откуда? В какой момент?

Я не хочу вызывать отдельную функцию для отправки почты, я хочу внутри программы «писать в лог», а уж куда это дальше уходит — это вопрос настройки.
Да, я вас понял. Действительно, я задумался, и не знаю простого способа сделать это в PHP. Это имеет смысл.
Можно подробнее?

Эмм, вы правда не знаете разницы между переменной и полем объекта?

Но никто не учит CLR, учат именно C#.

Никто, правда? Я искренне считаю, что любой разработчик на .net должен рано или поздно прочитать эту книгу.

Да, я вас понял. Действительно, я задумался, и не знаю простого способа сделать это в PHP. Это имеет смысл.

А ведь вам сразу сказали, что все ваши проблемы с логгингом — из-за того, что вы сотворили очередной велосипед.
Эмм, вы правда не знаете разницы между переменной и полем объекта?
Хех, ну во-первых поле статического класса, а не объекта. Во-вторых это весьма формально — когда человек говорит «Я хочу глобальную переменную», то он хочет нечто, что можно изменить, и с глобальным доступом. Детали реализации обычно не столь важны.
Никто, правда? Я искренне считаю, что любой разработчик на .net должен рано или поздно прочитать эту книгу.
Книга по ссылке — явно не название того, что станет читать начинающий программист, или разработчик, для которого C# не профильный язык. Они будут искать что-то вроде «C# за десять минут», или «Основы языка C#», или «Туториал по C#» — и нигде в подобных книгах тесная связь с CLR не будет упоминаться. Я знаю, потому что я работаю уже ≈год с этим языком (конечно не все время, но и с другими), и вы первый источник, от кого я услышал, что CLR являет собой нечто большее, чем реализация языка на нижнем уровне, которую можно заменить на что угодно, и которая не имеет связей с C#.

А ведь вам сразу сказали, что все ваши проблемы с логгингом — из-за того, что вы сотворили очередной велосипед.
Сказать и объяснить — разные вещи.
Хех, ну во-первых поле статического класса, а не объекта.

Семантически это поле единственного инстанса синглтона, представляющего собой класс.

когда человек говорит «Я хочу глобальную переменную», то он хочет нечто, что можно изменить, и с глобальным доступом.

В программировании очень важна семантика. «Нечто, что можно изменить и с глобальным доступом» — файл тоже подходит. И семафор подходит. И даже БД подходит. Вопрос намерения и смысла.

явно не название того, что станет читать начинающий программист, или разработчик, для которого C# не профильный язык. Они будут искать что-то вроде «C# за десять минут», или «Основы языка C#», или «Туториал по C#»

Искренне сочувствую им.

и нигде в подобных книгах тесная связь с CLR не будет упоминаться.

Может, надо читать другие книги? C# in Depth про это пишет. Essential C# про это пишет. Даже MSDN про это пишет.

Я знаю, потому что я работаю уже ≈год с этим языком (конечно не все время, но и с другими), и вы первый источник, от кого я услышал, что CLR являет собой нечто большее, чем реализация языка на нижнем уровне

Вам я тоже искренне сочувствую. Читайте книжки.
когда человек говорит «Я хочу глобальную переменную», то он хочет нечто, что можно изменить, и с глобальным доступом.


В программировании очень важна семантика. «Нечто, что можно изменить и с глобальным доступом» — файл тоже подходит. И семафор подходит. И даже БД подходит. Вопрос намерения и смысла.
Для меня семантика переменной имеет математический смысл — это некий элемент, который может принять любое значение из некоторого множества. Фраза «глобальная» подразумевает, что во время программирования к ней есть доступ отовсюду. Это вкладываемый мной смысл, и под него подходит как обычная глобальная переменная в языке, где это допустимо, так и изменяемое поле статического класса.
Может, надо читать другие книги? C# in Depth про это пишет. Essential C# про это пишет. Даже MSDN про это пишет.
Может быть. Но видите ли, в чем подвох — чтобы читать «другие книги», я должен обнаружить, что я чего-то не знаю. А обнаружить это незнание я смог только в нашем диалоге — а я, между прочим, прочел большое количество разных источников по C# на совершенно разную тематику.
Для меня семантика переменной имеет математический смысл — это некий элемент, который может принять любое значение из некоторого множества.

Языки программирования — это не математика. У переменных object lock и object returnValue — разная семантика, хотя обе они (потенциально) принимают элементы одного и того же множества.

Но видите ли, в чем подвох — чтобы читать «другие книги», я должен обнаружить, что я чего-то не знаю.

Понятно. Поверьте мне, намного полезнее заранее предполагать, что вы чего-то не знаете. Скорее всего, вы не ошибетесь.
Языки программирования — это не математика. У переменных object lock и object returnValue — разная семантика, хотя обе они (потенциально) принимают элементы одного и того же множества.
Нет, ну это же вопрос абстракции, и математика именно об этом. Например, вы можете заявить, что у вас есть множество четных чисел {x ∈ ℕ | x/2} и нечетных {x ∈ ℕ | x/2+1}. И хотя они оба назначены в натуральных числах, как ваш пример, вероятно, в Integer, это все равно два разных множества.
Понятно. Поверьте мне, намного полезнее заранее предполагать, что вы чего-то не знаете. Скорее всего, вы не ошибетесь.
Я не знаю очень многого. Просто когда есть некоторая информация, которая предполагает быть правильной — как у меня с CLR — и понимание, что я чего-то не знаю в другой области, изучение коснется последней, а не первой, где предположительно даже нечего учить (я видел CLR как нечто вроде .net assembler'а, и при отсутствии большого интереса к .net этот ассемблер явно не мог удостоится более подробного изучения).
И хотя они оба назначены в натуральных числах, как ваш пример, вероятно, в Integer, это все равно два разных множества.

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

Просто когда есть некоторая информация, которая предполагает быть правильной — как у меня с CLR

… вот только это предположение ни на чем не основано.
Вот только у двух переменных, принимающих значение из одного множества (тех же четных чисел) все равно может быть разная семантика.
Разумеется — элементы множества имеют тот смысл, который им дадите вы. Вы можете назначить «0» — как удачу, и «x>0» как код ошибки, у них разная семантика. Это основано на том, что элементы разные. Здесь нет никакого противоречия.

Могу посоветовать статью на эту тему, хотя вообще там про теорию групп, но первые примеры весьма несложные и интересные.
… вот только это предположение ни на чем не основано.
Так можно придраться к любой информации, и придираться бесконечно глубоко. В данном случае тот факт, что я ни в одной статье не встречал упоминания CLR в подобном контексте — достаточное основание, чтобы начать копать лишь при возникновении интереса к .net; а у меня, поверьте, и без того слишком много идей и вещей, которые мне интересны.
Разумеется — элементы множества имеют тот смысл, который им дадите вы. Вы можете назначить «0» — как удачу, и «x>0» как код ошибки, у них разная семантика. Это основано на том, что элементы разные. Здесь нет никакого противоречия.

Я говорю не про элементы множеств, а про переменные, принимающие значения из этих множеств.

В данном случае тот факт, что я ни в одной статье не встречал упоминания CLR в подобном контексте — достаточное основание, чтобы начать копать лишь при возникновении интереса к .net; а у меня, поверьте, и без того слишком много идей и вещей, которые мне интересны.

То, что у вас нет интереса изучать платформу, на которой вы пишете — не проблема платформы (или литературы).
Я говорю не про элементы множеств, а про переменные, принимающие значения из этих множеств.
Если есть две переменные, принимающие значение из одного множества, вероятно их стоит все-таки воспринимать, как переменная, принимающие значения из разных множеств. Вспомните пример с множествами четных и нечетных чисел — они оба принадлежат множеству натуральных чисел.
То, что у вас нет интереса изучать платформу, на которой вы пишете — не проблема платформы (или литературы).
Во-первых, нет интереса «глубоко изучать» — разумеется у меня должно быть понимание, на чем я пишу, иначе я бы не смог общаться с коллегами, с вами, и вообще писать. Во-вторых мой интерес имеет очень косвенное отношение к незнанию обсуждаемого факта о CLR. В моем понимании, у меня более-менее плотное знание языка C#. Это понимание основано на многочисленных статьях. И обнаружившийся пробел в знаниях, помимо нашего с вами разговора, имел бы шанс возникнуть только из желания углубиться в принципы работы .net. Но видите ли — как человек, программирующий на разных языках, и не являющийся даже и близко профессионалом, я больше заинтересован в чтении чего-либо, что поможет при разработке независимо от выбранного языка. Потому книжка про концепты работы C# имела очень мало шансов на прочтение, возможно только если я бы захотел присоединиться к проектами вроде Wine или Mono.
Если есть две переменные, принимающие значение из одного множества, вероятно их стоит все-таки воспринимать, как переменная, принимающие значения из разных множеств.

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

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

Повторюсь, это не проблема платформы/языка, это ваша личная ситуация.
Почему это? Вот у меня есть, грубо говоря, две цены для одного товара в разных магазинах. Почему они представляют разные множества?
Навскидку это можно представить, как множество магазинов, где каждый элемент — пара <товар, цена>. Разумеется цена может брать свои корни из множества вещественных чисел, так же, как и все четные элементы в пред. примере из натуральных. Семантика здесь представлением ее в качестве элемента высшей структуры.
как множество магазинов, где каждый элемент — пара <товар, цена>.

Тогда это не множество магазинов, а множество пар. А дальше нам надо объявлять различные операции над этим множеством — спасибо, нет, обойдемся. Существенно проще признать, что разные переменные одного и того же типа могут иметь разную семантику.
Виноват, немного ошибся. Это будет множество магазинов, где каждый элемент (сиречь магазин) являет множество пар.

И ведь думал же еще, подспудно чувствовал, что должен быть третий уровень, что-то тут не так :D
Это не меняет того, что присваивать придется элементы из множества пар, а следовательно — определять операции над ними и далее по тексту.
Это неправильное мышление… Во-первых в конечном коде у вас все равно есть тот или иной способ понять, к какому товару и магазину относится цена. То есть они связаны.

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

Я не могу вспомнить конкретных примеров сейчас, потому что мне придется вспоминать предшествовавшие события, но приблизительно у меня была ситуация такая: в С++ был метод, принимавший аргументом элемент структуры, на основе чего выполнявший какие-то действия. Назовем его «элемент α» Долго ли, коротко ли, время шло, код писался, многое поменялось, под методом возникла цепочка других методов (как минимум добавился низкоуровневый протокол), и однажды я обнаружил, что где-то внизу надо знать помимо α так же элемент β упомянутой структуры. Пришлось кучу кода перелопачивать — но соль здесь в том, что ничего мне не мешало передать когда-то в тот метод константный указатель на структуру, что никак не повлияло бы на производительность, зато избавило бы от возможных проблем.

Это нередкая ошибка при разработке. Из чужих проблем я могу вспомнить разработчика конвертора Pandoc — тот написал внутреннее представление форматов, которое не включает многих элементов, например понятия страниц. Как результат, в нем нет поддержки, например, «pagebreak», даже при конвертации между поддерживающими форматами — просто при переходе в этот внутренний формат подобные тонкости теряются. Причем, как я понял из его слов, там все настолько плохо, что даже добавление того же «pagebreak» потребует модификации кода сразу всех форматов, в/из которых может происходить конвертация.
Это неправильное мышление…

То есть, не надо придумывать операции над парами вместо чисел?

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

Простите, а мы точно все еще в треде, в котором упоминался C#? Я не знаю там, объекто-ориентированное программирование, вот эти все глупости?

Впрочем, не суть. Предположим, я заменил пару численных переменных («цена в магазине 1», «цена в магазине 2») на пару объектов ЦенавВМагазине (со свойствами Магазин и Цена). У меня все так же есть две разных переменных, хранящих объекты из одного множества, и имеющих разную семантику. Ничего, кроме типа переменных, не изменилось.
То есть, не надо придумывать операции над парами вместо чисел?
Нет, «не надо» всего лишь из-за отличного типа переменной (пара вместо числа) выкидывать пару на помойку. Да, могут быть другие причины, возможно производительность, но я не могу представить, чем операция над элементом в паре сложнее операции над просто элементом.
Простите, а мы точно все еще в треде, в котором упоминался C#? Я не знаю там, объекто-ориентированное программирование, вот эти все глупости?
Я думаю, мой пример не сложно распространить на абсолютно любой язык программирования.
Впрочем, не суть. Предположим, я заменил пару численных переменных («цена в магазине 1», «цена в магазине 2») на пару объектов ЦенавВМагазине (со свойствами Магазин и Цена). У меня все так же есть две разных переменных, хранящих объекты из одного множества, и имеющих разную семантику. Ничего, кроме типа переменных, не изменилось.
Ну практически ничего не изменилось, вы просто перемешали представление как коде, так и в мат. модели: теперь это множество товаров, где каждый элемент — множество пар {магазин, цена}. Что интересно: между пред. и новой моделями сохраняется изоморфизм, т.е. вы можете конвертировать одно в другое без каких-либо потерь.

Я вам очень рекомендую почитать первую главу Д.Кнута «Конкретная математика». Там нет каких-то сложных формул (во второй главе есть, но я именно про первую); Кнут вводит три проблемы из реального мира, и затем медленно и степенно переводит их в мат. модель, и затем решает. Когда-то очень давно я ненавидел математику, и эта глава явилась одной из ступеней, коренным образом изменивших мое мышление. Думаю, вы не пожалеете.
Да, могут быть другие причины, возможно производительность, но я не могу представить, чем операция над элементом в паре сложнее операции над просто элементом.

Тем, что в языке она не определена. Грубо говоря, при попытке компиляции вы получите «no method Max exists that accepts parameters of type (Store, Price)».

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

Вот только в ОО-языках он противоестественнен.

теперь это множество товаров, где каждый элемент — множество пар {магазин, цена}.

Это не множество товаров (потому что товар определяется не магазином и ценой), это множество пар (магазин, цена).

Но это никак не влияет на тот факт, что я могу иметь k переменных, принимающих значения из этого множества, и их семантика будет различаться.
Тем, что в языке она не определена. Грубо говоря, при попытке компиляции вы получите «no method Max exists that accepts parameters of type (Store, Price)».
Вы не можете написать класс, представляющий собой пару?
Вот только в ОО-языках он противоестественнен.
Мне кажется, вы меня не понимаете. В чем противоестественность? Давайте я сформулирую идею, как она у меня в мозгу: «Правило большого пальца — если при передаче данных по методам нет серьезных причин эти данные раздирать, сохранять изоморфичность».
Это не множество товаров (потому что товар определяется не магазином и ценой), это множество пар (магазин, цена).

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

Могу. У него каким-то образом появятся все нужные операции?

В чем противоестественность? Давайте я сформулирую идею, как она у меня в мозгу: «Правило большого пальца — если при передаче данных по методам нет серьезных причин эти данные раздирать, сохранять изоморфичность».

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

Ладно, пусть так. В чем проблема?

В том, что это делает невозможным ваше определение семантики переменной только через множество значений, которое она способна принимать.
Могу. У него каким-то образом появятся все нужные операции?
Вы же можете производить точно так же операции над элементом пары. Если вам надо высчитать процент от цены, вы можете написать что-то типа myPercent(myPair.item1). Это не нарушает идеи, потому что эта операция, так сказать, терминальная, это место где смысл, к какому предмету/магазину принадлежит цена и процент теряется. Вам незачем туда передавать целую пару.
В том, что в норме в ОО-языках даные «передаются» связанными блоками, и единица связности определяется бизнес-смыслом. Но еще чаще данные не передаются, потому что согласно одному из основных правил ООП действия, производимые над данными, должны производиться как можно ближе к этим данным.
Да-да, вот всю мою неопытную часть, пока не набил шишек, я старался следовать подобным идеям — инкапсуляция, не передавать данных больше чем надо, как можно меньше информации, пока в этом нет критической необходимости… Сейчас я уже поднабрался опыта, знаний, и шишек во многих смежных областях, и моя точка зрения несколько отличается: передавать как можно больше информации, пока нет критической необходимости ее ограничить. Возможно это может иметь несколько отличный смысл при работе по сети — безопасность там, все такое — но внутри программы это хорошая идея.
В том, что это делае В том, что это делает невозможным ваше определение семантики переменной только через множество значений, которое она способна принимать. т невозможным ваше определение семантики переменной только через множество значений, которое она способна принимать.
Мы составили две модели, которые, к тому же, представляют собой почти полную кальку с программной реализации. Возможно вы думаете, что должна быть одна модель — но ведь в программе у вас так же будет две модели.

Я правда вам очень рекомендую почитать Кнута — мат. моделирование, особенно при некотором опыте, может открывать совершенно новый взгляд на многие вещи.
Вы же можете производить точно так же операции над элементом пары. Если вам надо высчитать процент от цены, вы можете написать что-то типа myPercent(myPair.item1).

Упс, нет. В этот момент я перестал работать с парой, я стал работать с ее элементом, и с его возможным множеством значений. А дальше, внезапно, я делаю myPercent(myPair.item1) и myPercent(myPair.item2), и с чего вы взяли, что у них одинаковая семантика?

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

Давайте тогда не будет вообще передавать информацию, а будем передавать ссылку на глобальную БД, в которой лежит вся информация — мы же не знаем, что именно понадобится методу?

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

Это как-то противоречит моему тезису о том, что семантика переменной определяется не только возможным набором ее значений?
Упс, нет. В этот момент я перестал работать с парой, я стал работать с ее элементом, и с его возможным множеством значений. А дальше, внезапно, я делаю myPercent(myPair.item1) и myPercent(myPair.item2), и с чего вы взяли, что у них одинаковая семантика?
Вы не улавливаете сути… Как я сказал, надо передавать полную структуру, если что-то не мешает сделать иначе — в данном случае мешает то, что даже, если вы реализуете функцию, как метод класса, она все равно будет внутренне использовать тот же метод, работающий с единичным элементом. Все, конец, это, так сказать, граничная операция.
Давайте тогда не будет вообще передавать информацию, а будем передавать ссылку на глобальную БД, в которой лежит вся информация — мы же не знаем, что именно понадобится методу?
Вы почти уловили. Конечно это не правильно — как я сказал, надо это делать тогда, когда нет каких-то проблем, с производительностью, или семантических… В данном случае куча обращений к БД явно положительно не повлияет.
Это как-то противоречит моему тезису о том, что семантика переменной определяется не только возможным набором ее значений?
У меня ощущение, что мы где-то разошлись в рассуждении :D Нет, не противоречит, более того, именно это я и писал — например множества натуральных и чётных чисел имеют разную семантику, и могут быть рассмотрены, как разные множества.
Конечно это не правильно — как я сказал, надо это делать тогда, когда нет каких-то проблем, с производительностью, или семантических…

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

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

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

Боже, мне так трудно с вами спорить, честно. Я неплохо разбираюсь в мат. моделировании — конечно могло бы быть и лучше, но достаточно хорошо, чтобы обсуждать и пользоваться. Я вам могу отвечать, но вы будете к чему-нибудь придираться, и это может продолжаться до бесконечности. До бесконечности потому, что смоделировать можно что угодно — поверьте, математика не php, у нее нет маркетологов, большинство ее даже ненавидят, как и я когда-то. И чтобы оставаться на плаву веками, и улучшаться, она должна быть необычайно полезной. И что польза не счете, а именно в моделировании, вы можете видеть по постоянному улучшению абстрактных областей — теории множеств, теории категорий, теории групп.

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

Тогда что же определяет семантику переменной?

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

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

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

Семантика чего?

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

Ну то есть когда в задаче на графы пишут u, v ∈ V, и у u и v — разная семантика (одна — стартовая вершина, другая — конечная), то на самом деле, они принадлежат к разным множествам, и постановка задачи неверна?

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

Знаете поговорку про молоток и гвозди?

То, что вы нашли для себя какое-то решение, еще не значит, что (а) предыдущее решение было неверным, (б) ваше новое решение верно и (ц) завтра вы не найдете еще более другого решения.
Семантика чего?
Семантика, суть, смысл элементов некоего множества. Он зависит только от вас, что вы придумаете. Вы можете использовать элементы {1…10} для нумерации бананов на столе, а можете для перечисления лишних нейтронов в материале китайской игрушки.
Ну то есть когда в задаче на графы пишут u, v ∈ V, и у u и v — разная семантика (одна — стартовая вершина, другая — конечная), то на самом деле, они принадлежат к разным множествам, и постановка задачи неверна?
Нет, это аналогично, как сказать, что в некотором множестве чисел нуль стартовый элемент, а 4294967295 — конечный. Разумеется, если вы их все используете для кодов возврата, то их порядок не имеет никакого смысла. А в варианте с графами это не так.
Знаете поговорку про молоток и гвозди?
Если вы про поговорку о микроскопе и гвоздях, то не вижу совершенно никакой связи. И если вам так не кажется, может быть это все-таки вы чего-то не знаете ;)
То, что вы нашли для себя какое-то решение, еще не значит, что (а) предыдущее решение было неверным, (б) ваше новое решение верно и (ц) завтра вы не найдете еще более другого решения.
Я нигде не говорил, что математика — это решение самое лучшее из существующих, оно самое лучшее из известных и перепробованных мной. Вот каверзный вопрос на засыпку: у вас в профиле написано, что вы архитектор, я так понимаю, речь о программной архитектуре. Я из любопытства глянул ваш блог, и там в основном про .net (я правда не лазил глубоко). Я так полагаю, что у вас большой опыт разработки с ООП. А теперь представьте, что вам понадобилось написать что-то на функциональной, декларативной, иной парадигме — скажем, вам просто захотелось чего-то нового, и вы окунулись в другой язык. Как вы будете строить новую архитектуру без объектов и классов? (подсказка: надо смотреть на некие более общие принципы)

Может для вас это не очевидно, но вы спрашиваете совсем элементарные вещи. Я повторюсь — почитайте первую главу Д.Кнута «Конкретная Математика». Именно первая — начиная со второй пойдет ад, но вас это не интересует, почитайте именно первую. Там автор приводит три относительно реальных примера — например про чувака, которому надо найти очередность среди храбрых суицидников, чтобы, оставшись последним, выжить — затем моделирует их, и решает. Там нет сложных формул, и это великолепный ключ к пониманию, как работает мат. моделирование.
Семантика, суть, смысл элементов некоего множества.

Какой-то замкнутый круг. Смысл элементов множества определяет множество. А откуда этот смысл берется в первую очередь?

Нет, это аналогично, как сказать, что в некотором множестве чисел нуль стартовый элемент, а 4294967295 — конечный. Разумеется, если вы их все используете для кодов возврата, то их порядок не имеет никакого смысла. А в варианте с графами это не так.

Кажется, пример не был понят. Вот смотрите, типичная задача на нахождение кратчайшего маршрута: «есть направленный граф с вершинами V и ребрами E [обратите внимание, в этот момент состав двух множеств, их семантика и семантика каждого элемента в нем уже определены], для вершин u, v ∈ V [мы взяли две элемента из множества и присвоили им дополнительные метки; иными словами, мы присвоили двум переменным — u и v — значения из множества] найдите кратчайший путь u → v»

У меток — переменных — u и v отчетливо различный смысл: одна указывает на начало, другая указывает на конец нужного пути. Однако элементы в них принадлежат к одному и тому же множеству V… или нет?

Если вы про поговорку о микроскопе и гвоздях,

Нет, я не про нее.

Вот каверзный вопрос на засыпку: у вас в профиле написано, что вы архитектор, я так понимаю, речь о программной архитектуре. Я из любопытства глянул ваш блог, и там в основном про .net (я правда не лазил глубоко).

Мой что? Если вы про жж-шечку, так я там про работу практически не пишу. А другого блога у меня нет.

А теперь представьте, что вам понадобилось написать что-то на функциональной, декларативной, иной парадигме — скажем, вам просто захотелось чего-то нового, и вы окунулись в другой язык. Как вы будете строить новую архитектуру без объектов и классов?

Эээ… во-первых, с точки зрения архитектуры постановка задачи неверна. Задача на проектирование системы формулируется в терминах необходимых функций, а инструмент выполнения — ООП, или ФП, или еще что-то — выбирается уже под задачу. Подход «а давайте построим какую-нибудь ФП-систему» в корне неверен.

Во-вторых, вы совершенно зря думаете, что в .net нет функциональных языков.

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

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

Ну и да, «некие общие принципы», на которые вы намекаете в моем случае будут взяты в первую очередь из Code Complete, потому что основные принципы управления сложностью одинаковы что в ООП, что в ФП.

Может для вас это не очевидно, но вы спрашиваете совсем элементарные вещи.

Для меня очевидно, что, несмотря на элементарность этих вещей, вы до сих пор не смогли дать ответа, прямо связанного с вопросом.
Какой-то замкнутый круг. Смысл элементов множества определяет множество. А откуда этот смысл берется в первую очередь?
«В первую очередь» есть некоторые предзаданные мат. структуры, например группа под какой-то операцией. За ними есть широко проработанная мат. теория, ваша задача только подставить, к примеру, под элементы этой группы и ее операцию, что-то имеющее реальный смысл. Чем чаще вы будете подобным заниматься, тем легче это будет даваться — в идеале ваш мозг сможет делать классификацию на автомате, как он отличает тапочки от ботинок.
[…] У меток — переменных — u и v отчетливо различный смысл: одна указывает на начало, другая указывает на конец нужного пути. Однако элементы в них принадлежат к одному и тому же множеству V… или нет?
Ах, я понял, что вы хотите сказать. Это хороший вопрос.

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

Отвечая на ваш вопрос: я считаю, что точки u и v принадлежат к одной мат. структуре. В данном случае моих знаний не достаточно, чтобы сказать, как, и можно ли, представить граф именно множеством, но обращаю ваше внимание, что во-первых математика не ограничена Теорией Множеств, во-вторых я даже и близко не профессиональный математик, и в-третьих существует много мат. объектов со схожей структурой — в таких случаях говорят, что они изоморфичны — и факт моего незнания изоморфичного направленному графу объекта никак не подтверждает или опровергает его существование.
Для меня очевидно, что, несмотря на элементарность этих вещей, вы до сих пор не смогли дать ответа, прямо связанного с вопросом.
Правильно сформулированный вопрос — половина ответа.
«В первую очередь» есть некоторые предзаданные мат. структуры, например группа под какой-то операцией. За ними есть широко проработанная мат. теория, ваша задача только подставить, к примеру, под элементы этой группы и ее операцию, что-то имеющее реальный смысл.

Понятно. 90% программистов так не работает и работать не будет. У них есть в первую очередь бизнес-задача, а только потом они порождают модель, которая ее представляет. У вас же наоборот.

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

Вы можете что угодно не думать, однако это стандартное описание, использующееся при описании (и анализе) практически всех графоориентированных алгоритмов, и SSP/APSP — в том числе.

Отвечая на ваш вопрос: я считаю, что точки u и v принадлежат к одной мат. структуре.

Я спрашивал, используют ли переменные u и v элементы из одного множества. Если да, то это противоречит вашему утверждению о том, что переменные с разной семантикой не могут использовать элементы из одного множества. Если нет, то как это сочетается с постановкой задачи?
У них есть в первую очередь бизнес-задача, а только потом они порождают модель, которая ее представляет. У вас же наоборот.
Да не наоборот! Есть предзаданные мат. структуры, но сами по себе, в изолированном вакууме, они не несут никакой пользы! Именно когда у вас возникает эта «бизнес-задача», вы можете вспомнить что-то из этого, придать абстрактным структурам смысл.

Послушайте, у вас правда отсутствует даже базовое понимание предмета. Я не красная кнопка, поэтому поступим так: следующее ваше сообщение в данном треде, на которое я отвечу, будет начинаться со слов «Я внимательно прочел первую главу Конкретной Математики Д.Кнута».
Вы можете что угодно не думать[…]
Благодарю за совершенно сухой, не несущий ни возражения, ни подтверждения, комментарий на мои измышления.
Я спрашивал, используют ли переменные u и v элементы из одного множества. Если да, то это противоречит вашему утверждению о том, что переменные с разной семантикой не могут использовать элементы из одного множества.
Но вот эта цитата показывает, что должно быть вам стоит еще раз перечитать текст, отвеченный прошлой цитатой, особенно ту часть, где я никак не моделировал граф в виде множеств.
Есть предзаданные мат. структуры, но сами по себе, в изолированном вакууме, они не несут никакой пользы! Именно когда у вас возникает эта «бизнес-задача», вы можете вспомнить что-то из этого, придать абстрактным структурам смысл.

Тогда что определяет семантику?

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

Угу, напомню вам два ваших же высказывания:

Для меня семантика переменной имеет математический смысл — это некий элемент, который может принять любое значение из некоторого множества.

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

следующее ваше сообщение в данном треде, на которое я отвечу, будет начинаться со слов «Я внимательно прочел первую главу Конкретной Математики Д.Кнута».

Вы меня, конечно, простите, но
(а) такой книги не существует. Есть книга Concrete mathematics: a foundation for computer science за авторством Грэхема, Кнута и Паташника
и (б) ее первая глава называется Recurrent Problems и не имеет никакого отношения к тому, что мы обсуждаем, в частности — к математическому моделированию (хотя, конечно, она на него опирается)
Такая книга есть, и я рад, что наличие еще двух авторов не ввело вас в заблуждение.

Ее первая глава имеет прямое отношение к базовому пониманию того, как работает мат. моделирование, и которое у вас абсолютно отсутствует.
Ее первая глава имеет прямое отношение к базовому пониманию того, как работает мат. моделирование, и которое у вас абсолютно отсутствует.

Угу. Раз уж мы опустились до таких утверждений, то я могу, приблизительно с такой же степенью аргументированности, сказать, что у вас абсолютно отсутствует понимание того, как работает програмная инженерия в части моделирования прикладных доменов. Почитайте Эванса и МакКоннела.
Нет, не можете, ваше утверждение ничем не обосновано. Мое обосновано десятком сообщений в течении которых вы пытаетесь из меня выбить непонятно что, вероятно какую-нибудь ошибку, чтобы станцевать на ней. И я не могу судить вас за подобное желание, вот только вы не сможете это сделать имея очень приблизительное понимание о предмете разговора.
Меня не интересуют ваши ошибки. Вы спросили, чем отличается глобальная переменная от статического поля. Я ответил — семантикой. Для вас — по вашему утверждению — семантика переменной определяется только множеством принимаемых ей значений. Разубедить вас в этом мне не удалось.

Что ж, в таком случае для вас глобальная переменная ничем не отличается от статического поля. Равно как и две локальных переменных друг от друга.

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

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

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

(отвечу за себя — в приведенном случае я считаю отличие исключительно формальным)
Я считаю, что с точки зрения семантики эти две сущности различны. И их поведение, как следствие, тоже может (и будет) отличаться.
UFO just landed and posted this here
Потому что один — цена в нашем магазине, а другой — цена в магазине конкурента, и в зависимости от их разницы включаются разные бизнес-процессы.
UFO just landed and posted this here
Что такое семантика? Как по мне, это список разумных операций, применимых к данному элементу.

А по мне, семантика — это смысл, который элемент несет в контексте задачи. И если локер и возврат действительно неплохо бы разделять по типам, то вот стартовую и конечную ноду графа по типам разделить уже не выйдет.
UFO just landed and posted this here
Что всё-таки такое — семантика?

Смысл, вкладываемый в определенный объект (символ).

Почему у вас тут стартовая и конечная нода графа имеют разные семантики?

Не графа, а пути в нем.

Давайте немного издалека: есть вектор в n-мерном пространстве, имеют ли его компоненты различные семантики?

Могу иметь. Пока вектор живет сам по себе, его компоненты, конечно же, равноправны. Но стоит нам привязать этот вектор, скажем, к спам-категоризации, как разные компоненты начинают обретать разные значения — одни могут означать слова, другие — сервера-источники и так далее.

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

Потому что одна цена — наша, другая — не наша. Нам недостаточно просто выбрать минимум или максимум, нам надо, если наша цена выше, выбирать другого поставщика, а если их цена выше, писать хвалебные рекламы. Элементы неравноправны.
UFO just landed and posted this here
А что такое смысл-то?

Сорри, базовое понятие. Не, я серьезно, начиная с какого-то момента понятия неопределимы.

Окей, как вы представляете путь?

Как последовательность вершин (или ребер, в зависимости от). Но в задаче указывается просто стартовая и конечная вершина.

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

Не «должна», а «может». Как я и писал.

И у вас не получится взять какую-нибудь норму этого вектора (складывать квадрат яблок с квадратом апельсинов и квадратом серверов-источников не очень круто).

А точно надо?

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

Эмм, наоборот. Для решения какой-то задачи мы можем отобразить все существующие семантики на одно множество вещественных чисел, и временно забить на них. Главное — не забыть потом размапить обратно.

Более того, с ваших позиций вообще любые неравные элементы различны в семантике.

Не элементы. Переменные (и прочие сущности), представляющие элементы. И в этом случае, да, три переменных, представляющих кровяное давление — давление, введеное пользователем сейчас, давление, введенное пользователем вчера, и давление, заданное на заводе как тревожное — семантически различны.
UFO just landed and posted this here
Ну вот, а я и предлагаю считать семантикой переменной набор применимых к переменной операций.

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

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

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

Как вы размапите обратно, если вы забыли?

Грубо говоря:
1. «семантические» входные данные преобразуем в вектор, отдельно сохраняем привязку каждой «семантики» к координате
2. гоняем по вектору (теперь уже с анонимизированными координатами) нужные нам матметоды, получаем результат
3. пользуясь сохраненной на шаге 1 привязкой, раскладываем результат на «семантики»

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

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

Что характерно, это действительно возможно. Просто не факт, что получившийся результат будет «лучше» чем привычное решение с «обычными» типами и условиями.
UFO just landed and posted this here
Рассуждать с позиции теории типов оказывается очень конструктивно, полезно и приятно.

Да, но в ощутимом множестве случаев это невыносимый оверкилл. Заодно профессию придется проредить порядка на три.
UFO just landed and posted this here
Ну вот как-то интуитивно, по наблюдениям за задачами для приходящих.
> Лишь один нюанс: ведь вы же кодите на языке, используя его стандарты, вы не обязаны заботится, как это будет на нижнем уровне реализовано.

Крайне наивная мысль. Как только вы начнёте писать что-то сложнее калькулятора суровая реальность текущих абстракций начнёт вас больно наказывать за эту наивность.
> Без отладчика затем, что у вас приложение работает, а на компе через три кабинета — не очень. И устанавливать туда IDE ради мелочного бага — как-то не комильфо.

RemoteDebugger

> Но дело в том, что в рамках языка решение существует, это стандартный ввод/вывод. Проблема лишь в кривой его реализации под одной из ОС.

Ни то, ни другое не часть языка. Это 2 класса фреймворка. Почему вы прочитали про один, но не прочитали про другой я догадываюсь, но это не аргумент.
«в большинстве языков» — тоже не аргумент.
«я тут уже накостылил, УМВР» — аргумент, но за это и побить могут.
RemoteDebugger
Хех, сколько нового узнаю. Да, я не знал, что студия умеет работать удаленно, интересно, спасибо. Я искал, было дело, дебаггер без IDE для C#, но безрезультатно. Пытался даже gdb подключить, но ничего хорошего из этого не вышло.

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

Если бы вы прочитали документацию, вы бы поняли это и самостоятельно.

Console — это именно консоль, не больше, и не меньше. Trace — это, в свою очередь, именно трейс, механизм, предназначенный разработчиками .net для отладки и диагностирования кода. Во-первых, в него пишут некоторые собственные механизмы .net (например, WCF). Во-вторых, в отличие от консоли, он настраивается на нескольких уровнях — можно полностью отключить его директивой сборщика, можно настраивать вывод в конфиге, можно подключать своих получателей, которые будут работать по произвольной логике; у него есть различные уровни вывода, которыми можно регулировать объем получающихся данных, ну и так далее.

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

Но я вас понял, да.
Trace скорее надмножество Console,

Нет же. Console — это просто упрощенный доступ к предзаданному потоку, вы можете вместо него взять Console.Out и работать с ним как с TextWriter. Он всегда будет делать это, и только это, и ничего, кроме этого. А Trace — это точка входа для диагностики, которая с консолью вообще не имеет ничего общего, кроме того, что один из диагностических приемников умеет писать в консоль.
Вы можете перенаправить вывод терминала куда угодно. Вопрос только в том, что в случае с Console это потребует много дополнительного кода, а в случае с Trace все уже реализовано. Именно поэтому я говорю, что последний — супермножество над первым.

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

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

Именно поэтому я говорю, что последний — супермножество над первым.

Нет. Я не могу с помощью Trace гарантированно вывести текст в консоль.

Теоретически даже возможно, что Console где-то внутренне реализован через Trace, но с точки зрения интерфейса это два разных класса.

Нет, это так не реализовано (и нет, это не возможно, потому что это бы не работало при отключенном Trace).
> Теоретически даже возможно, что Console где-то внутренне реализован через Trace, но с точки зрения интерфейса это два разных класса.

Теоретически, если бы у бабушки были другие половые органы, то она была бы дедушкой. Но, как вам уже сказали, документации ваши домыслы противоречат.
Вы знаете, что такое логическая цепочка, дедукция, индукция? Или по-вашему каждая вырванная из контекста цитата является истиной в себе?
Я знаю даже что такое паралогизм
Ладно бы документации — здравому смыслу.
Блин, парень, вот извини, но эти слова и поддержка предыдущего бессмысленного комментария кроме тебя никого не принижает. Ты правда не видишь здравого смысла, или просто троллишь? Тебе серьезно надо расписать логическую цепочку?
(Мы уже успели выпить на брудершафт когда-то?)

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

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

Ну и да, ваше [не]знание не имеет значения. Вы же не пишете «я могу себе представить, что», вы пишете, что «теоретически возможно». Так вот, невозможно даже теоретически, потому что это нарушило бы семантику и поведение обоих классов. То, что вы этого не знаете, не делает это более возможным.
Здравый смысл всё же у каждого свой. Логика конкретного Trace/C#/nameit описана в документации на Trace/C#/nameit. Дальше или она принимается за здравую, или человек пишет на C# как на PHP.
Я просто разделяю «в документации написано, что Console не реализован через Trace» (чего там, по очевидным причинам, не написано), и «в документации написано ..., из чего мы можем сделать выводы, что...». Вот эти выводы, частично, основаны и на здравом смысле.
Ага, то есть я все-таки должен расписать вам логическую цепочку. Хорошо.

Итак. Логическая цепочка — цепь основанных друг на друге заключений. Умело составленная логическая цепочка называется «здравым смыслом». Здесь я предполагаю, что вам известно, что такое «логика».

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

Рассмотрим теперь примеры того, что не является здравым смыслом. Здравым смыслом не является ожидание решения первоклассником сложных тригонометрических проблем, когда ему только объяснили 2 × 2. Здравым смыслом не является надежда построить в подвале атомный реактор, исходя из находки неких радиоактивных отходов. Не является прыжок с десятого этажа на продуктовый тент «потому что в Assasin's creed и не с таких высот прыгали». Не является надежда выиграть в лотерею с одиннадцатью числами и единственным призом. И не является ожидание вывода, что класс Console не может быть реализован через Trace, человеком, узнавшим о нем от вас, и не получившем от вас важных нюансов, не позволяющих такой реализации.
Умело составленная логическая цепочка называется «здравым смыслом».

Во-первых, нет.

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

Во-вторых, информацию о том, что Trace настраивается и отключается, я вам дал существенно раньше, чем был ваш вывод.

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

Ничто не мешает собеседнику после очередного комментария все-таки пойти, открыть (общедоступную) документацию и узнать о классе из первоисточника. Поскольку для меня как раз такое поведение входит в рамки здравого смысла, я на него и опираюсь.
Это ожидание несколько не соответствует реальности, где у собеседника могут быть более важные дела.
Ну, в таком случае не вижу ничего странного в реакции на утверждения человека, у которого есть более важные дела, нежели разбираться в предмете обсуждения.
> И не является ожидание вывода, что класс Console не может быть реализован через Trace, человеком, узнавшим о нем от вас, и не получившем от вас важных нюансов, не позволяющих такой реализации.

Конечно может, и не через такую жопу код пишут.
Здравым смыслом тут является ненаписание через такую жопу кода в MS.

Ну и здравым смыслом будет не ждать от вас, что вы будете строить разумные логические цепочки не получив разжеванными все нюансы. Если уж вы с первой попытки не стали сами разбираться. Поэтому с вашей стороны совершенно не здраво думать, что от вас требуются логические цепочки для объяснения почему вы делаете неправильные логические цепочки.
(ну да, а лично мой здравый смысл здесь в том, что операции вывода структурированной информации обычно строят поверх потоковых операций вывода, а не наоборот)
Товарищи минусующие, поделитесь за что?
По большому счету, мы откатываемся к концепции майнфрейма. То-есть вместо сети мощных машин, которые выполняют все сами и обмениваются информацией только когда это необходимо для взаимодействия пользователей, мы переходим к концепции 60х (я не говорю, что это плохо. Просто это так) — одна машина и к ней подключены терминалы.
Ну да, терминалы умные — могут отрисовывать графику и JS тянут, но основа — на сервере.
Согласен. История повторяется спиралевидно :)
Не обязательно «основа» — возможно, просто координация и централизованное хранилище.
Всё это справедливо для B2B. В B2C десктоп стремительно теряет позиции. Если раньше покупая новый комп я несколько дней все переносил в новую систему, ставил любимые прожки, тащил данные, то теперь вообще ничего не нужно. Открыл хром, залогинился в гугле и всё.
Я, может, отстал от жизни, но на полном серьёзе — а какой именно софт вы заменили на веб?
Вероятно, гуглдокс и почту.
1. Все мессенджеры уехали в смартфон
2. Офис заменился на Гуглдокс. Иногда MS Office online, если что не открывается
3. Тулзы для записи дисков давно не использую — диски не записываю
4. Фильмы смотрю в основном онлайн. Хотя справедливости ради, набор кодеков СССР установлен на всякий случай.
5. Веб разработка, которой я увлекся последнее время, — онлайн, при помощи Icecoder, развернутого на хостинге.
6. Из тяжелого десктопного остался Qt Creator в котором я иногда что-нибудь пишу на С++
Винда внезапно умеет делать то же с приложениями, поставленными из стора. Да и данные переносить не нужно — OneDrive из коробки.
Очень сильно зависит от личных вкусов.

Мне например, даже если у программы есть одновременно веб и десктоп версии обычно десктопная удобнее — наглядный пример Evernote. Там очень постарались сблизить их по функционалу, но все равно разница есть и сильная.
Здравствуйте, меня зовут Никита, и не так давно я представлял доклад на Java конференциях JEEConf и Joker: «Делаем нативные клиенты на Java». В начале доклада, я говорю о преимуществах нативных клиентов (и десктопных в частности) перед веб-клиентами. Может вам будет интересно посмотреть :). Что-то пересекается с вашими мыслями, что-то дополняет.

Кроме того, я считаю, что в ближайшее десятилетие мы будем наблюдать слияние веба, мобайла и десктопа (и уже на самом деле наблюдаем) во что-то единое, включающие преимущества каждого из подходов и лишенное недостатков, специфичных каждому подходу. В этом слиянии, по моему мнению, роль JavaScript не будет главенствующей. Об этом я говорю здесь и здесь и экспериментирую с темой здесь.
У меня есть опыт создания wxPython приложения — быстро «с нуля» — можно сделать достаточно функциональное приложение (работа с сокетом, графики, экспорт, БД). Есть ещё QT.

Но мне кажется будущее всё же за github.com/nylas/N1 типа приложениями (технологии Electron, React, Flux). Кросс-платформенное, код на CoffeeScript, покрытие кода тестами.

Скриншот десктопного приложения «Nylas N1»
Но мне кажется будущее всё же за github.com/nylas/N1 типа приложениями (технологии Electron, React, Flux). Кросс-платформенное, код на CoffeeScript, покрытие кода тестами.

Зачем, если есть QML?
Насколько я понимаю QML это не html/js/css, хотя возможна работа с JavaScript?

В Electron приложение работает в контексте Chromium (и плюс Node.js), то есть приложение получается как «стандартное» одно-страничное html/css/js приложение. Что для людей имеющих опыт работы с web — упрощает вхождение.

Не знаю как со спеками в QT/QML/JS приложениях, было бы интересно посмотреть на какое-нибудь реальное приложение.
QML работает внутри обычного нативного приложения, обрабатывается специальным движком, рендерится через OpenGL, декларативность-реактивность из коробки, скриптовать можно на JS, расширять на С++.
Спасибо.

Но всё таки было бы интересно посмотреть на папку тестов, в реальном приложении реализованном на QT/QML.

В Nylas N1 я посмотрел эту папку, и видно что бОльшая часть приложения (если не вся) покрыта тестами, значит инфраструктура Electron/CoffeeScript позволяет разрабатывать систему с хорошим тестированием. А для больших приложений — всё же стабильность работы при развитии становится не последним фактором.
В QML для этого есть специальный модуль: doc.qt.io/qt-5/qtquick-qtquicktest.html

А будете Вы его использовать или нет, это уже дело Ваше.

Кстати, на заметку, QT = QuickTime, Qt = Qt.
ок, Qt/QML.

Всё таки, хочется практический пример приложения реализованного на данной технологии и с тестами GUI.

Я вот нашел GammaRay на github и папка тестов, но вроде там интерфейс не тестируется.
В Electron приложение работает в контексте Chromium (и плюс Node.js), то есть приложение получается как «стандартное» одно-страничное html/css/js приложение. Что для людей имеющих опыт работы с web — упрощает вхождение.
Правильно ли я понимаю, что десктопность заключается только в инсталляторе, возможности работы оффлайн и exe, который можно запустить, а само приложение, по сути, запускает веб-браузер с локальным сайтом, и скорость работы у него соответствующая?
Да, все именно так. Точно так же и nwjs работает: пишется обычное веб-приложение, но с возможностью использования node, далее пакуется в архив и кладется рядом с nwjs.exe, он при запуске его подхватывает, распаковывает на диск (вот ту да, не очень красиво сделано) и запускает нужный файл или файлы.
Гибридные приложения для смартфонов на базе Cordova работают по такой же схеме.

Но с ростом производительности смартфонов — вопросы производительности «гибридной схемы» уходят на второй план. А стоимость разработки и сопровождения — более привлекательны для гибридных приложений.

В случае с десктопными — та же история. Конечно, на базе Electron не получится сделать FreeCad (реализованный на Qt/PySide).

Но есть ниши где Electron/NW приложение будет оптимальным выбором — достаточно по производительности, стоимость разработки и сопровождения.

Для примера, вот список приложений реализованных на базе Electron, оттуда:

Я кстати, установил недавно Atom на свою Ubuntu (Linux Mint) — и вполне доволен. И к вопросу покрытия тестами приложения, вот папка spec в Atom.
Понимаю автора, но как Linux юзеру мне приятно, что в лагере Windows таки начали осозновать, что время уходит.
Кроссплатформенные приложения нужны.
QT5 + QML = одно приложение под любую платформу любой девайс.
QT5 + QML = одно приложение под любую платформу любой девайс.
Рекламный буллщит. Я много лет писал на Qt, однажды попробовал вооружившись QML с этим что-то приличное сделать на Андроиде… Да, это работает, но это получается чертова закрытая коробочка, практически без связей с ОС. То же самое на Java+ADT ну неимоверно проще и надежнее делается, даже если почти не знаешь Java.
Саму инсталяху можно проверить антивирусом.

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

AppStore это a) one click installation of native app и b) well known place to get it.

Т.е. если раньше говорилось что мы делаем web app потому как не требует инсталляци, то сейчас дело доходит до совсем странного: на одном из проектов начальство попросило обернуть web app в PhoneGap (т.е. сделать из него как бы native) чтобы его можно было выложить в AppStore.

При этом куча времени убилась на то чтобы обойти ограничения web app и его sandbox модель.
Почему такой ажиотаж вокруг поста? Да, есть те, кто пишут десктоп под винду. В чем новость? Фотография не отменила живопись, телевизор — театр, а веб — десктоп.
Фотография отменила живопись на 99.9999%. Телевизор отменил театр на 100% — все театры на дотации либо правительства, либо меценатов. Web — это микроскопическая платформа, своего рода пародия на десктоп. Игры — десктоп, наука и техника — десктоп, бухгалтерия — десктоп. Web — бесплатно, но с рекламой, т.е. для бедных обывателей.
То ли вы промахнулись комментарием, то ли я не понял его суть.
Фотография отменила живопись на 99.9999%.

Расскажите это Пикассо, Поллоку, Кляйну, Уолтону Форду и далее по списку.

Телевизор отменил театр на 100% — все театры на дотации либо правительства, либо меценатов.

То-то я за этот год ни разу не смотрел телевизор, зато был на нескольких театральных постановках.

Web — это микроскопическая платформа, своего рода пародия на десктоп.

То-то подавляющее большинство LoB-систем, которые я вижу — веб-ориентированные.

Web — бесплатно,

То, что вы пользуетесь только бесплатными сервисами, совершенно не означает, что других не существует.
Я тоже программер формочек. Хотя и сервисами, и супер-дупер серверами часто занимаюсь.
Но с аргументацией поспорю по пунктам:
Начнём с того, что новые приложения хорошо бы грузить с маркета и будем плясать от этого
1. Необходимость интернета ±
Интернет маркету таки нужен. Хотя и не всегда. И уж точно нет большой необходимости в стабильном интернете во время работы обычного десктопного приложения. Но иногда приложения не свсем десктопные.
2. Простое лицензирование +
Но не по описанным причинам. А из-за простого лицензирования на маркете
3. Выглядит одинаково ±
Любой софт когда-то обновляется. Но с десктопным софтом у вас обычно есть какое-то право выбора.
4. Расширение (-)
Возможности расширения десктопного софта такие же, как и у браузерного. Просто страницеписатели очень редко этим заморачиваются.
5. Софт работает (-)
Браузеры — более стандартизованная среда, чем программное окружение операционных систем.
6.Быстрый старт +
Тем более с софтом с маркета
7. Работает быстро +
Но опять не по тем причинам.
Нативные байтики давно уступили место прекомпиляции. Но она всё--равно намного шустрее скриптов. В принципе, она одинакова по скорости и на сайтах с движком в виде плагина на платформах Java или .NET, только я давно таких сайтов не видел.
Ну и конечно доступ к локальным данным всегда шустрее Интернета.
8. Контроль безопасности (-)
Нормальные антивирусы одинаково надёжно контроллируют и локальные программы и веб-трафик.
9 Стабильность платформы ±
Я бы согласился, не меняй MS кардинально платформу каждый год. Но даже и с этим, и с в принципе настолько же стабильным зоопарком сторонних контролов, десктопная среда стабильнее в реализации.
Вот только по какой-то странной причине приложения тех же twitter и facebook намного менее глючны в браузерном варианте. Криворукость программ маркета Windows выше приемлемой. Даже косынка — и та глючит.

Любому софту есть место.
Но меня очень раздражает, когда десктопный софт обзывают устаревшим и требуют знания этих ваших «MVC 4» и скриптовых движков. На Ведроиде или Огрызке вы какой софт обычно выбираете, браузерный или с маркета? Конечно, с маркета.
В Windows есть вирусы, в Linux нет вирусов. Это решает все дело. Да, и в Windows можно работать так, что у вируса просто не будет шансов, но ведь большинство людей так не работают. И на облачном серваке нет вирусов — он так же на Linux. Те, кто хоть частично ушли в Linux возвращаться очень не хотят — а вдруг вирус! Тем, кто работает, никакие плюшки не нужны, им нужна их работа без вирусов.
> Да, и в Windows можно работать так, что у вируса просто не будет шансов, но ведь большинство людей так не работают
В Linux тоже можно работать из-под рута, чтобы дать шанс зловредам. Проблема-то не в операционке, а в культуре пользователей. Пока Linux используют только опытные пользователи, платформа надежна. Если вдруг её популяризуют для «народных масс», то она и для вирусописателей станет привлекательной, и линуксовая среда размножения для вирусов сразу же появится.
Это говорят уже не один десяток лет, но это чистая ложь. В linux окно не принадлежит системе, а принадлежит процессу, в linux не летают сообщения — тут вирус внедрить принципиально сложнее. Но экран linux медленнее экрана windows как раз по этой причине — графика windows в системе, а не у процесса. Медленно, зато без вирусов. Как только скорости компа стали тянуть видео на linux, так сразу linux стал реальной альтернативой windows. Но компы пока не тянут видео-игры под linux, а игры — 90% использования компа.
Отлично, вы описали атаки на win32k.sys. Больше никаких подсистем в ОС не бывает? PERF_EVENTS, например? Я уж не говорю о том, что хакеры работают уже на уровне виртуализации в процессоре.
В линукс ядро восстановил с флешки и вирусы закончились все и сразу. Да, данные утрачены, ну так копии делают не только от вирусов, но и от поломок диска. Ага, можно еще на материнке переписать биос, и на диске то же, тупые производители еще систему восстановления придумают, которую вирус перепишет и будет сам себя восстанавливать. Когда нибудь, возможно, к тому времени ядро будет проверять все эти биосы и выдавать злобное предупреждение.

Дело не в том, что никто не знает как сделать — все знают, дело в том, что в линукс согласились разделить ядро и все остальное.
Когда нибудь, возможно, к тому времени ядро будет проверять все эти биосы и выдавать злобное предупреждение.


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

Дело не в том, что никто не знает как сделать — все знают, дело в том, что в линукс согласились разделить ядро и все остальное.

А теперь почитайте ещё и про микро ядро и про то что в Windows ядро отделено от Пользовательских процессов.
Драйверы в Линуксе крутятся на 1 или 2 кольце (да-да, 32), или как везде — вместе с ядром? Так-то и в MS то же самое. То, что у вас окна управляются со стороны ядра, ничем не отличается по концепции от того, что у вас НМД управляется со стороны не пользовательского процесса.

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

Если закладка есть «в этих самых», то ядро уже ничего не будет проверять: закладка стартует раньше и «испортит» ваше чистое ядро.
Вы так пишете, будто бы особенности реализации оконной системы — основное уязвимое место, используемое для внедрения неприличного кода. Можно найти процесс, который чувствителен к атаке по переполнению буфера, например. Можно найти демон с уязвимостью. Да, сейчас найденные уязвимости латаются оперативно. Но это ровно до той поры, как линукс станет популярным у пользователей, которым начхать на заплатки к ОС.

> Как только скорости компа стали тянуть видео на linux, так сразу linux стал реальной альтернативой windows.
А что, в статистике популярности десктопных ОС за последнюю дюжину лет что-то существенно изменилось, кроме смены версий виндовсов и макосей? Хм… вроде я ничего не путаю, не изменилось: http://www.softrew.ru/uploads/posts/2015-02/1422939374_statistics-desktop-operating-system-in-five-years.png
Чем больше компьютеров — тем больше процент их использования для игр, никто в линуксе не играет, а для работы линукс растет по маленьку. Офис вот появился приличный, броузер — что еще человеку надо? Уязвимостей в линукс на два порядка меньше по принципиальным причинам. Файлы не блокируются никогда — все можно увидеть под рутом.
Вы такое вот сейчас серьёзно написали? Или я правильно понял, просто потроллить?
Файлы не блокируются никогда — все можно увидеть под рутом.

Что-что простите? Что означает «блокируются»?
Да уж, на хабре читатели отличаются высоким уровнем тупости вкупе с высоким уровнем самооценки. Блокируются — зависит от операционки, но, например, заблокированный файл удалить нельзя. Ой, файл связан с запущенным сервисом и потому он не удаляется — в линуксе такого дурдома нет.
Да уж, на хабре читатели отличаются высоким уровнем тупости вкупе с высоким уровнем самооценки

Самокритично.

Стоп, про удалить — это и так понятно, но вы же написали «все можно увидеть». Интересно значение «блокируются» именно в связке со словом «увидеть», а не открыть, изменить или удалить.
Да, кстати, в Win такие файлы можно удалить при помощи handle.
Чем Вам это всё поможет, от, например, вирусов типа локеров, которые юзер из-за социальной инженерии сам скачает, сам запустит, дальше оно все его документы пошифрует и потребует денег? Просто сейчас пользователи Linux достаточно грамотны и с ними это не прокатит, но если Линукс будет у 100к домохозяек — станет рентабельно эти вирусы писать и распространять.
А если диск сломается? Восстановление с копии. «Социальная инженерия» в линукс не работает потому, что линукс удобно использовать под простым пользователем, а виндоус под простым пользователем без прав — полнейшая ерунда. Никто под виндоусом не сидит без прав администратора, даже квалифицированные пользователи. Андроид пошел по пути windows и стал таким же вирусным, все ждут когда же убунту разродится версией для телефонов — но у них столько денег нет.
Помните историю про солонку в столовой и хакера? Вот это оно самое. Линукс — это столовая с аутентификацией по паролю и отпечаткам пальцев, с защищенными солонками прикрученными к столам с дозаторами, фильтрами ядов и сигнализацией. Очень круто, но как-то такие столовые массово не прижились. Люди предпочитают обычную солонку, даже при том, что это не очень безопасно.
Никто под виндоусом не сидит без прав администратора, даже квалифицированные пользователи

Так уже давно есть UAC, который выводит предупреждение при запуске программ с админскими правами.

Чем это отличается от ввода пароля админа в линукс?
Справедливости ради, отличается. Когда вводят пароль, пользователи хоть иногда, но думают, в отличие от нажатия кнопки «Yes» на выскочившем окошке.
У меня коллега говорил про подтверждение повышения прав в маке: да подтверждай не глядя, это ж не винда. И даром, что там пароль.
Все то же самое: работаете из-под обычного пользователя, при необходимости запускаете sudo вводите пароль административной записи.
«Социальная инженерия» в линукс не работает потому, что линукс удобно использовать под простым пользователем

СИ в Линуксе не работает потому, что на рынке доминирует Windows. Соответственно, в среднем, пользователи Линукс более сведущи.
Web — это моська, которая надувает щеки чтобы стать толще десктопного слона. А опус состряпал недалекий web-овец, чтобы от имени десктопника пожаловаться на злую судьбу.
Десктоп, веб…
Да, я пишу на десктоп. Почему? Смотря какая задача. Иногда и не пишу.
Просто оценим задачу:
1) Эту задачу уже решали? И насколько удовлетворительное решение?
— Я, например, не находил RPG-системы (типа Habbit); образовательные системы. Или цена лицензии в килобаксах для моей дополнительной задачи с ценой в несколько килорублей несовместима — тут либо аутсорсинг, либо отказ от задачи, либо разработка инструмента.
2) Потенциальный пользователь может воспользоваться интернетом?
— Предприятия, бюджетные организации обычно имеют ограничения (или вообще изолированную сеть для безопасности).
3) Какие требования по ресурсам?
— Для тех же игр и ресурсоемких приложений (видеообработка, 3D-моделирование) веб может быть неприемлимым решением, особенно при небольшой скорости канала. Хотя редактирование документов вполне возможно в вебе (выше были примеры).
4) На какие системы? Какой планируемый охват по пользователям? Какова их подкованность?
— Как бы не был симпатичен мне .NET, но необходимость разворачивания на клиенских компьютерах неопытных пользователей приводит к тому, что изначально собирается максимально портабельная система. Задача стоит вообще на Linux делать.

И уже из оценки этих и других параметров выбирается язык, на какие системы, вид приложения (веб, клиент, клиент-сервер, десктоп или другие вариации). Вариант подрядчика не рассматриваю (там как сказали, так и делаем, если это возможно).

Теперь по самой статье:
=> Десктопный софт работает без интернета.
Как плюс: Порвали оптику. Все, я даже локальные копии через онлайн-приложения не смогу редактировать. Онлайн-приложения становятся недоступными. Иногда простой = убытки. А вот десктоп-приложение остается работоспособным.
Как минус: функции интернета могут отсутствовать напрочь, например, недоступность совместного редактирования. Сюда же невозможность расшарить средствами приложения.
=> Лицензирование десктопного софта просто и понятно.
Как плюс: есть типа LGPL и я могу использовать как угодно на свой страх и риск. Или заплатить и получить что нужно, иначе получить обратно свои финансы. И завтра получу тоже самое, что и вчера.
Как минус: есть ShareWare, где я ничтожество, не имеющее никаких прав, да и которое должно еще и заплатить за кота в мешке, а разработчик не несет никакой ответственности. Оно даже может быть трояном (делать вид, что имеет полезную функциональность). У автора — вариант про «тыкву».
=> Декстопный софт выглядит одинаково каждый день
Как плюс: Привыкание и дальнейшее удобство. У автора это описано.
Как минус: приложение не сможет добавить новую или улучшить функциональность. Проблема обновления в win-системах стоит остро, т.к. там каждый использует свой велосипед, а иногда обновление возлагается на пользователя, т.е. вручную. Часто новая версия требует вообще покупки новой лицензии (иногда со скидкой, для владельцев лицензии на старую версию).
=> Десктопный софт доступен для расширения.
>>> «Нет, такое, конечно, по лицензии часто делать нельзя, но если очень надо, вот вопрос жизни и смерти человечества, то это по крайней мере физически возможно.»
Тогда с таким оправданием можно взломать сервер с сайтом, что ли. Хотя да, это сложнее и больше свидетелей, особенно если заявиться с ломом наперевес в дата-центр если удаленно не получается. А так — сам вопрос расширяемости под большим вопросом на коммерческих системах, особенно если там это не предусмотрено лицензией и встроенными средствами. Так же с сайтами. Тут полное равенство.
=> Десктопный софт работает
Как разработчику полный доступ, это конечно, хорошо. Но как отреагирует пользователь на кеулоггер или всякие «дополнительные менеджеры по управлению дополнительными менеджерами»? (доп.софт, который любит ставиться в Windows-системах, если не найти и не удалить секретную галочку).
А вот Flash, Java (особенно второе) требуют как раз системы, которые устанавливаются. Иногда они могут запросить .NET, библиотеки С++ и прочие фреймворки, которые ни разу не устанавливаются вместе с приложением. Хорошо если буду в коплекте в другой папочке, чаще всего вообще просят скачать с оф.сайта, а там offline-установщик не всегда можно найти.
Тут относительное равенство, т.к. обычный сайт не просит ничего дополнительного, как и обычное приложение.
=> С декстопным софтом быстрее начать работать
Как минус: если надо быстро отредактировать документ, то скачивание офиса, его установку — это уйма времени. А онлайн-инструмент сделает это куда быстрее.
Как плюс: если надо редактировать много документов, то использование онлайн-инструмента может быть затруднительно, т.к. это авторизация, маленький канал, пинг. Сайт может вообще перейти на новую версию, а в работе нужна вообще старая версия для совместимости.
=> Десктопный софт можно контролировать.
Внешнее поведение — ни разу. Максимум — запустить в VirtualBox. Установка рекламы не фиксируется антивирусом (особенно 10 рекламных ярлыков или внутренние всплывающие сообщения).
А вот по поводу контроля документов, тут да. Конфендициальность и анонимность может быть гарантирована (если вырубить интернет).

Я удивлю, но многие мобильные и веб-приложения разрабатываются на десктоп-приложениях.
Отступ про делфи (VCL) — постоянно что-то модифицируется, дополняется, открываются новые технологии, поэтому тут тоже не все устаканилось. Часть технологий переходит из других языков, я молчу про переезды с одной парадигмы на другую (с компиляции в асм код на NET, а потом еще куда-нибудь)

Послесловие:
В зависимости от задач выбирается инструмент. А дальше зависит от доступности инструмента. Если слабо доступен, то ищутся люди, которые выбрали инструмент и под него ищут задачи.