Конкретно эта "интересная статья" ничего нового, в принципе, не рассказала.
Зато глубинное гугление намекнуло, что в отличие от строки и массива, Stream (и его производные, типа MemoryStream) сериализируется в буфер обмена правильно.
Так что в целом — спасибо за наводку. В следующий раз надо лениться чуть меньше :)
На самом деле MakeLink() не должно быть отдельной функцией вообще, т.к. больше нигде не нужна в принципе.
Но хотелось для наглядности все-таки разделить формирование буфера и запихивание его в буфер.
Одних оконных библиотек недостаточно, чтобы заявлять о полноценном (и удобном) десктоп-программировании на каком-либо языке.
Как у него с интероперабельностью? Сможете, например, расширение для эксплорера написать? Или без лишнего геморроя вызвать нативную функцию?
Что из себя будет представлять такая программа? Текстовый скрипт и кучу дополнительных файлов по причине отсутствия понятия "ресурсы"? Или zip-архив, вроде jar-а, который будет распаковываться во временную папку?
Что будет с безопасностью? Тот же .NET и Java имеют представления о разрешениях и запретах для кода. Чем и как скоро может ответить PHP?
Короче, тонкостей тут масса. Поэтому не думаю, что все будет так уж "легко"... ;)
Очень интересно по первому пункту, как вы себе представляете, например, PHP в качестве языка разработки десктопного приложения? И какую он может составить конкуренцию .NET/Java? А вы себе хорошо представляете, скажем, драйвер на Ruby? Мое мнение — для десктопных компонентов ситуация вряд ли скоро изменится.
Нереляционные базы данных, конечно, удобны, однако и у них есть свои ограничения. Например, не видел еще ни одного случая использования такой базы для манипулирования большими объемами данных. Если знаете таковые, то интересно было бы на них посмотреть.
С вебом вообще все неоднозначно. Время покажет.
... даже две альтернативы рабочей среде Windows, которые надёжнее, безопаснее, эффективнее и дешевле?
Альтернативы-то есть, но вот по всему остальному — очень спорно. Хотя бы потому, что для централизованного администрирования форточек есть инструментарий. А есть ли групповые политики для убунты (вопрос скорее риторический)? А для макоси (OS X Server не щупал, не знаю)?
Дешевле? Само по себе — возможно, но требует переквалификацию персонала. В какую сумму это выльется в итоге — вопрос неоднозначный. А неоднозначности обычно стараются избежать.
Эффективнее? Ну возможно. А возможно — и нет. К тому же, есть ли весь нужный софт под эти платформы? Та же 1С:Бухгалтерия, например? Или еще какой-нибудь подобный софт. В какую сумму и сроки выльется переход?
Надежнее и безопаснее? Опять же — вероятно. Но кто это заметит? Бухгалтерша? Сотрудник отдела кадров? Да им это триста лет не нужно! Того, что можно получить за счет грамотного администрирования домена, им хватит за глаза. Винда уже не та, что была 10 лет назад, и не падает каждый час. А большего им просто не нужно.
нуллэйбл поля с внешним ключем это defected by design
Почему же сразу заведомо кривое? Просто запись "никуда не ссылается", а не "ссылается на что-то, что нужно считать пустотой". Во-первых, это экономит место и время (отсутствие лишних джойнов/условий), во-вторых, просто кажется мне более правильным.
Во втором случае не nullable поле при попытке вставить в него нулл ругнется foreign key, и вы сразу увидете что где-то есть ошибка, или в передаче данных или в их форировании.
Ну, ругнется-то не FK, а NOT NULL CONSTRAINT, но это не принципиально :)
Тот факт, что NULL может появиться при формировании данных — это я еще могу понять. Ошибки валидации бывают. И их необходимо отлавливать и исправлять, если найдутся. Как, впрочем, и любые другие ошибки.
Но вот про передачу данных — что-то не верится, что сетевой пакет может исказиться так, что ровно одно поле поменяет значение, а в остальном целостность запроса не пострадает. К тому же, наверняка у запроса есть CRC (не говоря уже, что может быть шифрованное соединение, а там любое отклонение от нормы наверняка угробит запрос).
Ну, и проверки входных данных, если таковые нужны, я предпочитаю делать в хранимых процедурах, максимально изолируя пользователя от самих таблиц.
Стоп. Чем отличается nullable-поле с внешним ключом от не-nullable-поля с внешним ключом и специальным значением?! Только тем, что во втором случае запись не вставится, если будет передан NULL. И если запись все-таки создана, то разделить "непередачу" от "умысла" нереально.
Касательно конкретной системы: данные там поступают вполне из одного источника, на ключевых полях есть дефолты на специальное значение. Так что без вариантов :)
Ну да, так и делаем :)
Такие справочники обычно небольшие (типа всяких настроечных таблиц с путями, константами и прочими application-wide данными) и на производительность выборки из них не влияют.
Числа сравнивать быстрее. Соответственно, на больших выборках быстрее работают джойны, индексы и прочие фильтры.
Кстати, id не обязательно числовой. Еще довольно распространенная практика делать id guid-ом, чтобы не было конфликтов, например, в merge-репликациях. Опять же, guid-ы все равно быстрее сравнивать, чем строки.
Зато глубинное гугление намекнуло, что в отличие от строки и массива, Stream (и его производные, типа MemoryStream) сериализируется в буфер обмена правильно.
Так что в целом — спасибо за наводку. В следующий раз надо лениться чуть меньше :)
Но хотелось для наглядности все-таки разделить формирование буфера и запихивание его в буфер.
Не сразу же писать про глюки маршалинга массивов в System.EnterpriseServices при DCOM-программировании... ;)
Как у него с интероперабельностью? Сможете, например, расширение для эксплорера написать? Или без лишнего геморроя вызвать нативную функцию?
Что из себя будет представлять такая программа? Текстовый скрипт и кучу дополнительных файлов по причине отсутствия понятия "ресурсы"? Или zip-архив, вроде jar-а, который будет распаковываться во временную папку?
Что будет с безопасностью? Тот же .NET и Java имеют представления о разрешениях и запретах для кода. Чем и как скоро может ответить PHP?
Короче, тонкостей тут масса. Поэтому не думаю, что все будет так уж "легко"... ;)
Нереляционные базы данных, конечно, удобны, однако и у них есть свои ограничения. Например, не видел еще ни одного случая использования такой базы для манипулирования большими объемами данных. Если знаете таковые, то интересно было бы на них посмотреть.
С вебом вообще все неоднозначно. Время покажет.
Альтернативы-то есть, но вот по всему остальному — очень спорно. Хотя бы потому, что для централизованного администрирования форточек есть инструментарий. А есть ли групповые политики для убунты (вопрос скорее риторический)? А для макоси (OS X Server не щупал, не знаю)?
Дешевле? Само по себе — возможно, но требует переквалификацию персонала. В какую сумму это выльется в итоге — вопрос неоднозначный. А неоднозначности обычно стараются избежать.
Эффективнее? Ну возможно. А возможно — и нет. К тому же, есть ли весь нужный софт под эти платформы? Та же 1С:Бухгалтерия, например? Или еще какой-нибудь подобный софт. В какую сумму и сроки выльется переход?
Надежнее и безопаснее? Опять же — вероятно. Но кто это заметит? Бухгалтерша? Сотрудник отдела кадров? Да им это триста лет не нужно! Того, что можно получить за счет грамотного администрирования домена, им хватит за глаза. Винда уже не та, что была 10 лет назад, и не падает каждый час. А большего им просто не нужно.
Именно поэтому русская Виста была немедленно снесена и заменена на английскую.
Не любит вас хостер... :)
Только «прийти», а не «придти» — поправьте, пожалуйста.
Ну, ругнется-то не FK, а NOT NULL CONSTRAINT, но это не принципиально :)
Тот факт, что NULL может появиться при формировании данных — это я еще могу понять. Ошибки валидации бывают. И их необходимо отлавливать и исправлять, если найдутся. Как, впрочем, и любые другие ошибки.
Но вот про передачу данных — что-то не верится, что сетевой пакет может исказиться так, что ровно одно поле поменяет значение, а в остальном целостность запроса не пострадает. К тому же, наверняка у запроса есть CRC (не говоря уже, что может быть шифрованное соединение, а там любое отклонение от нормы наверняка угробит запрос).
Ну, и проверки входных данных, если таковые нужны, я предпочитаю делать в хранимых процедурах, максимально изолируя пользователя от самих таблиц.
Касательно конкретной системы: данные там поступают вполне из одного источника, на ключевых полях есть дефолты на специальное значение. Так что без вариантов :)
Такие справочники обычно небольшие (типа всяких настроечных таблиц с путями, константами и прочими application-wide данными) и на производительность выборки из них не влияют.
Кстати, id не обязательно числовой. Еще довольно распространенная практика делать id guid-ом, чтобы не было конфликтов, например, в merge-репликациях. Опять же, guid-ы все равно быстрее сравнивать, чем строки.