<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Netbeans on Илья Маринин</title>
    <link>https://www.marinin.pw/ru/tags/netbeans/</link>
    <description>Recent content in Netbeans on Илья Маринин</description>
    <generator>Hugo -- 0.138.0</generator>
    <language>ru-RU</language>
    <lastBuildDate>Sat, 27 Jan 2018 20:36:21 +0500</lastBuildDate>
    <atom:link href="https://www.marinin.pw/ru/tags/netbeans/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Отладка кода в docker-контейнере из NetBeans</title>
      <link>https://www.marinin.pw/ru/posts/netbeans-docker-xdebug/</link>
      <pubDate>Sat, 27 Jan 2018 20:36:21 +0500</pubDate>
      <guid>https://www.marinin.pw/ru/posts/netbeans-docker-xdebug/</guid>
      <description>&lt;p&gt;Я уже немного писал о NetBeans &lt;a href=&#34;https://www.marinin.pw/post/netbeans_hotkeys&#34;&gt;тут&lt;/a&gt; . Данная IDE умеет хорошо дружить с Xdebug, в связке с которым очень удобно отлаживать php-код. Основы успешно описаны, например, &lt;a href=&#34;https://netbeans.org/kb/docs/php/debugging_ru.html&#34;&gt;здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Все интереснее, когда код приходится отлаживать не на локальной машине, а внутри docker-контейнера. Особенно, если нужно отладить cli-скрипт внутри контейнера.&lt;/p&gt;
&lt;p&gt;Для успешной отладки следует:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Настроить docker-контейнер с Xdebug внутри;&lt;/li&gt;
&lt;li&gt;Настроить Xdebug внутри контейнера;&lt;/li&gt;
&lt;li&gt;Настроить NetBeans.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;При обычной отладке с использованием браузера и при отладке cli-скрипта настройки будут слегка отличаться. Итак, поехали.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Я уже немного писал о NetBeans <a href="/post/netbeans_hotkeys">тут</a> . Данная IDE умеет хорошо дружить с Xdebug, в связке с которым очень удобно отлаживать php-код. Основы успешно описаны, например, <a href="https://netbeans.org/kb/docs/php/debugging_ru.html">здесь</a>.</p>
<p>Все интереснее, когда код приходится отлаживать не на локальной машине, а внутри docker-контейнера. Особенно, если нужно отладить cli-скрипт внутри контейнера.</p>
<p>Для успешной отладки следует:</p>
<ol>
<li>Настроить docker-контейнер с Xdebug внутри;</li>
<li>Настроить Xdebug внутри контейнера;</li>
<li>Настроить NetBeans.</li>
</ol>
<p>При обычной отладке с использованием браузера и при отладке cli-скрипта настройки будут слегка отличаться. Итак, поехали.</p>
<h2 id="настройка-контейнера">Настройка контейнера</h2>
<p>Установку Xdebug внутрь контейнера мы обсуждать не будем. Эти настройки можно найти, например, <a href="https://github.com/apparena/docker-php7-xdebug/blob/master/Dockerfile">тут</a>.</p>
<p>Интереснее настройки самого Xdebug.</p>
<p>В случае с обычной отладкой:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#a6e22e">xdebug.remote_enable</span><span style="color:#f92672">=</span><span style="color:#e6db74">1</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">xdebug.remote_connect_back</span><span style="color:#f92672">=</span><span style="color:#e6db74">1</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">xdebug.idekey</span><span style="color:#f92672">=</span><span style="color:#e6db74">netbeans-xdebug</span>
</span></span></code></pre></div><p>Расшифровка:</p>
<ul>
<li><code>xdebug.remote_enable</code> — разрешает удаленную отладку.</li>
<li><code>xdebug.remote_connect_back</code> — автоматическое установление соединения с хостом, который иницирует удаленную отладку. Если не указывать эту опцию, то нужно использовать <code>xdebug.remote_host</code>, где следует указать ip вашего хоста из виртуального docker-адаптера.</li>
<li><code>xdebug.idekey</code> — ключ для соединения. Значение <code>netbeans-xdebug</code> задано в NetBeans по умолчанию. Можно не задавать эту опцию и использовать <code>xdebug.remote_autostart=1</code>, но тогда Xdebug будет стартовать в каждом скрипте, даже если это не нужно, что скажется на производительности.</li>
</ul>
<h2 id="настройка-netbeans">Настройка NetBeans</h2>
<p>Для успешной отладки NetBeans должен знать как сопоставить между собой пути внутри docker-контейнера и пути в хостовой машине.</p>
<p>Идем в <strong>Свойства проекта</strong>, далее <strong>Выполнить настройку → Дополнительно</strong>. Внизу в разделе <strong>Отображение пути</strong> добавляем наше сопоставление.</p>
<p>Теперь, если запустить отладку проекта, то отладчик должен автоматически остановить выполнение на первой строке скрипта точки входа в приложение (если активирована соответствующая настройка в IDE).</p>
<p>Если ничего не произошло и вас отключена опция NetBeans <strong>Остановить в первой строчке</strong>, то удостоверьтесь, что поставили breakpoint где-то по пути выполнения скрипта. Если ни одного breakpoint не установлено, то следует установить его, остановить отладку и запустить снова.</p>
<h2 id="отладка-cli-скрипта">Отладка cli-скрипта</h2>
<p>Для отладки cli-скрипта все немного иначе. Главное отличие в том, что опция <code>xdebug.remote_connect_back=1</code> нам не нужна, ведь соединения от хостовой машины не будет. Вместо этого NetBeans будет ожидать обращений от приложения.</p>
<p>Для начала настроим NetBeans.</p>
<p>Идем по уже известному пути <strong>Свойства проекта → Выполнить настройку</strong>. Здесь добавляем новую конфигурацию, нажав <strong>Создать&hellip;</strong>. Далее жмем <strong>Дополнительно</strong> и указываем опцию <strong>Не открывать браузер</strong>.</p>
<p>После настройки, кликаем правой кнопкой по проекту, выбираем <strong>Установить конфигурацию</strong> и задаем вариант, который только что создали.</p>
<p>Теперь можно нажать <strong>Отладка проекта</strong> или просто <strong>Ctrl+F5</strong>. Браузер не должен открыться.</p>
<p>Идем в меню <strong>Окно → IDE и сервис → Терминал</strong>. В появившемся терминале выполняем вход в docker-контейнер, выполнив что-то вроде:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ docker exec -ti %container_id% bash
</span></span></code></pre></div><p><strong>%container_id%</strong> в данном случае id контейнера с вашим приложением.</p>
<p>Теперь самое интересное. Выполняем:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ export XDEBUG_CONFIG<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;remote_enable=1 remote_mode=req remote_port=9000 remote_host=%remote_host_ip% remote_connect_back=0 idekey=netbeans-xdebug&#34;</span>
</span></span></code></pre></div><p>Обратите внимание на указанный <strong>remote_host</strong>. Именно по этому адресу Xdebug будет ломиться в отладчик. Проставьте свое значение на место <strong>%remote_host_ip%</strong>.</p>
<p>Теперь можно запустить какой-нибудь cli-скрипт. Например, миграции yii:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ ./yii migrate
</span></span></code></pre></div><p>Если отладчик NetBeans запущен, то он должен отловить это событие и прервать выполнение на первой строке скрипта точки входа.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Редактирование кода в NetBeans</title>
      <link>https://www.marinin.pw/ru/posts/netbeans_hotkeys/</link>
      <pubDate>Tue, 23 May 2017 20:20:03 +0500</pubDate>
      <guid>https://www.marinin.pw/ru/posts/netbeans_hotkeys/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Обновлено 26.01.2018&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NetBeans IDE мой основной рабочий инструмент. Ниже представлен список горячих клавиш, которые я использую наиболее часто, а так же дан поверхностный обзор шаблонов кода и макросов.&lt;/p&gt;
&lt;h2 id=&#34;горчие-клавиши&#34;&gt;Горчие клавиши&lt;/h2&gt;
&lt;h3 id=&#34;навигация&#34;&gt;Навигация&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Alt+Up/Down&lt;/strong&gt; — следующая/предыдущая позиция установки курсора.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alt+Left/Alt+Right/Ctrl+Q&lt;/strong&gt; — навигация по предыдущему/следующему редактированным фрагментам.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl+Q&lt;/strong&gt; — перейти к последнему отредактированному фрагменту.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl+Shift+1&lt;/strong&gt; — найти текущий файл в дереве проектов и поставить на него фокус. Удобно чтобы не рыться долго в папках.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><strong>Обновлено 26.01.2018</strong></p>
<p>NetBeans IDE мой основной рабочий инструмент. Ниже представлен список горячих клавиш, которые я использую наиболее часто, а так же дан поверхностный обзор шаблонов кода и макросов.</p>
<h2 id="горчие-клавиши">Горчие клавиши</h2>
<h3 id="навигация">Навигация</h3>
<p><strong>Alt+Up/Down</strong> — следующая/предыдущая позиция установки курсора.</p>
<p><strong>Alt+Left/Alt+Right/Ctrl+Q</strong> — навигация по предыдущему/следующему редактированным фрагментам.</p>
<p><strong>Ctrl+Q</strong> — перейти к последнему отредактированному фрагменту.</p>
<p><strong>Ctrl+Shift+1</strong> — найти текущий файл в дереве проектов и поставить на него фокус. Удобно чтобы не рыться долго в папках.</p>
<p><strong>Alt+Shift+O</strong> — перейти к файлу по имени. Есть нечеткий поиск.</p>
<p><strong>Ctrl+O</strong> — перейти к классу по имени.</p>
<p><strong>Cltr+Alt+Shift+O</strong> — перейти к символу (например, функция). Полезно когда имя функции в проекте уникальное и помнишь название.</p>
<p><strong>Ctrl+B</strong> — перейти к объявлению переменной/класса и т.д. Курсор должен быть установлен на переменной/классе и т.д.</p>
<p><strong>Ctrl+Shift+M</strong> — поставить/удалить закладку. Когда нужно переходить в ходе рефакторинга в три-пять мест, чтобы не запоминать строки.</p>
<p><strong>Ctrl+Shift+&gt;</strong>, <strong>Ctrl+Shift+&lt;</strong> — навигация по закладкам.</p>
<p><strong>Ctrl+G</strong> — перейти к строке.</p>
<p><strong>Ctrl+Tab</strong> — навигация по открытым файлам.</p>
<h3 id="редактирование">Редактирование</h3>
<p><strong>Ctrl+E</strong> — удалить текущую строку.</p>
<p><strong>Ctrl+R</strong> — переименовать класс/метод/переменную.</p>
<p><strong>Shift+Enter</strong> — вставка новой строки ниже, из любого места текущей строки. Чтобы не нажимать End.</p>
<p><strong>Ctrl+Shift+Down/Up</strong> — копирование строки вниз/вверх соответственно.</p>
<p><strong>Ctrl+Space</strong> — подсказка по функции, методу и т.д.</p>
<p><strong>Ctrl+Shift+C</strong> — быстро закомментировать/раскомментировать код.</p>
<p><strong>Alt+Shift+F</strong> — отформатировать код.</p>
<p><strong>Ctrl+Shift+I</strong> — добавляет use для класса в начало файла.</p>
<h3 id="окна">Окна</h3>
<p><strong>Ctrl+Shift+W/F4</strong> — закрыть все вкладки.</p>
<p><strong>Shift+Esc</strong> — развернуть окно редактирования кода на весь экран, скрыв другие окна.</p>
<p><strong>Alt+Shift+Enter</strong> — полноэкранный режим.</p>
<h2 id="шаблоны-кода">Шаблоны кода</h2>
<p>Доступны по пути <strong>Сервис → Параметры → Редактор → Шаблоны кода</strong>. Эта особенность становится нужной, когда набирать код руками уже лень. :) Если кратко, то шаблоны кода это набор команд, которые разворачиваются в целые фрагменты кода. Обычно это различные рутинные конструкции вроде циклов, ветвлений, обработчиков исключений и прочего.</p>
<p>Шаблоны кода деляется на два типа: те что можно вызвать, набрав заранее известную комбинацию символов и нажав <strong>Tab</strong> (это действие называется разыменовыванием шаблона) и те что работают с выделенным кодом по нажатию комбинации <strong>Alt+Enter</strong>.</p>
<p>В редакторе уже предусмотрено множество встроенных шаблонов кода на все случаи жизни. Неплохо их распечатать и иметь под рукой, чтобы не набирать рутинный код.</p>
<p>Например, набрав <strong>vdoc</strong> можно добавить комментарий к ниже расположенной переменной. Или, набрав <strong>cls</strong>, получить сигнатуру класса с конструктором внутри. Причем NetBeans сам предложит в случае необходимости заполнить недостающие данные.</p>
<p>Шаблоны кода можно писать самому. Я, например, добавил себе в раздел HTML конструкции для тегов <code>&lt;?php ?&gt;</code> и <code>&lt;?= ?&gt;</code></p>
<pre tabindex="0"><code>ph - &lt;?= ${cursor} ?&gt;
php - &lt;?php ${cursor} ?&gt;
</code></pre><p>Интересующихся темой ждет <a href="https://netbeans.org/kb/docs/php/code-templates_ru.html">подробная документация</a> на сайте NetBeans. Прочитав материал, а так же изучив существующие шаблоны кода, можно научится писать собственные варианты на все случаи жизни.</p>
<p>Кстати, данную заметку я написал прямо в NetBeans с использованием плагина поддержки <strong>Markdown</strong> и шаблоны кода, идущие в комплекте с плагином, здорово ускоряют оформление поста.</p>
<h2 id="макросы">Макросы</h2>
<p>Думаю, что такое макрос объяснять не нужно. В NetBeans можно писать свои макросы и навешивать их использование на горячие клавиши. Настройки можно найти по пути <strong>Сервис → Параметры → Редактор → Макросы</strong>.</p>
<p>Например, многие знают, что NetBeans умеет добавлять комментарии <strong>phpdoc</strong> к методу. Для этого нужно набрать <code>/**</code> над объявлением метода и нажать Enter. Все бы ничего, но эти символы неудобно расположены на клавиатуре.</p>
<p>Чтобы не мучаться можно написать макрос, который проделывает то же самое по нажатию одной комбинации клавиш. Вот его код:</p>
<pre tabindex="0"><code>&#34;/**&#34; insert-break
</code></pre><p>Можно не писать макросы руками, а записывать их по старинке как, например, в Excel. Для этого предусмотрены пункты меню <strong>Правка → Начать запись макроса</strong> и <strong>Правка → Завершить запись макроса</strong>.</p>
<p>Подробный обзор доступных команд есть, например, в <a href="http://rmcreative.ru/playground/netbeans_macro/">статье</a>  Александра Макарова. Либо <a href="http://wiki.netbeans.org/FaqEditorMacros">здесь</a>, но уже на английском.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Русская раскладка в NetBeans под Ubuntu</title>
      <link>https://www.marinin.pw/ru/posts/ubuntu-netbeans/</link>
      <pubDate>Sun, 26 Feb 2017 12:45:41 +0500</pubDate>
      <guid>https://www.marinin.pw/ru/posts/ubuntu-netbeans/</guid>
      <description>&lt;p&gt;В Ubuntu Linux есть старый баг, который не дает пользоваться горячими клавишами в некоторых приложениях, если используешь русскую раскладку. Для меня он особенно неприятен при работе с NetBeans.&lt;/p&gt;
&lt;p&gt;На счастье, для ряда приложений на основе Java есть &lt;a href=&#34;https://github.com/zheludkovm/LinuxJavaFixes&#34;&gt;фикс&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;На странице фикса не описан процесс установки для NetBeans. Восполню этот пробел и опишу процесс для версии NetBeans 8.2.&lt;/p&gt;
&lt;h2 id=&#34;шаг-1-скачать-фикс&#34;&gt;Шаг 1. Скачать фикс&lt;/h2&gt;
&lt;p&gt;Тут ничего сложного. Идем на &lt;a href=&#34;https://github.com/zheludkovm/LinuxJavaFixes&#34;&gt;страницу фикса&lt;/a&gt;, скачиваем и распаковываем, например, в домашнюю папку.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>В Ubuntu Linux есть старый баг, который не дает пользоваться горячими клавишами в некоторых приложениях, если используешь русскую раскладку. Для меня он особенно неприятен при работе с NetBeans.</p>
<p>На счастье, для ряда приложений на основе Java есть <a href="https://github.com/zheludkovm/LinuxJavaFixes">фикс</a>.</p>
<p>На странице фикса не описан процесс установки для NetBeans. Восполню этот пробел и опишу процесс для версии NetBeans 8.2.</p>
<h2 id="шаг-1-скачать-фикс">Шаг 1. Скачать фикс</h2>
<p>Тут ничего сложного. Идем на <a href="https://github.com/zheludkovm/LinuxJavaFixes">страницу фикса</a>, скачиваем и распаковываем, например, в домашнюю папку.</p>
<h2 id="шаг-2-обновить-конфигурацию-netbeans">Шаг 2. Обновить конфигурацию NetBeans</h2>
<p>Далее идем в папку, где у нас установлена IDE и открываем нужный файл:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ gedit ~/netbeans-8.2/etc/netbeans.conf
</span></span></code></pre></div><p>Ищем параметр <code>netbeans_default_options</code>. В конце строки параметра ставим пробел и добавляем что-то вроде <code>-J-javaagent:/home/ilya/javafix/LinuxJavaFixes-1.0.0-SNAPSHOT.jar</code>.</p>
<p>Сохраняем изменения.</p>
<h2 id="шаг-3-проверка">Шаг 3. Проверка</h2>
<p>Запускаем IDE. Переключаемся на русскую раскладку и жмем, например, <code>Ctrl + F</code>. Если панель поиска появилась, то порядок.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
