<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Альберт Эйнштейнов: заметки с тегом it</title>
<link>http://depperte.ru/blog/tags/it/</link>
<description>Альберт Эйнштейнов</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Альберт Эйнштейнов</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Использование полей с экранируемыми символами в Elasticsearch</title>
<guid isPermaLink="false">42</guid>
<link>http://depperte.ru/blog/all/ispolzovanie-poley-s-ekraniruemymi-simvolami-v-elasticsearch/</link>
<pubDate>Wed, 22 Nov 2017 09:50:10 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/ispolzovanie-poley-s-ekraniruemymi-simvolami-v-elasticsearch/</comments>
<description>
&lt;p&gt;Если в наименовании полей индекса используются экранируемые символы, например, такие как ’:’, то при обращении к ним напрямую Elasticsearch вернет ошибку.&lt;/p&gt;
&lt;p&gt;Вот такое обращение:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;...
ctx._source.petrel:ProjectName = ...
...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;вызовет ошибку с сообщением типа:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;quot;unexpected token&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Для преодоления такого поведения нужно обратиться к полю через специальную переменную &lt;i&gt;_source&lt;/i&gt; и передать наименование поля:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;_source[&amp;#039;petrel:ProjectName&amp;#039;]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Во пример запроса на обновление текстового поля с условием:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;POST petrel/_update_by_query
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;match_phrase&amp;quot;: {
      &amp;quot;petrel:ProjectName&amp;quot;: &amp;quot;Талахский гоизонт&amp;quot;
    }
  },
  &amp;quot;size&amp;quot;: 10000,
  &amp;quot;script&amp;quot;: {
    &amp;quot;source&amp;quot;: &amp;quot;ctx._source[&amp;#039;petrel:ProjectName&amp;#039;] = &amp;#039;Талахский горизонт&amp;#039;&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Обновление прошивки Garmin Nuvi</title>
<guid isPermaLink="false">40</guid>
<link>http://depperte.ru/blog/all/obnovlenie-proshivki-garmin-nuvi/</link>
<pubDate>Fri, 03 Nov 2017 23:27:58 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/obnovlenie-proshivki-garmin-nuvi/</comments>
<description>
&lt;p&gt;Иногда случается, что навигатор перестает загружаться. Обычно это происходит, если во время обновления прошивки произошел какой-то сбой. У меня именно так и случилось — завис Garmin Express при обновлении базы данных FM-трафика. И устройство перестало загружаться, зеленая полоска загрузчика зависает не дойдя до конца. Hard reset не помог, компьютер перестал видеть устройство, соответственно доступа к памяти не было.&lt;/p&gt;
&lt;p&gt;В результате поиска нашел вот такое &lt;a href="http://www.alfessa.net/56/vosstanovlenie_fajlovoj_sistemy_garmin.pdf"&gt;руководство&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Как выглядит процесс восстановления рабочей прошивки:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Первым делом нам потребуется прошивка для навигатора. У меня навигатор Garmin nuvi 1340. Все прошивки находятся на официальном сайте Garmin, но с ходу найти их не так просто. Поэтому воспользуемся вот таким &lt;a href="https://www.gpspower.net/garmin-receivers-firmwares/205865-garmin-devices-software-versions-summaries.html"&gt;перечнем&lt;/a&gt;. Он находится на сайте GPSPower и возможно понадобится предварительная регистрация на нем.&lt;/li&gt;
&lt;li&gt;Дальше нам необходимо восстановить доступ к памяти, для этого потребуется две сторонние программы: GarminCure3 и Updater. Они идут вместе и их можно скачать с того же &lt;a href="https://www.gpspower.net/attachments/garmin-receivers-firmwares/95265-garmincure3-tool-new-way-create-cure-firmwares-garmin-devices-garmincure3.zip"&gt;сайта&lt;/a&gt;. Доступны версии только для Windows.&lt;/li&gt;
&lt;li&gt;Далее запускаем GarminCure3, указываем путь до уже скачанной прошивки, выбираем режим CURE и нажимаем Make firmware. Программа создаст специальную (лечебную — cure) версию прошивки, которая позволит перевести навигатор в режим Mass Storage. Другими словами, компьютер увидит устройство как внешний носитель и доступ к памяти будет восстановлен. Но это только пол дела, загрузиться с такой прошивки не получится, она нужна только для доступа к памяти.&lt;/li&gt;
&lt;li&gt;Затем запускаем программу Updater. Если получилось ее запустить из GarminCure3, то хорошо. У меня она выдала ошибку с просьбой запуститься из командной строки и передать один единственный параметр — папку до прошивки. Если так, то смотрим куда именно GarminCure3 положил новую прошивку (в данном случае лечебную), копируем путь и запускаем Updater.exe &lt;путь к папке с прошивкой&gt;.&lt;/li&gt;
&lt;li&gt;После запуска Updater выбираем там режим USB и берем в руки навигатор.&lt;/li&gt;
&lt;li&gt;Навигатор изначально должен быть выключенным и отключенным от компьютера. Подключаем к компьютеру и сразу же зажимаем пальцем левый верхний угол тач-скрина и держим не отпуская. Через несколько секунд в программе Updater в списке устройств появится ваш навигатор. Тут же нажимаем OK, соглашаемся с перезаписью. Теперь палец с экрана можно убрать, на нем появится надпись о переходе в режим обновления.&lt;br /&gt;
&lt;i&gt;Если сразу не получилось, то выключаем устройство, отключаемся от компьютера и повторяем. У меня тоже не сразу заработало.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Пол дела сделано. После перезагрузки устройства, компьютер его увидит и подключит внутреннюю память как внешние носители. В этот момент можно скопировать всю необходимую информацию (список избранного, какие-нибудь картинки и прочую пользовательскую информацию). Можно все это сделать вручную, а можно воспользоваться Garmin Express. Там после выбора устройства (теперь оно там появится) переходим в окно с инструментами и делаем Backup.&lt;/li&gt;
&lt;li&gt;Затем я отформатировал и карту и внутреннюю память устройства. Разбираться какой именной файл привел к зависанию я не хотел, там куча файлов.&lt;/li&gt;
&lt;li&gt;После форматирования необходимо обратно вернуть оригинальную (не лечебную) прошивку на устройство. Делается это аналогичным образом. Запускаем GarminCure3, указываем путь до скачанной прошивки, выбираем теперь режим ORIGINAL (не CURE), создаем прошивку. Запускаем Updater. Перезапускаем навигатор, загружаем на него прошивку, опять перезапускаем и при необходимости восстаналиваем из резервной копии сохраненные раньше настройки. Восстановиться можно также с помощью Garmin Express.&lt;/li&gt;
&lt;li&gt;Ну и в конце через Garmin Express обновляемся до последней версии прошивок, карт и прочих настроек.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На всякий случай я сохранил все программы, инструкцию и прошивку для Garmin nuvi 1340. Архив можно взять вот &lt;a href="http://depperte.ru/download/garmin_nuvi_firmware_repair.zip"&gt;здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;UPD&lt;/i&gt;: После форматирования памяти слетели все раскладки клавиатур, иконки автомобилей и языки интерфейса. Cкачать эти файлы самостоятельно через Garmin Express навигатор не хочет, поэтому вот краткая инструкция:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Раскладки клавиатур берем &lt;a href="http://depperte.ru/download/garmin_nuvi_keyboards.zip"&gt;отсюда&lt;/a&gt;. Это для Nuvi 1340, но думаю ко всем моделям серии 12хх/13хх/14хх подойдут. Файлы с раскладками *.kbd нужно поместить в корень памяти навигатора в папку Keyboards. Если папки нет, то создаем руками. Готово.&lt;/li&gt;
&lt;li&gt;Для загрузки языков интерфейса, иконок и голосов необходимо использовать программу Garmin WebUpdater. Скачать ее можно с официального сайта Garmin. Запускаем, программа сама находит обновления, выбираем, обновляем. Готово.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Автодополнение кода в PhpStorm</title>
<guid isPermaLink="false">37</guid>
<link>http://depperte.ru/blog/all/avtodopolnenie-koda-v-phpstorm/</link>
<pubDate>Mon, 27 Mar 2017 10:22:25 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/avtodopolnenie-koda-v-phpstorm/</comments>
<description>
&lt;p&gt;Иногда бывает так, что работая с проектом, на локальном компьютере нет всех необходимых библиотек. На сервере они есть, а у тебя нет. У тебя только пути в проекте к ним прописаны. Например, у меня так было с PHP-фреймворком Silex. Все его библиотеки лежат на удаленном сервере и в системе контроля версий их нет. Поэтому когда сливаешь себе копию проекта, чтобы поработать, то PhpStorm не видит Silex и автодополнение не работает. Было крайне не удобно. Но тут наткнулся на &lt;a href="https://php-and-symfony.matthiasnoback.nl/2012/01/silex-getting-your-project-structure-right/"&gt;статью&lt;/a&gt;, в которой было изложено как это исправить.&lt;/p&gt;
&lt;p&gt;Оказывается, достаточно скачать себе на локальный компьютер Silex в любое место и в дереве проекта в ноде «External Libraries» выбрать в контекстном меню «Configure PHP Include Paths...».&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/phpstorm_code_autocomplete_1.png" width="329" height="317" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;И добавить папку с фреймворком в окне «Include path». После этого PhpStorm проиндексирует содержимое папки и автодополнение чудесным образом заработает.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/phpstorm_code_autocomplete_2.png" width="566" height="714" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Синхронизация между Suunto Movescount и Garmin Connect</title>
<guid isPermaLink="false">36</guid>
<link>http://depperte.ru/blog/all/sinhronizaciya-mezhdu-suunto-movescount-i-garmin-connect/</link>
<pubDate>Sun, 19 Feb 2017 23:22:47 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/sinhronizaciya-mezhdu-suunto-movescount-i-garmin-connect/</comments>
<description>
&lt;p&gt;Появилась задача скопировать свою трехлетнюю базу тренировок из Garmin Connect во вновь созданную базу Suunto Movescount. Можно все сделать руками через экспорт/импорт тренировок в формате .TCX, но по одной — долго и неудобно.&lt;/p&gt;
&lt;p&gt;После получасового поиска нашел замечательную утилиту &lt;a href="https://goo.gl/oeW8Wq"&gt;MXActivityMover&lt;/a&gt; товарища Маркуса Рейха. Вот его &lt;a href="http://www.meeximum.at"&gt;беговой блог&lt;/a&gt;. В нем есть и полное описание работы утилиты.&lt;/p&gt;
&lt;p&gt;Утилитка написана на Java, поэтому запускается на любой операционной системе. Для работы требуется минимум 8-я версия Java. Кстати, предназначена она не только для синхронизации между Garmin и Suunto, но и между Polar и Suunto.&lt;/p&gt;
&lt;p&gt;После запуска MXActivityMover идем в настройки и указываем учетные данные каждой из сетей.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/Screen-Shot-2017-02-19-at-23.00.23.png" width="1012" height="734" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Затем выбираем нужный нам режим экспорта/импорта — единичный или массовый, через обменный файл или напрямую, временной интервал выборки. Дополнительно в настройках можно указать алиасы для видов спорта из разных сетей, чтобы более точно произвести синхронизацию.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/Screen-Shot-2017-02-19-at-23.05.49.png" width="1012" height="734" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;При первой попытке создать Move появится окно с запросом разрешить приложению доступ к учетной записи Movescount.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/Untitled.png" width="361" height="191" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для этого заходим в профиль Movescount в раздел «Подключения».&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/Screen-Shot-2017-02-19-at-23.12.56.png" width="299" height="422" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;И даем приложению доступ.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/Screen-Shot-2017-02-19-at-23.14.31.png" width="1183" height="237" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Затем пробуем синхронизировать еще раз, все должно заработать. Выбранные тренировки Garmin Connect попадут в виде move в Suunto Movescount с сохранением всех параметров.&lt;/p&gt;
&lt;p&gt;Утилита работает не очень стабильно и может выдавать неочеловеченные ошибки. Помогает перезапуск.&lt;/p&gt;
</description>
</item>

<item>
<title>Столицы мира</title>
<guid isPermaLink="false">31</guid>
<link>http://depperte.ru/blog/all/stolicy-mira/</link>
<pubDate>Sat, 15 Oct 2016 16:39:05 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/stolicy-mira/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/LaunchImage_320x480.png" width="320" height="480" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Я очень люблю географию и одной из моих любимых игр всегда была «Города». Один игрок называет город, второй должен назвать другой город на последнюю букву предыдущего и т. д. Игру можно было усложнить, называя только столицы государств.&lt;/p&gt;
&lt;p&gt;Чтобы всегда иметь под рукой список всех столиц, я написал робота, который публикует новые столицы, а также другие города в Twitter &lt;a href="https://twitter.com/albert_depperte"&gt;@albert_depperte&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Еще было написано приложение для операционных систем iOS и Android, но оно пока недоступно, ждет своего времени.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Из-за особенностей движка блога, не смог найти нормальный способ вставить php-код внутрь записи, поэтому последние опубликованные роботом города находятся под записью, чуть ниже. Сорян.&lt;/i&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Установка карт OpenStreetMap (OSM) в навигатор Garmin через MacOS</title>
<guid isPermaLink="false">8</guid>
<link>http://depperte.ru/blog/all/ustnovka-kart-openstreetmap-osm-v-navigator-garmin-cherez-macos/</link>
<pubDate>Wed, 08 Jun 2016 07:57:25 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/ustnovka-kart-openstreetmap-osm-v-navigator-garmin-cherez-macos/</comments>
<description>
&lt;p&gt;Существуют свободно распространяемые карты формата &lt;a href="http://openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;. Например, вот &lt;a href="http://gis-lab.info/data/mp/"&gt;здесь&lt;/a&gt; есть карты на все регионы России и несколько других стран.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/osm_logo.png" width="120" height="120" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для установки таких карт на устройства Garmin требуется их преобразование в формат .gmapi. Сделать это на Windows достаточно просто, а вот на MacOS не совсем.&lt;/p&gt;
&lt;p&gt;Раньше я преобразовывал карты на Windows, а затем копировал их на Mac и заливал их на Garmin. Но недавно нашел очень полезную программку на MacOS &lt;a href="http://www.javawa.nl/mapconverter_en.html"&gt;JaVaWa MapConverter&lt;/a&gt;. Кидаешь на нее папку с картами OSM, а она тебе обратно карту в формате .gmapi, а может и сразу установить ее.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://depperte.ru/blog/pictures/mapconverter_scrn_en.png" width="565" height="278" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Там на &lt;a href="http://www.javawa.nl/"&gt;сайте&lt;/a&gt; есть еще несколько полезных программ для работы с картами, вдруг пригодятся.&lt;/p&gt;
</description>
</item>

<item>
<title>Поиск по всем исходным кодам в PL/SQL</title>
<guid isPermaLink="false">4</guid>
<link>http://depperte.ru/blog/all/poisk-po-vsem-ishodnym-kodam-v-pl-sql/</link>
<pubDate>Thu, 14 Apr 2016 13:26:55 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/poisk-po-vsem-ishodnym-kodam-v-pl-sql/</comments>
<description>
&lt;p&gt;Иногда необходимо проверить, а не используется ли та или иная процедура в какой-нибудь другой процедуре. Или, допустим, необходимо найти определенную подстроку сразу во всем объеме пользовательского кода на PL/SQL.&lt;/p&gt;
&lt;p&gt;Для это есть представление &lt;i&gt;all_source&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;SELECT * FROM all_source WHERE LOWER ( text ) LIKE  &amp;#039;%&amp;#039; || LOWER ( &amp;#039;p_get_nearest_objects&amp;#039; ) || &amp;#039;%&amp;#039;&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Несколько подсказок для Delphi</title>
<guid isPermaLink="false">6</guid>
<link>http://depperte.ru/blog/all/neskolko-podskazok-dlya-delphi/</link>
<pubDate>Wed, 09 Sep 2015 02:05:24 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/neskolko-podskazok-dlya-delphi/</comments>
<description>
&lt;p&gt;Несколько замечательных подсказок при работе с Delphi IDE:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Чтобы вызвать список всех предупреждений в проекте (как при первой компиляции, или после билда, или после удаления всех dcu-файлов), нужно в меню Project выбрать меню Syntax Check. И все!&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Иногда при компиляции появляется предупреждение следующего вида: Unit ’Vcl.FileCtrl’ is specific to a platform. Чтобы его убрать нужно в файле, на который ругается компилятор, после секции interface подставить вот такой хинт: {$WARN UNIT_PLATFORM OFF}.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Для уменьшения размера exe-файла можно в любом месте dpr-файла подставить хинт: {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}, предварительно подключив модуль Windows в секцию uses.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Ошибка ORA-03113 при использовании ODAC и Variant</title>
<guid isPermaLink="false">9</guid>
<link>http://depperte.ru/blog/all/oshibka-ora-03113-pri-ispolzovanii-odac-i-variant/</link>
<pubDate>Mon, 15 Dec 2014 08:47:36 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/oshibka-ora-03113-pri-ispolzovanii-odac-i-variant/</comments>
<description>
&lt;p&gt;Неожиданно столкнулись с проблемой появления ошибки ORA-03113: end-of-file on communication channel при использовании компонентов ODAC в приложениях, написанных с помощью Delphi XE5. Режим Direct Mode, база данных Oracle 11g, вызов серверных хранимых процедур.&lt;/p&gt;
&lt;p&gt;По-русски, это означает, что была прервана связь между клиентом и сервером. Ошибку можно было исправить только переподключением. Непонятным оставался механизм ошибки и соответственно ее источник.&lt;/p&gt;
&lt;p&gt;После нескольких дней поиска выяснилось следующее. Среди входных параметров вызываемой хранимой процедуры был один параметр типа VARCHAR. В Delphi в этот параметр данные передавались из переменной типа Variant. Тип Variant удобен тем, что может принимать значение NULL, чего не могут типы Integer или String.&lt;/p&gt;
&lt;p&gt;Так вот, при передачи параметра в компонент TStoredProc тип Variant передавался без всяческих преобразований. Вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;parameters.Add ( _provider.CreateParameter ( &amp;#039;datum_level_in&amp;#039;, section.DatumLevel ) );&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Как раз это и являлось причиной ошибки. По так и невыясненной причине вызов метода Execute напрочь валил текущую сессию.&lt;/p&gt;
&lt;p&gt;Достаточно было добавить VarToStr () и все заработало. Замечу, что такое поведение было замечено лишь в том случае, когда реципиентом был именно тип VARCHAR. С типом NUMBER такого не наблюдалось.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;parameters.Add ( _provider.CreateParameter ( &amp;#039;datum_level_in&amp;#039;, VarToStr ( section.DatumLevel ) ) );&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Изменение данных в гриде (GridView) в SharePoint в связке с БД Oracle</title>
<guid isPermaLink="false">10</guid>
<link>http://depperte.ru/blog/all/izmenenie-dannyh-v-gride-gridview-v-sharepoint-v-svyazke-s-bd-or/</link>
<pubDate>Thu, 02 Oct 2014 09:52:35 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/izmenenie-dannyh-v-gride-gridview-v-sharepoint-v-svyazke-s-bd-or/</comments>
<description>
&lt;p&gt;Есть SharePoint 2007, есть БД на Oracle.&lt;/p&gt;
&lt;p&gt;Выводим данные на странице с помощью asp:GridView, к базе данных подключаемся через asp:SqlDataSource.&lt;/p&gt;
&lt;p&gt;SqlDataSource:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;asp:SqlDataSource
    runat=&amp;quot;server&amp;quot;
    id=&amp;quot;SqlDataSource1&amp;quot;
    ProviderName=&amp;quot;System.Data.OracleClient&amp;quot;
    ConnectionString=&amp;quot;Data Source=IP:PORT/SID;Persist Security Info=True;User ID=sharepoint;Password=sharepoint;Unicode=True&amp;quot;
    ConflictDetection=&amp;quot;OverwriteChanges&amp;quot;
    SelectCommand=&amp;quot;SELECT id, a, b, c FROM abc&amp;quot;
    UpdateCommand=&amp;quot;UPDATE abc SET a = :A, b = :B WHERE id = :ID&amp;quot;&amp;gt;
            
    &amp;lt;UpdateParameters&amp;gt;
        &amp;lt;asp:Parameter Name=&amp;quot;ID&amp;quot; Type=&amp;quot;Int32&amp;quot; /&amp;gt;
        &amp;lt;asp:Parameter Name=&amp;quot;A&amp;quot; Type=&amp;quot;DateTime&amp;quot; /&amp;gt;
        &amp;lt;asp:Parameter Name=&amp;quot;B&amp;quot; Type=&amp;quot;DateTime&amp;quot; /&amp;gt;
        &amp;lt;asp:Parameter Name=&amp;quot;C&amp;quot; Type=&amp;quot;String&amp;quot; /&amp;gt;
    &amp;lt;/UpdateParameters&amp;gt;
            
&amp;lt;/asp:SqlDataSource&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;GridView:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;asp:GridView runat=&amp;quot;server&amp;quot; id=&amp;quot;GridView1&amp;quot; DataSourceID=&amp;quot;SqlDataSource1&amp;quot; AutoGenerateColumns=&amp;quot;false&amp;quot; DataKeyNames=&amp;quot;ID&amp;quot; AutoGenerateEditButton=&amp;quot;True&amp;quot;&amp;gt;
    &amp;lt;Columns&amp;gt;
        &amp;lt;asp:commandfield ShowDeleteButton=&amp;quot;True&amp;quot; ShowEditButton=&amp;quot;True&amp;quot; Visible=&amp;quot;false&amp;quot;&amp;gt;&amp;lt;/asp:commandfield&amp;gt;
        &amp;lt;asp:boundfield DataField=&amp;quot;ID&amp;quot; HeaderText=&amp;quot;ID&amp;quot; ReadOnly=&amp;quot;True&amp;quot; SortExpression=&amp;quot;ID&amp;quot; Visible=&amp;quot;False&amp;quot;&amp;gt;&amp;lt;/asp:boundfield&amp;gt;
        &amp;lt;asp:boundfield DataField=&amp;quot;A&amp;quot; DataFormatString=&amp;quot;{0:d}&amp;quot; HeaderText=&amp;quot;ACaption&amp;quot; SortExpression=&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/asp:boundfield&amp;gt;
        &amp;lt;asp:boundfield DataField=&amp;quot;B&amp;quot; DataFormatString=&amp;quot;{0:d}&amp;quot; HeaderText=&amp;quot;BCaption&amp;quot; SortExpression=&amp;quot;B&amp;quot;&amp;gt;&amp;lt;/asp:boundfield&amp;gt;
        &amp;lt;asp:boundfield DataField=&amp;quot;C&amp;quot; HeaderText=&amp;quot;CCaption&amp;quot; SortExpression=&amp;quot;C&amp;quot;&amp;gt;&amp;lt;/asp:boundfield&amp;gt;
    &amp;lt;/Columns&amp;gt;

    &amp;lt;HeaderStyle ForeColor=&amp;quot;#FFFFFF&amp;quot; BackColor=&amp;quot;#666666&amp;quot; BorderColor=&amp;quot;#666666&amp;quot; /&amp;gt;
    &amp;lt;RowStyle CssClass=&amp;quot;light&amp;quot;/&amp;gt;
    &amp;lt;AlternatingRowStyle CssClass=&amp;quot;dark&amp;quot;/&amp;gt;    
&amp;lt;/asp:GridView&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Все работает прекрасно, пока не собираемся изменять данные в этом же гриде. При попытке изменить данные выдается ошибка ORA-01036: illegal variable name/number. Всякие вразумительные попытки ее побороть ни к чему не приводят.&lt;/p&gt;
&lt;p&gt;Оказывается, чтобы работал update необходимо, чтобы в тексте UpdateCommand участвовали все те же столбцы, что и в SelectCommand. Если будет не хватать хотя бы одного столбца — запрос не проходит. Соответственно, изменения претерпевает только текст UpdateCommand в SqlDataSource. И все начинает работать.&lt;/p&gt;
&lt;p&gt;Было так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;UPDATE abc SET a = :A, b = :B WHERE id = :ID&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Нужно так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;UPDATE abc SET a = :A, b = :B, c = :C WHERE id = :ID&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Как изменить такое поведение — непонятно.&lt;/p&gt;
</description>
</item>

<item>
<title>Смена пути к Java в Oracle SQL Developer 4.0</title>
<guid isPermaLink="false">11</guid>
<link>http://depperte.ru/blog/all/smena-puti-k-java-v-oracle-sql-developer-4-0/</link>
<pubDate>Fri, 19 Sep 2014 07:36:36 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/smena-puti-k-java-v-oracle-sql-developer-4-0/</comments>
<description>
&lt;p&gt;Последние версии Oracle SQL Developer (4.0 и далее) требуют минимум JDK 7. Чтобы явно указать SQL Developer где находится JDK необходимо указать этот путь в конфигурационном файле product.conf (параметр SetJavaHome):&lt;/p&gt;
&lt;p&gt;Для Windows XP: «C:\Documents and Settings\Application Data\sqldeveloper\1.0.0.0.0»&lt;br /&gt;
Для Vista и выше: «C:\Users\AppData\Roaming\sqldeveloper\1.0.0.0.0\»&lt;/p&gt;
</description>
</item>

<item>
<title>Неработающие breakpoints в Delphi XE5</title>
<guid isPermaLink="false">12</guid>
<link>http://depperte.ru/blog/all/nerabotayuschie-breakpoints-v-delphi-xe5/</link>
<pubDate>Mon, 15 Sep 2014 09:06:23 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/nerabotayuschie-breakpoints-v-delphi-xe5/</comments>
<description>
&lt;p&gt;Иногда бывает так, что при отладке все breakpoints становятся зелеными, и где бы ты их не поставил, они всегда игнорируются.&lt;/p&gt;
&lt;p&gt;Лечится следующим образом:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;В дереве проектов жамкаем правой кнопкой мыши и выбираем пункт «Clean» или «Clean All».&lt;/li&gt;
&lt;li&gt;Далее пересобираем проект, делая «Build» (Shift+F9).&lt;/li&gt;
&lt;li&gt;Запускаем. Все работает.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Первый и последний день месяца в PL/SQL</title>
<guid isPermaLink="false">13</guid>
<link>http://depperte.ru/blog/all/pervy-i-posledniy-den-mesyaca-v-pl-sql/</link>
<pubDate>Tue, 13 May 2014 15:47:09 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/pervy-i-posledniy-den-mesyaca-v-pl-sql/</comments>
<description>
&lt;p&gt;Недавно наткнулся на необходимость написать запрос на PL/SQL, который выводил бы все записи за текущий месяц, причем захватываю пару дней до начала месяца и пару дней после его окончания. Например, с 29.04 по 02.06.&lt;/p&gt;
&lt;p&gt;Оказалось, что в PL/SQL есть функция LAST_DAY ( DATE ). Она выдает последний день месяца переданной ей даты. Но почему-то нет функции FIRST_DAY ( DATE ) — получения первого дня месяца. Ее роль выполняет вот такое выражение:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;TO_DATE ( TRUNC ( DATE, &amp;#039;MM&amp;#039; ), &amp;#039;DD.MM.YYYY&amp;#039; )&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Казалось бы, почему не сделать функцию FIRST_DAY?&lt;/p&gt;
&lt;p&gt;В итоге:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;первый день месяца: TO_DATE ( TRUNC ( DATE, ’MM’ ), ’DD.MM.YYYY’ );&lt;/li&gt;
&lt;li&gt;последний день месяца: LAST_DAY ( DATE ).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А условие запроса с двумя днями соответственно выглядит вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;...AND a.request_date BETWEEN ( TO_DATE ( TRUNC ( SYSDATE, &amp;#039;MM&amp;#039; ), &amp;#039;DD.MM.YYYY&amp;#039; ) - 2 ) AND ( LAST_DAY ( SYSDATE ) + 2 )&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Проблема обновления файлов при развертывании (deployment) приложения на эмуляторе iOS (Delphi XE5)</title>
<guid isPermaLink="false">14</guid>
<link>http://depperte.ru/blog/all/problema-obnovleniya-faylov-pri-razvertyvanii-deployment-prilozh/</link>
<pubDate>Sat, 15 Feb 2014 09:52:49 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/problema-obnovleniya-faylov-pri-razvertyvanii-deployment-prilozh/</comments>
<description>
&lt;p&gt;Про разработку приложений iOS на Delphi XE5.&lt;/p&gt;
&lt;p&gt;В &lt;a href="http://alhymov.blogspot.ru/2014/02/testflightapp.html"&gt;блоге&lt;/a&gt; Павла Алхимова я задал такой вопрос:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Небольшая проблема с настройками deployment при запуске проекта на эмуляторе iOS. В проекте использую базу данных SQLite, создал файл, все хорошо, под Windows 7 работает. Пробую залить на эмулятор — все нормально, работает. Далее в ходе разработки немного меняю структуру БД (добавляю пару таблиц и представление), соответственно меняется сам файл БД. Запускаю под Windows 7 — все нормально, заливаю на эмулятор — не работает, точнее работает, но файл БД остался старым. То есть при очередном deployment он не подтянулся. Почему так? Есть какие-нибудь настройки, флаги или т. п. о которых я не знаю? Единственное, что пришло в голову — руками залезть в скретч-директорию эмулятора и почистить этот файл, тогда при следующем запуске он копируется.﻿»&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;И получил вот такой ответ от Павла:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Именно так, если старое приложение не было удалено. Новая база лежит в пакете приложения и пытается при старте приложения извлечься в песочницу — а место уже занято! Поэтому приложение либо удалять нужно, либо в самом приложении удалять меняющийся файл. Я, например, так и поступаю — сделал команду „обновить данные“, которая убивает файл данных и останавливает приложение. При следующем старте недостающий файл будет извлечён из пакета приложения и пойдёт в работу.﻿»&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вот так.&lt;/p&gt;
</description>
</item>

<item>
<title>Перестала запускаться среда Delphi</title>
<guid isPermaLink="false">15</guid>
<link>http://depperte.ru/blog/all/perestala-zapuskatsya-sreda-delphi/</link>
<pubDate>Sat, 15 Feb 2014 09:40:51 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/perestala-zapuskatsya-sreda-delphi/</comments>
<description>
&lt;p&gt;Столкнулся с такой проблемой впервые при работе с Delphi XE5. При очередном открытии проекта неожиданно было выдано окно с вопросом: «Включить IDE при следующем запуске Delphi?». Совершенно не подумав и до конца не осознав нажал «нет». Хотя проверить, что было бы если выбрал «да», так и не удалось пока. В итоге Delphi перестала запускаться. Повисит в диспетчере задач секунд 10 и пропадает.&lt;/p&gt;
&lt;p&gt;Переустановки, repair и прочие танцы не помогают.&lt;/p&gt;
&lt;p&gt;Стал разбираться... Оказывается это проблема известна еще с версии 2010. Вот пост, который мне собственно и помог: &lt;a href="http://www.cyberforum.ru/delphi-beginners/thread64194.html"&gt;&lt;a href="http://www.cyberforum.ru/delphi-beginners/thread64194.html"&gt;http://www.cyberforum.ru/delphi-beginners/thread64194.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Там говорится о том, что достаточно удалить ключ реестра (это для версии 2010):&lt;br /&gt;
HKEY_CURRENT_USER\Software\CodeGear\BDS\7.0\Disabled IDE Packages\$(BDS)\Bin\delphide140.bpl&lt;/p&gt;
&lt;p&gt;Для версии XE5 ключ такой:&lt;br /&gt;
HKEY_CURRENT_USER\Software\Embarcadero\BDS\12.0\Disabled IDE Packages\&lt;/p&gt;
&lt;p&gt;Удалением одного ключа не обошлось. У меня для версии XE5 пришлось удалить весь раздел Disabled IDE Packages. На машинах, где таких ошибок не возникало такого раздела и нет вовсе.&lt;/p&gt;
</description>
</item>

<item>
<title>Изменение способа хранения BLOB-поля в уже существующей таблице Oracle</title>
<guid isPermaLink="false">16</guid>
<link>http://depperte.ru/blog/all/izmenenie-sposoba-hraneniya-blob-polya-v-uzhe-suschestvuyuschey/</link>
<pubDate>Sun, 02 Feb 2014 22:30:38 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/izmenenie-sposoba-hraneniya-blob-polya-v-uzhe-suschestvuyuschey/</comments>
<description>
&lt;p&gt;Долго не мог найти способ изменить способ организации BLOB-поля на формат SecureFile в Oracle. Обходился всегда копированием таблицы.&lt;/p&gt;
&lt;p&gt;Теперь вот нашел. Заодно задаем дополнительные опции хранения, такие как дедупликация, сжатие и кэширование.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ALTER TABLE ss_file_t3d MOVE LOB ( preview_summary ) STORE AS SECUREFILE ( TABLESPACE seis_blob DEDUPLICATE COMPRESS CACHE );&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Красота!&lt;/p&gt;
</description>
</item>

<item>
<title>Sharepoint 2010. Настройка прокси. RSS webpart.</title>
<guid isPermaLink="false">17</guid>
<link>http://depperte.ru/blog/all/sharepoint-2010-nastroyka-proksi-rss-webpart/</link>
<pubDate>Tue, 28 May 2013 11:21:48 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/sharepoint-2010-nastroyka-proksi-rss-webpart/</comments>
<description>
&lt;p&gt;Столкнулся с проблемой проксирования запросов web-части просмотра RSS-ленты на Sharepoint 2010. Точнее с отсутствием проксирования. Если на страницу добавить web-часть просмотра RSS и сервер Sharepoint спрятан за прокси, то с первого раза она работать не будет. Начал искать решение. Гугл выдает практически одни и те же варианты решения, нужно в web.config добавить следующее:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;defaultproxy usedefaultcredentials=&amp;quot;true&amp;quot; enabled=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;proxy usesystemdefault=&amp;quot;true&amp;quot; proxyaddress=&amp;quot;http://proxyaddress:port&amp;quot; bypassonlocal=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/defaultproxy&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Только это мне не помогло, потому как прокси не допускает анонимных соединений. Иными словами нужна была принудительная авторизация. И здесь началось самое интересное. О том как передать логин и пароль от имени Sharepoint нигде не сказано, даже на MSDN, может плохо искал конечно. В итоге, перепробовав все предложенные варианты совершенно случайно наткнулся вот на этот &lt;a href="http://techtalkpt.wordpress.com/2009/11/17/rss-viewer-proxy-problem/"&gt;блог&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;И вот там-то и узнал, что передать имя пользователя и пароль можно очень просто. Необходимо в тот же файлик в секцию identity добавить следующее:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;identity impersonate=&amp;quot;true&amp;quot; username=&amp;quot;Domain\UserName&amp;quot; password=&amp;quot;Password&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;UPD. Если нужно заставить Sharepoint авторизоваться во вне тем пользователем, который к нему подключился, то свойство impersonate нужно поставить в false.&lt;/p&gt;
&lt;p&gt;Большое тебе спасибо, Ricardo Magalhães!&lt;/p&gt;
</description>
</item>

<item>
<title>Необязательный закрывающий тег PHP</title>
<guid isPermaLink="false">18</guid>
<link>http://depperte.ru/blog/all/neobyazatelny-zakryvayuschiy-teg-php/</link>
<pubDate>Thu, 11 Apr 2013 15:49:35 +0500</pubDate>
<author></author>
<comments>http://depperte.ru/blog/all/neobyazatelny-zakryvayuschiy-teg-php/</comments>
<description>
&lt;p&gt;Проводя очередной Code Inspection в превосходной среде JetBrains PhpStorm 6.0 наткнулся на следующий результат.&lt;/p&gt;
&lt;p&gt;В файлах, где содержался чистый PHP-код (без примеси HTML) на строке с закрывающий тегом «?&gt;» анализатор выдал Redundant closing tag. Что означает «Избыточный закрывающий тег».&lt;/p&gt;
&lt;p&gt;Полез читать. Оказывается, теги действительно не рекомендуется закрывать, поскольку если случайно после тега оставить, например, пробел, то он соответственно попадет в выходной поток и породит ошибку headers already sent.&lt;/p&gt;
&lt;p&gt;Для меня это было открытием, я всегда их ставил дабы выдержать «правильное» оформление кода. На всяческих форумах пишут, что мол это указано в каждой книжке для чайников. Я открыл свою книжку и не нашел там такого. Большую часть знаний по PHP были получены не из книжек, а из интернета. И там я такого не встречал.&lt;/p&gt;
&lt;p&gt;Вот &lt;a href="http://php.net/manual/ru/language.basic-syntax.phptags.php"&gt;ссылка&lt;/a&gt; на php.net по этому поводу.&lt;br /&gt;
И выдержка:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавление случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.»&lt;/p&gt;
&lt;/blockquote&gt;
</description>
</item>


</channel>
</rss>