Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Вывод lambda функции, в виде текста

Приветствую! Знатоки выручайте, долгое время уже пытаюсь разобраться с этим вопросом и никак не могу найти информацию, а точнее нашел, но не то. Вообщем сама задача.
Есть массив, который содержит в себе lambda функции:
$functs = ['name' => function() { return 1; }];
Мне нужно создать для него редактирование, казалось бы все так просто, взять циклом пробежаться и всунуть все в input и textarea поля.
Но возникла проблема сами функции они не выводятся так как нужно. А нужно чтобы они также выводились как определены в массиве, то есть строкой.
function() { return 1; }
Прям точно также - как и определены в значении массива. Пробовал делать так:
$func= new ReflectionFunction($functs['name']); var_dump($func->__toString());
Но! Выводится мусор, не то, что нужно:
Closure [ function {closure} ] { @@ .....\index.php 11 - 13 }
Уже какой день бьюсь в этом направлении и никак не могу решить задачу, чтобы было ключ массива в input, а значение в textarea. То есть вот так:
Пожалуйста помогите или пните в правильном направлении.
UPD: Массив может быть любого вида: Хоть такой:
$functs = ['name' => function() {return 1;},'m'=>fucntion() {}];
В одну строку.
Пробовал решить так:
function closure(Closure $closure) { $function = new ReflectionFunction($closure); $file = file($function->getFileName()); for ($i = $function->getStartLine() - 1; $i < $function->getEndLine(); $i++) { $str .= $file[$i]; } $funct = mb_substr($str, mb_stripos($str, 'function', 0, 'utf-8'), -1, 'utf-8'); $funct = mb_substr($funct, 0, mb_strripos($funct, '}', 0, 'utf-8')+1, 'utf-8'); return $funct; }
Работает, но только если размер массива 1. То есть такой:
$functs = ['name' => function() {return 1;}];
а в случае: (new MyClosure($closure))->__toString(); возникает LogicException, что не совсем гуд, исключено, чтобы это было. нужно решение, чтобы в любом написании массива с lambda функциями. Кстате, ссылка с приведенным алгоритмом, не пашет тоже.
Незнаю, как поправить свою функцию, так, чтобы отследить правильную позицию завершения блока функции " } ", а не искать конец " } ", а то получается, что он захватывает все и получается хрень. Похоже и длину строки надо считать и т.д., формула нужна, как верно отследить. Выручайте, не врублюсь, какое условие написать?


Ответ

Пришлось делать запись данных уже в нужном виде (если посоветуете, что-то, лучше, буду рад):
public final function arrayDump(array $array): string { if (1 <= sizeof($array)) { $arr = []; foreach ($array as $key => $value) { $key = addslashes($key); if (is_callable($value)) { $value = $this->closure($value); $arr[] = "'{$key}' => {$value}"; } else if (is_string($value)) { $arr[] = "'{$key}' => '" . addslashes($value) . "'"; } else if (is_float($value) || is_double($value)) { $value = (double) $value; $arr[] = "'{$key}' => {$value}"; } else if (is_int($value)) { $value = (int) $value; $arr[] = "'{$key}' => {$value}"; } else if (is_object($value)) { $arr[] = "'{$key}' => '" . serialize($value) . "'"; } } return"[
\t" . join("\t", $arr) . "
];"; } return''; }
Ну и сам метод closure
public final function closure(Closure $closure): string { $func = 'function('; $function = new ReflectionFunction($closure); $params = []; $parameters = $function->getParameters(); foreach ($parameters as $param) { $string = ''; if ($param->isArray()) { $string .= 'array '; } else if ($param->getClass()) { $string .= $param->getClass()->name . ' '; } if ($param->isPassedByReference()) { $string .= '&'; } $string .= '$' . $param->name; if ($param->isOptional()) { $string .= ' = ' . var_export($param->getDefaultValue(), true); } $params[] = $string; } unset($parameters, $param); $func .= join(', ', $params) . ') {' . PHP_EOL; $lines = file($function->getFileName()); $start = $function->getStartLine(); $end = $function->getEndLine(); for ($l = $start; $l < $end; ++$l) { $func .= $lines[$l]; } return $func; }
Теперь нормально работает.

Фрагменты наслаиваются друг на друга. [дубликат]

На данный вопрос уже ответили: Наложение фрагмента на фрагмент. За добавленным фрагментом виден предыдущий 2 ответа @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); layoutForFragment = (FrameLayout) findViewById(R.id.layout_for_fragment); fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.layout_for_fragment,cardStation);
fragmentTransaction.commit(); }
В методе OnCreate я вставляю фрагмент во FrameLayout. Проблема в том, что при повороте экрана или при вылете с ошибкой фрагменты накладываются друг на друга на одно и то же место. Как решить проблему ?


Ответ

При повороте экрана активити пересоздаётся. При пересоздании активити система пытается восстановить предыдущее состояние. В предыдущем состоянии в активити добавлен фрагмент и система его восстанавливает, добавляя на экран. После этого выполняется onCreate, где вы добавляете ещё один фрагмент. Итого их у вас (число поворотов экрана)*1
Вам надо просто проверять восстановила ли активити к-л фрагмент, поискав его во FragmentManager по ID контейнера, и, если нет, то добавлять его:
cardStation = getSupportFragmentManager().findFragmentById(R.id.layout_for_fragment); if (cardStation == null) { cardStation = new CardStation(); getSupportFragmentManager(). beginTransaction().add(R.id.layout_for_fragment, cardStation) .commit(); }

Как отправить изменения из текущей ветки в новую ветку в удалённом репозитории?

Если выполнить команду git branch -a то она выводит вот такое
aleksey@aleksey:~/Downloads/NTZ/FittingRoom$ git branch -a * develop master remotes/origin/HEAD -> origin/master remotes/origin/master
2 ветки локальные и 2 на сервере... Локально master и develop , и теперь если я хочу сделать пуш на сервер, то мне обязательно нужно его делать в мастер... Но эта ветка у меня для релизов...
Как создать на сервере ветку дев?
ПРАВКА
$ git remote show origin * remote origin Fetch URL: https://gitlab.com/alekseytimoshchenko/NewTimeZone.git Push URL: https://gitlab.com/alekseytimoshchenko/NewTimeZone.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)


Ответ

$ git remote show origin ... Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
здесь видно, что для команды git pull (без параметров) сконфигурирована только локальная ветка master (будут забираться обновления из удалённой ветки master). аналогично и для git push (без параметров) — только обновления из локальной ветки master будут отправляться в удалённый репозиторий (в удалённую ветку master).

локальную ветку можно сконфигурировать на отправку изменений в любую ветку удалённого репозитория (при вызове git push без параметров в этой ветке).
проще всего это сделать, однократно передав команде git push опцию -u (--set-upstream). естественно, надо указать и имя репозитория и ветку в нём, к которой текущая ветка будет «привязана».
для вашего конкретного случая:
сделайте ветку develop текущей:
$ git checkout develop отправьте изменения из неё, одновременно указав «привязку» к удалённой ветке develop в репозитории origin (приведён и пример вывода):
$ git push -u origin develop Total 0 (delta 0), reused 0 (delta 0) To url-репозитория * [new branch] develop -> develop Branch develop set up to track remote branch develop from origin.
последняя строчка как раз и сообщает о том, что локальная ветка develop «связана» с удалённой веткой develop (в репозитории origin).

теперь команда:
$ git remote show origin
покажет чуть больше информации про «привязки»:
... Local branches configured for 'git pull': develop merges with remote develop master merges with remote master Local refs configured for 'git push': develop pushes to develop (up to date) master pushes to master (up to date)
и выполняемая в дальнейшем в ветке develop команда git push (без параметров) отправит изменения именно в удалённую ветку develop

к слову
разово отправить изменения из любой локальной ветки в (почти) любую ветку в удалённом репозитории (и не осуществляя никаких «привязок») можно так:
$ git push репозиторий локальная_ветка:удалённая_ветка
например, для вашего случая:
$ git push origin develop:develop
если ветка с указанным именем не существует в удалённом репозитории, она будет создана. а если существует, то, в принципе, команда может завершиться с ошибкой — если «влить» изменения из локальной ветки в удалённую не получится. но это уже совсем другая история.

Регистр имен файлов Windows и Mercurial

Есть такая проблема. Сайт разрабатывается под Windows, а сервер веб-сервисом крутится под Linux. Использую систему контроля версий mercurial.
Можно ли под Windows его как-нибудь настроить, чтобы изменение регистра имён файлов тоже считалось изменением файла (сделать регистрозависимым)?


Ответ

Из ртутного руководства, глава 7, параграф 7
(здесь речь идёт об исправлении проблем с регистром имён файлов. но понятно, что Mercurial просто не заточен на решение подобных вопросов, считает их как возможные конфликты, и вообще: система хранилищ Mercurial регистронезависима)
Если вы используете Windows или Mac в среде, где кто-то использует Linux или Unix, и Mercurial сообщает о проблемах с регистром, когда вы пытаетесь сделать hg update или hg merge, процедура исправления этого очень проста. Просто найдите ближайшую машину с Linux или Unix, клонируйте на нее репозиторий и используйте команду hg rename для изменения имени на какое-то другое, так чтобы конфликта не было. Сохраните свои изменения (hg commit), сделайте hg pull или hg push в ваш Windows или MacOS репозитарий и hg update на ревизию без конфликта. Список изменений с конфликтом регистра останется в истории вашего проекта и вы все еще будете не в состоянии выполнить hg update вашей рабочей директории к этому набору изменений в Windows или MacOS, но вы сможете продолжить разработку.

Сервлеты и многопоточность

Вопрос по данному коду :
1.Насколько я знаю Servlet Container отвечает за потокобезопасность сервлетов.
2.Но сушествует вариант что несмотря на это может возникнуть проблема с потокобезопасностью как например в данном коде.
Мой вопрос заключается в том: почему при данном коде переменная counter считается не потокобезопасной ?
package threadSafety; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; import java.math.*; public class SimpleServlet extends HttpServlet { //A variable that is NOT thread-safe! private int counter = 0; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println(""); resp.getWriter().println(this + ":
"); for (int c = 0; c < 10; c++) { resp.getWriter().println("Counter = " + counter + "
"); try { Thread.currentThread().sleep((long) Math.random() * 1000); counter++; } catch (InterruptedException exc) { } } resp.getWriter().println(""); } }


Ответ

Создание собственных потоков в контейнере сервлетов - не очень хорошая практика. Если есть возможность, то лучше перейти к асинхронной обработки запросов
В противном случае, вы сами обязаны отвечать за потокобезопасность, отключение и вообще весь контроль за вашими потоками.
Отвечая на ваши вопросы:
1.Насколько я знаю Servlet Container отвечает за потокобезопасность сервлетов.
Для порожденных вами потоков - нет.
2.Но сушествует вариант что несмотря на это может возникнуть проблема с потокобезопасностью как например в данном коде.
Так как переменная у вас уровня экземпляра, а контейнер создает на каждый сервлет только один экземпляр его класса(https://java.net/downloads/servlet-spec/Final/servlet-3_1-final.pdf - глава 2, параграф 2.2), то и эта переменная будет общая для всех запросов и соответственно модифицировать ее могут несколько запросов одновременно.

Использовать терминал с сессией через Ruby

Ruby дает выполнять команды •Nix терминала через System, Exec, Irb и тд, но у меня не получается сохранить сессию между командами. То есть я открываю консольное приложение в нем через, например, exec("./app"), но внутренние команды исполнить не могу, как сделал бы это через обычную сессию /bin/sh.
# ./app app> do_something
Вот этот do_something и "отпадывает".
Спасибо кто откликнется, может библиотеки знает по этой теме, всему рад.
UPD: То есть у меня есть ./app и внутри него мне надо исполнить ряд действий отлавливая вывод инфы и на ее основе слать команды дальше. А проблема, с которой я сталкиваюсь, это когда программа доходит до команды запуска приложения она перенаправляет меня в терминал и прерывается (ожидая завершения работы текущей программы), а мне нужно исполнить внутри открывшегося ./app еще команды.


Ответ

Читайте внимательнее документацию.
exec делает "немножко" не то, что вы ожидаете
Replaces the current process by running the given external command
...он замещает текущий процесс Ruby. То есть, на этой строчке ваша программа завершается, вместо неё ОС приклеивает процесс, который вы запустили.
Скорее всего, вам нужен модуль Open3 из стандартной библиотеки, а конкретно методы popen3 и/или popen2. Они запускают новый процесс, прицепив к его потокам стандартного IO подконтрольные Ruby потоки, а также создают отдельный Thread, который ждёт завершения процесса.
То, что вы вводили бы с клавиатуры, подавайте в полученный stdin нового процесса, и не забывайте читать его stdout и stderr, поскольку размер их буферов обычно ограничен, и их заполенность может повесить программу. В документации есть об этом детали.

написание скрипта в скрипте JS

имеется такой код:
"; newWin.document.write(html);
но он интерпретируется неправильно, находящийся в строке html расценивается браузером как закрывающий тэг первой строки, т.е. последний закрывающий script остается без пары, а на странице появляется '; newWin.document.write(html);
задача: открытие нового окна и вызов диалога печати. для меня очень странно что браузер часть значения строки воспринимает как html который необходимо интерпретировать.
может есть более лаконичные способы решения моей задачи?


Ответ

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

Как перехватить нажатия клавиш?

Пишу калькулятор под WPF. На данный момент нажатие на кнопки производит запись данных в textbox, но хотелось бы чтобы при нажатии цифр на клавиатуре они были забиндены к методам, т.е. чтобы тупо было перехват кнопок. Делать через WinApi думаю будет слишком избыточно, нет ли в самом WPF такого?
private void One_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "1"; storageVariable += "1"; } private void Two_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "2"; storageVariable += "2"; } private void Three_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "3"; storageVariable += "3"; } private void Four_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "4"; storageVariable += "4"; }


Ответ

Проще всего подписаться на события KeyDown или PreviewKeyDown в окне.
Порядок доставки такой: сначала приходит PreviewKeyDown окну, затем по цепочке внутрь контролу, у которого фокус, потом приходит KeyDown контролу, и по цепочке вверх к окну.
Если вам не нужны на уровне окна нажатия на служебные клавиши, которые обработает TextBox (left/right/del), подписывайтесь на KeyDown. PreviewKeyDown позволяет также заблокировать ввод текста (например, вы хотите запретить ввод буквы A), и получает всё подряд.
Пример:
...

void OnPreviewKeyDown(object sender, KeyEventArgs e) { var key = e.Key; if (key == Key.A) e.Handled = true; }

Выбрать значения, встречающиеся в обеих таблицах SQL (BigQuery)

Подскажите, каким оператором нужно воспользоваться. Имеется 2 таблицы:
table1 table2 clientId clientId 1 2 2 3 3 4
Необходимо составить запрос, чтобы получить столбец со значениями, которые встречаются в обеих таблицах:
clientId 2 3
P.S. как обратиться к столбцу таблицы в BigQuery, если название таблицы выглядит вот так [big-query-1265:p1_Clickstream.che_magazin_2505_1207], а столбец clientId?


Ответ

SELECT table1.clientId FROM table1 INNER JOIN table2 on table1.clientId = table2.clientId
P.S.
Название таблицы.Название столбца, но у вас какое то странное название таблицы - если оно соответствует действительности дайте ему псевдоним
SELECT t1.clientId FROM [big-query-1265:p1_Clickstream.che_magazin_2505_1207] as t1 INNER JOIN table2 on t1.clientId = table2.clientId

Загрузка определенного контента


function link() { $("#preload").html('Загружаем...'); var url = $("a").attr("id");
$.ajax({ url: url, cache: false, success: function(html) { $("#content").html(html); $("div.preload").remove(); } }); }
При клике подгружается содержимое ajax.html
...

Соответственно загружается весь файл, а необходимо загрузить только контент с идентификатором 12345. Как это сделать?


Ответ

Тут даже форма ajax не нужна
jquery load


ajax.html
qeqqe
qwert

Как автоматически на linux передавать логин пароль wifi?

Требуется, чтобы Raspberry Pi автоматически подключался к Wi-fi.
Wi-fi-точка настроена так, что при подключении к ней автоматически открывается браузер, где нужно ввести логин и пароль и поставить галочку (соглашение с правилами).
К wi-fi обычно подключаюсь с помощью wicd.
Как передавать логин и пароль автоматически, например при помощи curl (-F)?


Ответ

если вы используете программу wicd, то, согласно man wicd, для выполнения каких-либо действий после установки соединения можно использовать, например, скрипт оболочки, поместив его в каталог /etc/wicd/scripts/postconnect/
для привязки к нужному интерфейсу в этом скрипте можно использовать переданные скрипту параметры
$1 - the connection type (wireless/wired). $2 - the ESSID (network name). $3 - the BSSID (gateway MAC).
примерно так
if [ "$1" == "wireless" -a "$2" == "имя-точки-доступа" ]; then curl ... fi
а уж какие параметры передать программе curl (wget и т.п.), чтобы она «залогинилась» на страничке провайдера, целиком и полностью зависит от содержимого этой странички.

Как создать картинку из текста?

Нужно создать из текста картинку (объект типа Image или Bitmap), на которой будет отрисован данный текст заданным шрифтом (и больше ничего).
Так же нужно сделать перенос слов, чтобы текст вмещался в нужную мне ширину.
UPD: Извините, но я не понимаю, чего вам не хватает. Я задал конкретный вопрос. Я не понимаю, что в нем не понятно. Есть какой то текст типа string, мне нужно создать из него изображение типа Image или Bitmap, причем нужно, чтобы слова переносились. То есть чтобы текст влезал в заданную ширину.


Ответ

Есть несколько способов для вывода текста на картинку.
Метод Graphics.DrawString. Требует подключения библиотеки System.Drawing.dll
string text = "Какой-нибудь весьма длинный текст, не влезающий в картинку по длине, поэтому требующий переноса"; Rectangle rect = new Rectangle(0, 0, 200, 100);
// Создаём битмап с нужными размерами и форматом пикселей. Bitmap bmp1 = new Bitmap(200, 100, PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(bmp1)) using (Font font = new Font("Arial", 10)) { // Заливаем фон нужным цветом. g.FillRectangle(Brushes.White, rect);
// Выводим текст. g.DrawString( text, font, Brushes.Black, // цвет текста rect, // текст будет вписан в указанный прямоугольник StringFormat.GenericTypographic ); }
Метод TextRenderer.DrawText. Требует подключения библиотеки System.Windows.Forms.dll
Bitmap bmp2 = new Bitmap(200, 100, PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(bmp2)) using (Font font = new Font("Arial", 10)) { g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
// Заливаем фон нужным цветом. g.FillRectangle(Brushes.White, rect);
// Выводим текст. TextRenderer.DrawText( g, text, font, rect, Color.Black, // цвет текста TextFormatFlags.WordBreak // включаем перенос слов ); }
У обоих методов большое количество параметров, позволяющих гибко настраивать вывод текста.

Привязка содержимого класса к TreeView

Допустим у меня есть некие классы:
public class Person{ String name; int age; List works; List certificates; }
public class Work{ String companyName; String positionName; int experienceAtMonth; }
public class Certificate{ String organization; String position; Date date; }
Суть в том, что мне необходимо отобразить в TreeView
экземпляры Person, внутри которых отображается список работ и сертификатов.
Остальные поля должны отображаться в отдельном контейнере (типа TextField) при нажатии на соотв. ноду.
Можно конечно формировать строки, а при работе с данными искать по названию. Однако мне это кажется костылем и я бы хотел его избежать и использовать какой-то binding, однако не могу понять, каким образом описать данное поведение.
По сему, подскажите, пожалуйста возможные реализации.


Ответ

UPDATE: + крайне примитивный биндинг
Добавляем интерфейс:
public interface Titlable { String getTitle(); StringProperty getProperty(); }
Дописываем ваши классы:
public class Person implements Titlable { String name; int age; List works; List certificates; public String getTitle() { return name; }
private StringProperty property;
public StringProperty getProperty() { if (null == property) return property = new SimpleStringProperty( name + " " + age ); return property; } }
public class Work implements Titlable{ String companyName; String positionName; int experienceAtMonth; public String getTitle() { return companyName; } private StringProperty property;
public StringProperty getProperty() { if (null == property) return property = new SimpleStringProperty( companyName + " " + positionName ); return property; } }
public class Certificate implements Titlable{ String organization; String position; Date date; public String getTitle() { return organization; }
private StringProperty property;
public StringProperty getProperty() { if (null == property) return property = new SimpleStringProperty( organization + " " + position + " " + date ); return property; }
}
Собственно само дерево:
public class CustomTree extends TreeView {
private final ObservableList persons; private final Main main;
public CustomTree( ObservableList persons, Main main ) { this.persons = persons; this.main = main;
TreeItem rootItem = new TreeItem(); rootItem.setExpanded( true ); this.setShowRoot( false ); this.setCellFactory( p -> new TreeCell() { @Override public void updateItem( Titlable t, boolean empty ) { super.updateItem( t, empty ); setText( t == null ? null : t.getTitle() ); } });
for ( Person p : persons ) { TreeItem pItem = new TreeItem( p ); rootItem.getChildren().add( pItem ); Titlable fake1 = new Titlable() { public String getTitle() { return "Works"; } private StringProperty property = new SimpleStringProperty( "-" ); }; Titlable fake2 = new Titlable() { public String getTitle() { return "Certificates"; } private StringProperty property = new SimpleStringProperty( "-" ); }; TreeItem f1Item = new TreeItem( fake1 ); TreeItem f2Item = new TreeItem( fake2 ); pItem.getChildren().addAll( f1Item, f2Item ); for ( Work w : p.works ) { f1Item.getChildren().add( new TreeItem( w ) ); } for ( Certificate c : p.certificates ) { f2Item.getChildren().add( new TreeItem( c ) ); } } setRoot( rootItem );
EventDispatcher originalDispatcher = this.getEventDispatcher(); this.setEventDispatcher( new NotExpandedEventDispatcher( originalDispatcher ) ); }
private class NotExpandedEventDispatcher implements EventDispatcher{
private final EventDispatcher originDispatcher;
public NotExpandedEventDispatcher( EventDispatcher originDispatcher ){ this.originDispatcher = originDispatcher; }
@Override public Event dispatchEvent( Event event, EventDispatchChain tail ) { if ( event instanceof MouseEvent ) { if ( ((MouseEvent)event).getButton() == MouseButton.PRIMARY && ((MouseEvent)event).getClickCount() >= 2 ) { if ( !event.isConsumed() ) { TreeItem selectedItem = getSelectionModel().getSelectedItem(); main.doSomething( selectedItem .getValue() ); } event.consume(); } }else if ( event instanceof KeyEvent ){ if ( ((KeyEvent)event).getCode() == KeyCode.ENTER ){ if ( !event.isConsumed() ) { TreeItem selectedItem = getSelectionModel().getSelectedItem(); main.doSomething( selectedItem .getValue() ); } event.consume(); } } return originDispatcher.dispatchEvent( event, tail ); } } }
Проверяем:
public class Main extends Application {
private TextArea ta;
@Override public void start( Stage stage ) {
ObservableList persons = FXCollections.observableArrayList();
Work work1 = new Work(); Work work2 = new Work(); Work work3 = new Work(); Work work4 = new Work(); Work work5 = new Work(); Work work6 = new Work(); Work work7 = new Work(); Work work8 = new Work(); work1.companyName = "roga i kapbIta 1"; work2.companyName = "roga i kapbIta 2"; work3.companyName = "roga i kapbIta 3"; work4.companyName = "roga i kapbIta 4"; work5.companyName = "roga i kapbIta 5"; work6.companyName = "roga i kapbIta 6"; work7.companyName = "roga i kapbIta 7"; work8.companyName = "roga i kapbIta 8";
Certificate certificate1 = new Certificate(); Certificate certificate2 = new Certificate(); Certificate certificate3 = new Certificate(); Certificate certificate4 = new Certificate(); certificate1.organization = "kapbIta i roga 1"; certificate2.organization = "kapbIta i roga 2"; certificate3.organization = "kapbIta i roga 3"; certificate4.organization = "kapbIta i roga 4";
Person a = new Person(); Person b = new Person(); Person c = new Person(); a.name = "ivan"; b.name = "da"; c.name = "mar'ya"; a.works = new ArrayList<>( Arrays.asList( work1, work2, work3 ) ); b.works = new ArrayList<>( Arrays.asList( work4, work5, work6 ) ); c.works = new ArrayList<>( Arrays.asList( work7, work8 ) ); a.certificates = new ArrayList<>( Arrays.asList( certificate1 ) ); b.certificates = new ArrayList<>( Arrays.asList( certificate2 ) ); c.certificates = new ArrayList<>( Arrays.asList( certificate3, certificate4 ) );
persons.addAll( a, b, c );
Parent container = new CustomTree( persons, this ); ta = new TextArea();
Scene scene = new Scene( new HBox( container, ta ) ); stage.setWidth( 650 ); stage.setHeight( 600 ); stage.setScene( scene ); stage.show(); }
public static void main(String[] args) { launch(args); }
public void doSomething( Titlable t ) { ta.textProperty().unbind(); ta.textProperty().bind( t.getProperty() ); }
}

PHPStorm & Less: как компилировать минимизированный файл с помощью File Watchers?

Каждый раз сталкиваюсь с этим вопросом и с долго ищу ответ англоязычном stackOverflow.
В PHPStorm нужно компилировать "на лету" минимизированный .css файл из .less. File Watcher настроен, файл компилируется исправно, но какой флаг нужно добавить к аргументам, чтобы получить минимизированный файл?


Ответ

Введение
Представленный в этой части код не является ответом!
Безуспешно попытавшись найти ответ на свой вопрос (вероятно, плохо искал), я решил поступить так, как следовало сделать с самого начала - заглянуть в help node-модуля less. Выполнив команду, я получил исчерпывающий ответ -
-x, --compress Compresses output by removing some whitespaces.
Вот оно! - подумал я, добавил флаг --compress в настройках File Watcher и получил... минимизированный файл с предупреждением
The compress option has been deprecated. We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.html
Дальше я проследовал на страницу https://github.com/less/less-plugin-clean-css, где нашел итоговую, рабочую инструкцию.
Рабочий ответ
Требуется установить дополнительно модуль less-plugin-clean-css командой
npm install -g less-plugin-clean-css
и затем к аргументам Watcher'а добавить
--clean-css="--s1 --advanced --compatibility=ie8"
в итоге настройки Watcher'a в моем случае выглядели вот так:

Файл получаем минимизированный, но с сохраненными комментариями. Описание всех аргументов модуля clean-css можно найти на странице https://github.com/jakubpawlowicz/clean-css. Там я нашел ответ, как при минимизации убрать комментарии:
требуется к аргументам для --clean-css добавить флаг --s0 (в моем случае - исправить уже имеющийся флаг --s1) таким образом:
--clean-css="--s0 --advanced --compatibility=ie8"

Наблюдение за транзакциями

Имеется Java EE приложение (на сервере WildFly), работа с базой идёт через предоставляемый сервером DataSource. Каким образом можно произвести наблюдения, за происходящими транзакциями в ходе выполнения запроса к EJB компоненту? То есть, произвести дебаг транзакций, грубо говоря.


Ответ

Для наблюдения за транзакциями в WildFly можно использовать, например, Narayana Transaction Analyser (NTA) (http://narayana.io/downloads/index.html). Несмотря на некоторую "древность" последней версии (апрель 2014 года) и альфа-статус, продукт вполне работоспособен и выдаваемая им информация является достаточно полезной.

Как реализовать передвижение картинки внутри блока?

Дан блок с фиксированной шириной и высотой. Внутри блока картинка, с размером более, чем родитель. Как реализовать передвижение этой картинки внутри блока без полос прокрутки?
Результат:  эффект перемещения (Drag) картинки схожий с перемещением как на картах. В примере используются: main_div как родительский элемент, а "Info_Rectangle" как дочерний элемент.
.Info_Rectangle { height:1065px; background: blue; position: absolute; width: 1065px; z-index: 0; font-size: 70px; } .main_div{ width:900px; height:900px; }


P.S. Как создать подобный эффект без jquery?


Ответ

Полчаса писал вчера вам содержательный ответ, соорудил большой и красивый пример, а вдруг "вы не можете опубликовать ответ, так как вопрос был удален". Обидно, однако. Не делайте так больше.
Хорошо, что я писал ответ на jsfiddle в своем аккаунте: https://jsfiddle.net/ipshenicyn/480gg35o/ Код рабочего примера с jsfiddle ниже (сниппеты здесь шалят второй день, поэтому пока plaintext).
По вопросу "нужна ли JQ UI": смотрите сами. Если вопрос только в простом перетаскивании этой картинки и вам подойдет мой код - нет нужды подключать жирную и медленную либу.
HTML


CSS
.box{ width: 500px; height: 500px; border: 30px solid green; background-color: white; overflow: hidden; } .box img{ cursor: move; position: relative; }
JS
$(function(){ var drag = false; $("#src").on('mousedown', function(e){ drag = true; }).on('mouseup mouseout', function(){ $(this).data({ startX: 0, startY: 0, }); drag = false; }).on('mousemove', function(e){ e.preventDefault(); if(drag){ console.log($(this).data(),e); var left = parseInt($(this).css('left')) || 0, top = parseInt($(this).css('top')) || 0, newLeft = left + (e.clientX - ($(this).data().startX || e.clientX)), newTop = top + (e.clientY - ($(this).data().startY || e.clientY)), parentHeight = $(this).parent().height(), parentWidth = $(this).parent().width(), imgHeight = $(this).height(), imgWidth = $(this).width();
$(this).css({ left: newLeft < 0 && (Math.abs(newLeft - parentWidth) < imgWidth) ? newLeft : left, top: newTop < 0 && (Math.abs(newTop - parentHeight) < imgHeight) ? newTop : top }).data({ startX: e.clientX, startY: e.clientY, }); } }) })

Использование EJB и EJB Lite в Wildfly

Каким образом определяется, какой тип EJB-компонентов будет использоваться в приложении? Wildfly поддерживает и веб и полный профиль JEE 7, а значит реализует и EJB, и EJB lite. К примеру, я хочу настроить приложение так, чтобы в нём использовались только EJB lite, как мне этого добиться?


Ответ

EJB Light представляет часть (наиболее часть используемую) функционала по сравнению с полноценным EJB, что по идее должно позволять запускать приложения базирующиеся на EJB Light на более легковесных версиях серверов приложений (application server) так называемый jee web-profile. Реализующие web-profile сервера можно посмотреть здесь
EJB Light 3.2 поддерживает все то же что и EJB 3.2 кроме:
Удаленных интерфейсов (remote interfaces) Бинов управляемых сообщениями (message-driven) Эндпоинтов для JAX-WS Web-сервисов RMI-IIOP Атрибут persistent для аннотации @Schedule (реализует cron подобный запуск методов)
Каким образом определяется, какой тип EJB-компонентов будет использоваться в приложении? То есть, каким образом можно понять/сконфигурировать то, будут ли использоваться EJB Lite или полноценные EJB?
Зависит от самого сервера и от того реализует он полноценную Java EE спецификацию (Full Platform) или Web Profile. Но разумеется если вы используете функции которые не поддерживаются в Web Profile то на сервере реализующем Web Profile такое приложение не запустится. Так же если сервер реализует Full Platform то неважно используете ли вы функцию из EJB Lite или EJB будет использоваться один и тот же EJB 3.2 Full API движок.

Судя по документации WildFly web profile запускается по умолчанию, для изменения режима работы (Full Plaform <-> Web Profile) необходимо запускать сервер с разной конфигурацией.
Например (запуск Full Plaform):
./standalone.sh --server-config=standalone-full-ha.xml
Конфигурация определяет подключенный модули сервера блок extensions. Отличия Full Platform для версии сервера 10.1.0.CR1 заключаются в наличие следующих модулей:

Можно ли вынести функцию из views.py в Django?

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


Ответ

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

Как сделать такой вывод изображений?

Здравствуйте. Есть несколько изображений, все примерно одинакового размера. Я хочу вывести эти изображения на странице в таком стиле.
Думал просто сделать
imga img { width: 50%; }
Но тогда они получаются все одинакового размера. Наверное тут не обойтись одним css. Буду благодарен за полезную информацию.


Ответ

Конечно же одним imga img { width: 50%;} не обойтись. Тут нужен и css и js
Я предлагаю вам взглянуть на Freewall
Это кроссбраузерный responsive Jquery плагин, который поможет вам создать много различного типа макетов сеток: гибкий макет, макет для фото, вложенные макеты, metro стиль, как у pinterest и прочие виды. Там используется CSS3 анимация. Данный плагин - хорошее решение для динамического создания макета сетки как для десктопа, так и для мобильных версий и версий типа tablet.
домашняя страница плагина

Если он не устроит, то в поиске по запросу javascript photo brick вы сможете, я думаю, найти что-то еще подходящее для вас, например
http://masonry.desandro.com/
http://callmecavs.com/bricks.js/
и многое другое.

Java как выдать уведомление в трее Windows 10

Необходимо выдать уведомление вроде этого Как сделать подобное на java. Если есть костыль только для Windows то тоже подойдет
Пробовал это, но не получилось


Ответ

Пробовал это, но не получилось
Не очень информативно. Вот примерно такой же пример, но максимально упрощённый:
import java.awt.*;
public class Test {
public static void main(String[] args) throws Exception { if (SystemTray.isSupported()) { SystemTray tray = SystemTray.getSystemTray();
java.awt.Image image = Toolkit.getDefaultToolkit().getImage("images/tray.gif"); TrayIcon trayIcon = new TrayIcon(image); tray.add(trayIcon); trayIcon.displayMessage("Test.", "This is a message to test notifications in Windows 10", TrayIcon.MessageType.INFO); } }
}
Вот снимок экрана после его запуска в среде разработки IntellyJ IDEA, под управлением Java 8, ОС Windows 10:

Как правильно перехватывать нажатия клавиш в Windows Forms (C++)?

На Form есть DataGridView (в нём показывается одна строка) и WebBrowser
У Form на Event keyDown есть обработчик, который срабатывает на нажатие F2, который записывает слово в определенную ячейку. Этот же обработчик привязан к DataGridView
private: System::Void CSV_WViewForm_KeyDown( System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { if (e->KeyCode == Keys::F2) /*Do something*/; }
Необходимо, чтобы нажатие на F2 срабатывало всегда и сразу (с первого раза). Для этого я воспользовался свойством KeyPreview = false; (пробовал устанавливать его в true - не помогало).
protected: virtual bool ProcessCmdKey(Message% msg, Keys keyData) override { if (keyData == Keys::F2) { this->dataGridView1->Focus(); return Form::ProcessCmdKey(msg, keyData); } return Form::ProcessCmdKey(msg, keyData); }
Но когда Focus находится в WebBrowser, F2 не всегда срабатывает (иногда приходится нажимать F2 дважды). Как это победить?
Проект Windows Forms (C++, Visual Studio 2015)


Ответ

Если уж перехватываете ввод пользователя на уровне формы, то там его и обрабатывайте. Простой тестовый проект с эквивалентным кодом на C# показал следующее:
Если элемент в фокусе, все отрабатывает как надо. Если элемент не в фокусе и мы предварительно на уровне формы переключаем фокус на другой элемент, то событие о нажатой клавише уходит тому элементу, который был в фокусе во время нажатия на клавишу, что в принципе логично. Отсюда и необходимость второго нажатия на клавишу, т.к. первое нажатие отрабатывает только передачу фокуса и уходит предыдущему владельцу фокуса.
Что делать?
Перенести всю обработку клавиш, которые перехватываются на уровне формы, в код перехвата (в ProcessCmdKey), чтобы не загромождать код, сделать это в виде вызова отдельных методов для каждой перехватываемой клавиши.
Изменить ваш код можно так:
virtual bool ProcessCmdKey(Message% msg, Keys keyData) override { if (keyData == Keys::F2) { this->dataGridView1->Focus();
//do somthing for F2-key
return true; } return Form::ProcessCmdKey(msg, keyData); }
или через switch - case если клавиш много. И не забываем удалить лишние обработчики или исключить из них обработку клавиш, перехватываемых на уровне формы.

Использование _G и _ENV

Я знаю: _G - окружение единое для всех модулей, файлов, блоков кода и т.д., _ENV - частное для каждого.
Увы, нюансы их использования я не совсем понял. (То ли я дурак, то ли книга не очень)
_ENV уникально только для каждого модуля\файла или для каждого блока, будь то функция, цикл, do/end и т.д. ? По умолчанию _ENV присваивается _G? Доступны ли переменные local в _ENV?


Ответ

1 и 2: судя по luac -l -l, _ENV есть upvalue (т.е. забита для каждой функции, менять никто не запрещает), и да, по умолчанию она равна _G. По факту, как ясно из того же luac -l -l, весь доступ к "глобальным переменным" (точнее, свободным именам), идёт через _ENV 3. Нет, не доступны. Вы же их не видете в _G, они на то и локальные. UPD: что важно, это всё начинается в lua 5.2, в 5.1 такого нет.
P.S.: как раз моё по теме: http://goo.gl/E3d5Zb

Заполнить отсутствующие строки SQL?

Есть такой запрос:
SELECT DATE_FORMAT(`orders`.`date`, '%d.%m.%Y') as date, SUM((`orders_items`.`price`)*(`orders_items`.`count`)) AS `money` FROM `orders_items` LEFT JOIN `orders_groups` ON `orders_items`.`order_group_id` = `orders_groups`.`id` LEFT JOIN `orders` ON `orders_groups`.`order_id` = `orders`.`id` LEFT JOIN `goods` ON `goods`.`id` = `orders_items`.`good_id` LEFT JOIN `users` ON `orders`.`user_id` = `users`.`id` LEFT JOIN `orders_status` ON `orders_status`.`id` = `orders_items`.`status_id` WHERE date(`orders`.`date`) BETWEEN '2016-08-02' AND '2016-08-15' GROUP BY DATE_FORMAT(`orders`.`date`, '%d.%m.%Y') ORDER BY `orders`.`date` DESC
Результат получается такой:

Как можно заметить, между датами 11.08.2016 и 15.08.2016 не хватает 4 дня. То есть, в эти дни не было записей (0 строк). Собственно вопрос, как выводить все даты в указанном в BETWEEN промежутке, даже если строк нету (12.08.2016 – 0, 13.08.2016 – 0...)?


Ответ

mysql... Дополните данные на приложении, это будет проще. Нативных простых способов нет, вызов хранимки в from использовать нельзя, всё печально.
Если всё-таки хочется силами mysql - вам понадобится опорная таблица с датами, к которой уже left join вашу выборку. Можете нагенерировать предварительно таблицу из одного столбца типа date (тысячи лет вам хватит? Всего лишь неполные 366 тысячи записей, то есть мелочь), можете строить на приложении огромный
select '2016-08-11' as day union all select '2016-08-12' union all select '2016-08-13' /*и так далее*/
Можно воспользоваться какой-нибудь магией неочевидных декартовых произведений чисел и конвертацией в даты. Для небольших выборок (типичных для разбивки по дням, кстати. 1000 дней - это фигня для такого запроса, но почти 3 года календарного времени) даже может адекватно шевелиться. Что-то вроде такого:
SELECT :start + interval 5*5*(a-1)+5*(b-1) + c day AS d FROM ( SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) x CROSS JOIN ( SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) y CROSS JOIN ( SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) z WHERE :start + interval 5*5*(a-1)+5*(b-1) + c day < :stop ORDER BY d;
На стороне приложения опять же этот запрос надо генерировать с нужным числом cross join и правильным построением интервала.
PS: запрос, видимо, упрощён для вопроса (иначе стоит убрать пару лишних джойнов), но условие вида WHERE date(ordersdate) operator - прямой запрет на использование индекса по этому полю. А судя по запросу - это поле довольно селективно и индекс весьма пригодился бы. Используйте
where `orders`.`date` >= '2016-08-02' and `orders`.`date` <= '2016-08-15' + interval 1 day

Gradle + Dagger2

Читаю tutorial по Dagger2, и возник вопрос, там сказано, что в root build.gradle нужно добавить:
dependencies { // other classpath definitions here classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }
Где именно находится root build.gradle? Это build.bradle, который Project?


Ответ

Напишу решение к которому пришла, возможно кому-то еще тоже пригодится:
1) Можно добавить в root build.grade, в dependencies: classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' , даже не смотря на предупреждение, что туда нельзя добавлять.
2) Либо можно добавить в app/build.gradle такие строчки кода:
buildscript { repositories { jcenter() } dependencies { // the latest version of the android-apt plugin classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } }
apply plugin: 'com.neenbedankt.android-apt'

Регулярное выражение для проверки пароля

Помогите, пожалуйста правильно написать регулярное выражение для пароля. Строка должна быть не меньше 8 символов, содержать как минимум 1 большую букву, одну маленькую букву и ЛИБО спец. символ ЛИБО цифру.
Сейчас у меня есть модель, но здесь идет И спец. символ И цифра должна быть, как сделать проверку именно Либо спец. символ либо цифра?
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,40})


Ответ

Ваше выражение почти готово: только \d надо перенести в [@#$%] и удалить ограничение в 40 символов:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9@#$%]).{8,}$ ^^^^
Если этот шаблон используется в String#matches, ^ и $ можно удалить. Если верхнее ограничение в 40 символов нужно (не указано в вопросе), можно вернуть {8,40}
Суть в том, что отношения между членами внутри символьного класса отношения ИЛИ, поэтому блок (?=.*[0-9@#$%]) требует присутствия в строке ИЛИ цифр, или указанных символов.
Демо регулярного выражения
Пример на Java
String s = "###abcA@@"; String pat = "(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9@#$%]).{8,}"; if (s.matches(pat)) { System.out.println("Пароль действителен"); } else { System.out.println("Пароль недействителен"); }

Градиент для статус бара


Статус бар в макете так же градиентный, пробовал просто цвет подогнать монотонный - не подходит, и дизайнера не устраивает.
Предложили использовать темно-серый, но вдруг можно.
Так можно ли в андроиде реализовать подобный функционал?
Ps. картинки больше найти не удалось, но надеюсь здесь всё видно.


Ответ

Сделать градиентный статус бар можно, установив для него полупрозрачноть
@Override protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); w.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); w.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
создать drawable с градиентом и установить его как background в toolbar
gradient_drawable.xml

Bootstrap. Как сделать сложный li элемент

Хочу сделать список ссылок, чтобы в некоторых строчках списка была одна или несколько ссылок.
Допустим у меня есть ссылка1 без ссылки на гитхаб, а вторая строка списка имеет ссылку на скачивание плюс ссылку на исходники на гитхабе. И чтобы у обеих ссылок ширина блока одинаковая была
Как мне сделать класс github чтобы я мог легко добавлять его к другим ссылкам.
Пробовал вот так:
HTML:


CSS:
.github { background: url('../images/github.svg') no-repeat; background-size: contain; padding: 3% 3% 3% auto; }
.example_view li { padding: 3% 2%; margin: 0 0 3px 0; background: #ddbdff; font-size: 2vmin; }
Но высота гихабовского col'а становится равной 0.989583px
Может есть способ проще и изысканней? Хардкод не нужен


Ответ

Да, способ лаконичнее - есть. Ссылку-иконку, если она есть - добавляем в li > .pull-right > a, а основную ссылку располагаем традиционно в li > a


Я использовал бутстраповский класс .list-unstyled для генерации списка без маркеров и паддинга слева. И стилизовал li элементы этого списка, как было у вас с .example_view li
.list-unstyled > li { background: #ddbdff; font-size: 2vmin; line-height: 4vmin; margin: 0 0 3px 0; padding: 3% 2%; }
.pull-right - тоже класс бутстрапа, он применяет к блоку атрибут float: right, в итоге блок располагается в крайней правой части контейнера, в нашем случае - в крайней правой части li. А основная ссылка будет занимать всю доступную ей ширину, слишком длинная ссылка перенесется на следующую строку:
Ссылок-иконок внутри блока .pull-right вы можете разместить сколько угодно - они будут располагаться в крайней правой части li в один ряд с небольшим отступом друг от друга.
  • Foo binary link

  • За отступы между иконками отвечают стили:
    .icon + .icon { margin-left: 4px; }
    В примере выше также видно разные классы у ссылок иконок - .icon-github и .icon-gitlab. Меняя эти классы у ссылок-иконок - вы можете использовать разные изображения. Единственное условие - изображения должны быть квадратными, чтобы не было нарушения пропорций. Если ваша иконка прямоугольная - просто впишите ее в квадратный холст и сохраните в таком виде.
    За это отвечают эти стили:
    .icon { background-size: cover; display: inline-block; height: 4vmin; width: 4vmin; } .icon-github { background-image: url('https://upload.wikimedia.org/wikipedia/commons/9/91/Octicons-mark-github.svg'); } .icon-gitlab { background-image: url('https://upload.wikimedia.org/wikipedia/commons/1/18/GitLab_Logo.svg'); }
    Обратите внимание на высоту и ширину иконок - они равны интерлиньяжу основной ссылки (4vmin). Это помогает выровнять ссылки-иконки по высоте вместе с текстом (хотя это и не единственный способ добиться этого).
    Также background-size: contain здесь можно уже не использовать, подойдет и cover
    Если что нужно поправить - отпишите в комментарии. Рабочий пример: https://jsfiddle.net/gambala/Lnr4a4wp/

    Перезаписать одного из предков для коммита слияния

    Что есть:
    Есть ветка C в которую вмержены ветки А и В.
    * 113cfa6 (HEAD -> master) 12 * 74f6351 10 | * f63d30b (C) Merge branch 'B' into C | |\ | | * afe44c6 (B) 8 | | * 1da5826 7 | * | 3b5fa89 11 | * | 93d7b1d Merge branch 'A' into C | |\ \ |/ / / | * | 9023742 (A) 3 | * | 8e7ac5c 2 * | | eb15793 (X) 9 | |/ |/| * | 01ea56d 6 * | 11585f1 5 * | c8905ca 4 |/ * dc6c154 1
    Что нужно:
    Нужно перемотать ветку С на последний комит мастера
    * 6099fa1 (C) Merge branch 'B' into C |\ | * afe44c6 (B) 8 | * 1da5826 7 * | b8a7ffd 11 * | 7f48be6 Merge branch 'A' into C |\ \ | * | 9023742 (A) 3 | * | 8e7ac5c 2 * | | 113cfa6 (HEAD -> master) 12 * | | 74f6351 10 * | | eb15793 (X) 9 | |/ |/| * | 01ea56d 6 * | 11585f1 5 * | c8905ca 4 |/ * dc6c154 1
    Что пробовал:
    git rebase master C Но это убивает все мердж комиты и ребейзит все комиты веток А и В на мастер
    История:
    Объясню откуда появились такие странные требования. master используется для получения актуальных данных из remoute, все поставки в него через pullrequest. Каждая отдельная ветка (А,В) это решения для определенного issue. В конце какого то периода создается ветка pr(С) в которую вмердживают несколько бранчей(А,В), создают pullrequest и запускают тесты. Тесты как всегда падают, и фиксы по возможности поставляют в те бранчи(А,В) которые вмерджены в pr(С). Но иногда возникают конфликты или фиксы невозможно добавить в бранчи(А,В), так появляются отдельные комиты (11) в ветке pr(С). Пока проходят фиксы ветка master уже убегает вперед и нужно подмержить изменения в ветку pr(C). Мерджи из мастера происходят так часто что в ветке pr(C) половина коммитов это подливка мастера, потом pullrequest принимается и мастер превращается в паутину "подливок из мастера". Появилась идея избежать ненужных мерджей с мастером, и было принято решение перематывать ветку pr(С) от последнего комита master вместо мерджа с ним.


    Ответ

    Вам нужна опция -p (--preserve-merges), она заставляет rebase не развёртывать мёржи, а сохранять их. На заметку: не рекомендуется эту опцию использовать вместе с -i (--interactive), а если уж использовать, то не переупорядочивать коммиты, иначе результат может быть неожиданным.
    git rebase -p master C

    Как адаптировать блок

    у меня разрешение 1920х1080, когда я уменьшаю разрешение, длинное меню залезает под короткое.

    Как сделать так, что бы оно сжималось и адаптировалось с помощью flexbox?
    Вот весь код на Codeopen
    body { font-size: 14px; } a { text-decoration: none; color: red; } a:after { text-decoration: none; } ul { display: flex; list-style: none; } ul.tom_menu li { padding: 15px; background-color: #9acfea; } ul.tom_menu1 li { padding: 15px; background-color: #00ee00; } .menu { display: flex; } .no-padding { padding: 0!important; }



    Ответ

    Пример на все случаи жизни:
    $(function(){ $('.css-toggle') .next().hide() .end().click(function(e){ e.preventDefault(); if($(this).data('toggle') == 1) { $(this).data('toggle', 0).html('Show CSS').next().slideUp(); } else if(!$(this).data('toggle') || $(this).data('toggle') == 0) { $(this).data('toggle', 1).html('Hide CSS').next().slideDown(); } }); }); @import url(http://fonts.googleapis.com/css?family=Montserrat); * { box-sizing: border-box; } body { background-color: #eee; color: #333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 1rem; line-height: 1.5em; } header, section { background-color: #fff; margin: 0 auto 2rem; padding: 1rem 2rem 2rem; width: 80%; } h1, h2, h3, h4, h5, h6 { font-family: Montserrat, Helvetica Neue, Helvetica, Arial, sans-serif; font-weight: bold; line-height: 1.2em; margin-bottom: 1.5rem; } h1 { font-size: 2rem; text-align: center; } h2 { font-size: 1.25rem; margin-bottom: .5rem; } a { color: #b13131; text-decoration: none; } p { margin-bottom: 1.5rem; } h2 + p { color: #757575; font-family: Montserrat, Helvetica Neue, Helvetica, Arial, sans-serif; letter-spacing: 1px; margin-top: -.5rem; text-transform: uppercase; } p code { background-color: rgba(251, 175, 93, 0.25); border: 1px solid rgba(0, 0, 0, 0.25); border-radius: 4px; display: inline-block; margin: 0 .25rem; padding: 0 .25rem; } p.note { background-color: #C4DF9B; border-left: 0.5rem solid rgba(0, 0, 0, 0.25); padding: 1rem; } pre { background-color: rgba(0, 0, 0, 0.75); border-left: 0.5rem solid rgba(0, 0, 0, 0.5); color: #FBAF5C; margin: 0; padding: 1rem; } ul { border-bottom: 1px solid #ccc; list-style: none; margin: 0 0 1.5rem 0; padding: 0; } li { background-image: linear-gradient(to bottom, transparent 50%, #a2d39c 50%, #a2d39c 95%, #7cc576 95%); background-size: 100% 200%; background-position: top center; color: #666; display: block; text-align: center; text-decoration: none; transition: all .25s ease-in-out; } li:hover { background-position: bottom center; color: rgba(0, 0, 0, 0.75); } li a { color: #666; display: block; padding: 1rem 0; transition: all .25s ease-in-out; } .css-toggle { background-color: #ddd; color: #333; display: block; padding: .5rem 1rem; text-decoration: none; text-align: center; transition: all .25s ease-in-out; } .css-toggle:hover { background-color: #FBAF5C; color: #333; } #sc1 ul { display: flex; width: 100%; } #sc1 ul li { flex: 1 1 100%; } #sc2 ul { display: flex; width: 100%; } #sc2 ul li { flex: 1 1 auto; } #sc3 { display: flex; justify-content: center; } #sc3 ul { display: flex; } #sc3 ul a { padding: 1rem 2rem; } [id^='fun'] ul { background-color: #eee; border: 0; display: flex; padding: 0 2rem; position: relative; left: -2rem; width: calc(100% + 4rem); } [id^='fun'] ul li { background-image: linear-gradient(to bottom, transparent 50%, #448ccb 50%, #448ccb 95%, #0072bc 95%); flex: 1 1 auto; } [id^='fun'] ul li a:hover { color: #eee; } #fun1 ul li { border-left: 2px solid #ddd; transform: skew(-15deg); } #fun1 ul li:last-child { border-right: 2px solid #ddd; } #fun1 ul li a { transform: skew(15deg); } #fun2 li:hover { transform: scale(1.2); }

    Navigation menus using CSS flexbox

    The markup for all examples illustrated below are identical as follow:

    <nav>
      <ul>
        <li><a href="#" title="Home">Home</a></li>
        <li><a href="#" title="Blog">Blog</a></li>
        <li><a href="#" title="Work">Work</a></li>
        <li><a href="#" title="Resources">Resources</a></li>
        <li><a href="#" title="Meta">Meta</a></li>
      </ul>
    </nav>

    The CSS code provided in each of the demo below can be toggled. They are written in the flavour of Sassy CSS.

    Scenario 1

    Equal width elements

    This is the equivalent of specifing each element to be an equal fraction of its parent's full width, i.e. each fraction is of identical size and the sum of their widths is equivalent to the parent's full width.

    This effect is achieved with the help of flex: 1 1 100% on the flex items, which is a shorthand for:

    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 100%;

    The property tells the browser to grow the items equally until they fill the full width of their flex parent, which is the <ul> element in this case. The flex-basis of 100% ensures that all items will be the same size and treated equally.

    Of course, this effect can be easily replicated with the good old CSS float and percentage width trick, but this will require knowing the number of children before hand, or else one will have to calculate the percentage width with JS instead.

    Show CSS
    nav {
      & ul {
        display: flex;
        width: 100%;
        & li {
          flex: 1 1 100%;
        }
      }
    }

    Scenario 2

    Proportionate, content-based width

    In other words, the width of each element will be proportionate to its relative width compared to the parent. This ensures a more balanced layout in the sense that wider menu items get more spacing

    Here, we use the property flex: 1 1 auto on the children element. It is the shorthand of:

    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: auto;

    Like the previous example, flex-grow: 1 allows the children to grow when necessary, but on the condition that the width of each element is based on the size of its content. The latter is achieved with the help of flex-basis: auto.

    Show CSS
    nav {
      & ul {
        display: flex;
        width: 100%;
        & li {
          flex-grow: 1;
        }
      }
    }

    Scenario 3

    Equally spaced elements + natural width + centered within parent

    This is one of the more complicated examples that require a lot of CSS-hacking — without the flexbox specification, one has to set each item to an inline element and then justify them.

    The trick here is to declare the wrapping container, <nav>, as well as the list itself, as flex displays — but we only apply the justify-content: center; property to the wrapping container.

    Show CSS
    nav {
      display: flex;
      justify-content: center;
      & ul {
        display: flex;
        & a {
          padding: 1rem 2rem;
        }
      }
    } 

    Fancy example 1

    Mixing flexbox with CSS transforms

    Fancy example 2

    Mixing flexbox with CSS transforms


    Думаю будет полезно.

    Как прикрутить скриптинг Python к приложению, написанному на c++?

    Есть приложение, написанное с нуля на c++ и Qt 5. Нужно добавить скриптинг на Python в стиле 3ds max, то есть так:
    Набираем скрипт во встроенном в приложение редакторе. Сохраняем его. Нажимаем кнопку Evaluate и выполяем скрипт.
    Выполняем так, чтобы иметь доступ из одного скрипта ко всей объектной модели приложения. Я нашёл уроки, но ситуация плачевная: требуется extension - чтобы приложение изначально было написано на Python. В противном случае совет один: берётся метод на c++ и с нужным числом аргументов вызывается такой же метод на Python, при этом кроме аргументов я в Python ничего не имею. Как из встроенного Python получить доступ ко всей объектной модели приложения?


    Ответ

    Питон в приложение встраивается примерно так:
    #include
    int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); /* optional but recommended */ Py_Initialize(); PyRun_SimpleString("from time import time,ctime
    " "print 'Today is',ctime(time())
    "); Py_Finalize(); return 0; }
    Больше - в официальной документации https://docs.python.org/2/extending/embedding.html

    Геттеры и сеттеры в PyСharm

    Возможно ли в PyСharm создать геттеры и сеттеры полей класса каким-либо инструментом, как в IntelliJ IDEA?


    Ответ

    Если вы подразумеваете @property и @.setter Вы можете написать props или propsd, а затем нажать Tab
    python это не java или c#. В python нету необходимости создавать гетеры и сетеры, если только вам не нужна какая-то кастомная логика при получении или сохранения значения. тогда вам помогут @property и @.setter
    Нашел хороший пример как это может быть использовано:
    class Foo(object): def __init__(self, db): self.db = db
    @property def x(self): db.get('x')
    @x.setter def x(self, value): db.set('x', value)
    @x.deleter def x(self): db.delete('x')

    Обращение к экземпляру класса

    Вопрос по теории Java. Есть два класса: класс А реализует JDesktopPane и класс В, реализует JInternalFrame. Класс В не внутренний и не вложенный относительно класса А. Как обратиться к экземпляру класса А из класса В? Сейчас я это реализую передачей экземпляра А в конструктор В. Это оптимальный способ или есть более удобные? Я к чему спрашиваю, предполагается ситуация, когда из класса В будет создаваться экземпляр класса С, а из него - экземпляр класса D. И так несколько раз. И из экземпляра класса, к примеру, Z я хочу получить доступ к экземпляру А. Значит ссылка на него должна передаваться каждый раз из конструктора в конструктор? Спасибо.


    Ответ

    Немного дополню ответ @Igor.
    Да, это нормально. В вашем случае тип A является зависимостью для типа B
    Как уже было упомянуто, через конструктор обычно передаются обязательные зависимости. Необязательные зависимости, как правило, устанавливаются через свойства/set-методы.
    В более сложных сценариях вы можете получать экземпляры типа A не напрямую, а посредством какого-то объекта (например, фабрики). В таком случае встает вопрос об обращении к самой фабрике -- способы решения те же самые.
    При этом сам тип B может являться зависимостью для других типов и должен передаваться (внедряться) точно так же. В сложных приложениях такие цепочки могут быть достаточно большими, поэтому используют контейнеры, облегчающие управление зависимостями.
    Полезно будет почитать про:
    инверсию управления (inversion of control, IoC) внедрение зависимостей (dependency injection, DI) контейнеры (IoC или DI контейнеры)
    Источников множество. Можно начать с этого сайта, продолжить Википедией, Гуглом и блогами

    Ошибка при импортировании класса в android

    В своем android приложении пытаюсь добавить 2 класса:
    import java.util.stream.Collectors; import java.util.stream.IntStream;
    Но они не добавляются, Collectors и IntStream выделяются красным цветом. В чем может быть проблема? Использую Java 8.


    Ответ

    В предыдущих версия Android возможность использовать Java 8 отсутствует. Но в Android 7 такая возможность появилась. Вот ссылка на официальную документацию

    Как определить по какому из View было нажатие в кастомизированном ListView

    Есть кастомизированный ListView c такой разметкой каждого элемента:




    Адаптер
    public class IconAdapter extends BaseAdapter { Context ctx; LayoutInflater lInflater; ArrayList objects;
    public IconAdapter(Context context, ArrayList icons) { ctx = context; objects = icons; lInflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); }
    @Override public int getCount() { return objects.size(); }
    @Override public Object getItem(int position) { return objects.get(position); }
    @Override public long getItemId(int position) { return position; }
    @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = lInflater.inflate(R.layout.item_icon, parent, false); }
    Icon p = getProduct(position);
    ((TextView) view.findViewById(R.id.id_icon)).setText(String.valueOf(p.id)); ((TextView) view.findViewById(R.id.name_icon)).setText(p.name); return view; }
    Icon getProduct(int position) { return ((Icon) getItem(position)); }
    }
    Каким образом можно узнать на какой View в строке нажал пользователь?


    Ответ

    Несколько вариантов:
    Если действия должны быть разными, то лучше в адаптере, в getView повесить по слушателю отдельному на каждую вьюху. Если действия схожи, то также там же вешайте слушатель на корневую вьюху элемента списка и определяйте в нем ID нажатой вьюхи Повесьте слушатель снаружи адаптера (OnItemClickListener) и в нём определяйте ID нажатой вьюхи. Этот вариант самый негибкий. И, когда вы перейдёте с устаревшего ListView на RecyclerView вам придётся вернуться к п1 или п2

    Как подключить БД к проекту Android с поиском

    Есть готовая БД со словами и их переводами. Как интегрировать ее в проект?
    Примерно хотя бы, и какой алгоритм поиска нужен.


    Ответ

    При установке приложения инициализируете новую(пустую) БД в папке установки приложения. После при первом старте переливаете данные из вашей БД(к примеру она у вас будет на карте памяти) в БД которую создали При старте приложения проверяете наличие БД в папке установки, в случае её отсутсвия предлагаете выбрать БД на карте памяти(к примеру) и копируете её кодом в папку установки Используете БД на карте памяти
    Пример копирования БД из папки assets
    Пример копирования БД из карты памяти в папку приложения
    Пример использования БД на карте памяти
    Примечание: во всех случаях обратите внимание на установку прав в манифесте на чтение/запись карты памяти

    Добавить запятую элементу, если он не последний

    Как с помощью css добавить элементу запятую, если после него есть еще элементы? Элементы добавляются динамически.
    Разметка такая
    элемент1 элемент2 элемент3
    Изначально неизвестно сколько элементов выведется, один или несколько.


    Ответ

    Чтобы вопрос не остался без ответа, сделала так:
    .tagswidget { font-size: 20px; margin-bottom: 10px; } .tagswidget .tags-list { display: inline-block; width: 85%; } .tags-list a { text-decoration: none; } .tags-list a:not(:last-child):after { content: ', '; margin-right: 10px; }


    Как использовать attr_accessible в Rails 5?

    Как использовать attr_accessible (может есть аналог) в Rails 5? Гем protected_attributes не работает, так как есть конфликт с версиями activemodel и activerecord. Заранее спасибо.


    Ответ

    Данный атрибут не работает в современных версиях фреймворка Ruby on Rails. Ранее он использовался для того, чтобы на уроне модели явно задать атрибуты, которые можно будет "массово" редактировать на уровне контроллера (т.е. в группе параметров, которые поступают из формы). Данная практика признана неудачной, во-первых вы неявно разрешаете возможность редактирования для всех контроллеров, которых может быть много (как минимум приложение и система администрирования), во-вторых вы на уровне модели явно выдаете разрешения, которые должны выдаваться в уровне контроллера. В третьих слишком вольное использование этого атрибута (и для backend и для frontend частей приложения) приводило к уязвимостям приложений, когда с frontend-части можно было путем манипуляций содержимым POST-содержимого менять те параметры модели, которые не разрешено менять с frontend-части, но которые были разрешены в attr_accessible например для backend-части сайта.
    Начиная с версии Ruby on Rails 4, для разрешение присвоения параметров текущей модели было перемещено с уровня моделей на уровень контроллера. Теперь вам нужно явно указать какие параметры разрешено изменять в модели на уровне контроллера. Например, один из возможных вариантов может выглядеть так
    class SomeController < Admin::ApplicationController ... def create resource = Resourse.new resource.assign_attributes(resoure_params) if resource.save redirect_to index_page else render resource.new_record? ? :new : :edit end end ... private
    def resourse_params [ :id, :name, :weight ] end ... end
    или можно явно пройтись по параметрам, отметить при помощи метода permit те, которые можно передавать модели и воспользоваться например методом create
    class SomeController < Admin::ApplicationController ... def create if Resourse.create resource_params redirect_to index_page else render resource.new_record? ? :new : :edit end end ... private
    def resource_params params.require(:resource).permit(:id, :name, :weight) end ... end

    Таймер при наведении на блок и обратный таймер после выхода курсора из области

    Доброго времени суток. Несколько часов "бьюсь" головой и думаю, как сделать, чтобы при наведении на блок запускался таймер, а после вывода курсора из блока запускался обратный Т.е нужно Чтобы при наведении на блок через секунду добавился класс number_1, через две number_2 и т.д. (это все легко решается с помощью setTimeout) Но нужно чтобы если человек вывел курсор за область блока, начинался обратный отсчет Т.е если последним было number_4, он начинал удалить классы, через 1 секунду number_4, через 2 number_3 и т.д


    Ответ

    Пожалуйста - https://jsfiddle.net/knvnckbz/4/
    var div = document.querySelector('div'), addTimeout = null, removeTimeout = null, classNames = []; div.addEventListener('mouseover', addClass); div.addEventListener('mouseout', removeClass); function addClass() { clearTimeout(removeTimeout); var className = 'number_' + (classNames.length); div.classList.add(className); classNames.push(className); addTimeout = setTimeout(addClass, 1000); } function removeClass() { clearTimeout(addTimeout); var className = classNames.pop(); if (!className) return; div.classList.remove(className); removeTimeout = setTimeout(removeClass, 1000); } div { width: 100px; height: 100px; background: black; } .number_1 { background: red; } .number_2 { background: blue; } .number_3 { background: yellow; }


    Работа с Thread.Sleep();

    Подскажите, как работает метод Thread.Sleep(); в таком кусочке кода, к примеру
    listBox1.Items.Add("First Item"); Thread.Sleep(5000); listBox1.Items.Add("Second Item");
    Получается так, что когда выполняется этот кусок кода, сначало идет задержка, а потом сразу же добавляются 2 объекта в listbox. Но нужно, что бы сперва добавился первый объект, прошло 5 секунд и только потом второй. Что делаю не так?


    Ответ

    Вообще-то приведенный код работает именно так, как вы и написали: сначала добавляется первая запись, потом делается задержка потока, потом добавляется вторая запись. А вот видите вы другой результат: сначала задержка, потом добавление двух записей. Это происходит из-за того, что задержку вы делаете в главном, UI, потоке. У UI потока есть т.н. очередь сообщений, которую он обрабатывает. После добавления первой записи в эту очередь добавляется сообщение о том, что нужно нарисовать текст в контроле. Но поскольку вы тут же делаете задержку, обработка этой очереди останавливается и поток просто не успевает нарисовать первую запись в контроле. После того, как задержка заканчивается, в очередь добавляется еще одно сообщение, и поток отрисовывает обе записи.
    Сложно посоветовать, как это исправить, поскольку непонятно, чего вы хотите добиться. К тому же делать задержки (особенно в UI потоке) -- как правило плохая идея. Как вариант -- можно попросить UI поток обработать очередь сообщений перед задержкой:
    listBox1.Items.Add("First Item"); Application.DoEvents(); Thread.Sleep(5000); listBox1.Items.Add("Second Item");
    Но, повторюсь, это только в порядке удовлетворения любопытства. По-хорошему от задержки надо избавляться и делать то, что вы хотите, по-другому. Например, использовать таймер или async/await

    Почему не получается отправить координаты GPS на сервер?

    Добрый день, пытаюсь отослать полученные GPS-координаты на сервер, если их выводить в консоль то всё в порядке но когда пробую отправить их на сервер приложение падает.
    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    }
    protected void onResume() { super.onResume();
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER/*ТИП ПРОВАЙДЕРА*/,// НА ВХОД ЕМУ ПОДАЁМ 1000 * 10/*МИНИМАЛЬНОЕ ВРЕМЯ ЗАПРОСА КООРДИНАТ*/, 10/*РАСТОЯНИЕ ОТОЙДЯ НА КОТОРОЕ ОБНОВЛЯЮТСЯ КООРДИНАТЫ*/, locationListener); }
    @Override protected void onPause() {//ОТКЛЮЧАЕМ СЛУШАТЕЛЯ МЕТОДА removeUpdates super.onPause(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } locationManager.removeUpdates(locationListener); }
    private LocationListener locationListener = new LocationListener() {
    @Override public void onLocationChanged(Location location) { showLocation(location); coordinatesGPS (); }
    @Override public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override public void onProviderDisabled(String provider) { checkDisabled1(); checkDisabled2(); }
    @Override public void onProviderEnabled(String provider) {
    }
    };
    private void showLocation(Location location) { if (location == null) return;
    dataGPS1 = formatLocation1(location); dataGPS2 = formatLocation2(location); }
    public String formatLocation1(Location location) { if (location == null) return ""; return String.format( "%1$.4f", location.getLatitude(), location.getLongitude());
    }
    public String formatLocation2(Location location) { if (location == null) return ""; return String.format( "%2$.4f", location.getLatitude(), location.getLongitude());
    }
    private void checkDisabled1() { dataGPS1 = "00,0000";
    }
    private void checkDisabled2() { dataGPS2 = "00,0000";
    }
    public void coordinatesGPS () {
    String datGPS1 = dataGPS1;
    System.out.println("Координаты =" + datGPS1); try { //---------------------------------------------- client = new Socket("192.168.1.138"/*192.168.1.138"*/, 58000); //----------------------------------------------
    DataOutputStream outData = new DataOutputStream(client.getOutputStream());
    outData.writeUTF(datGPS1);
    } catch (IOException e) { e.printStackTrace(); } }
    Ошибка.
    08-29 11:33:53.556 23612-23612/gpstracker I/System.out: Координаты =89,1706 08-29 11:33:53.556 23612-23612/gpstracker D/AndroidRuntime: Shutting down VM 08-29 11:33:53.556 23612-23612/gpstracker W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x418e4c08) 08-29 11:33:53.566 23612-23612/gpstracker E/AndroidRuntime: FATAL EXCEPTION: main Process: gpstracker, PID: 23612 at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1166) at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) at libcore.io.IoBridge.connectErrno(IoBridge.java:127) at libcore.io.IoBridge.connect(IoBridge.java:112) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.Socket.startupSocket(Socket.java:567) at java.net.Socket.tryAllAddresses(Socket.java:128) at java.net.Socket.(Socket.java:178) at java.net.Socket.(Socket.java:150) at gpstracker.MainActivity.coordinatesGPS(MainActivity.java:137) at gpstracker.MainActivity$1.onLocationChanged(MainActivity.java:73) at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279) at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208) at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5603) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method)


    Ответ

    Задачи связанные с доступом в интернет, рекомендуется делать в фоне. AsyncTask или Service, например.
    Так же попробуйте:
    if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); }

    Подсветка строк в Debug mode в VS2012

    работаю на VS2012, и нужно периодически дебажить код(ну как не без этого), захожу в нужный мне брейкпойнт и строка начинает выделяться так, что мне трудно увидеть, что там написано, как можно изменить цвет подсветки, или вовсе убрать её?
    пытался убирать галочки по путям :
    tools->options->text editor->highlight current line
    а так же :
    tools->options->debug->highlight entire source line ...
    Парочка скринов
    "Code mode" :

    Debug :


    Ответ

    Изменить цвет подсветки можете в настройках:
    Tools -> Options -> Environment -> Fonts and Colors
    Убрать подсветку можно установив цвет такой же как цвет заднего фона

    Python: Уведомление в Центр Уведомлений Windows

    Как, используя Python, послать уведомление в Центр Уведомлений Windows 10?


    Ответ

    А для десятой винды нужно использовать модуль Plyer, здесь всё ещё проще
    import plyer plyer.notification.notify ( message='Собственно сообщение', app_name='Название твоего приложения', app_icon='sample.jpg', title='Заголовок', )
    Не забудь ещё установить его через pip
    pip3 install Plyer
    или официальный сайт https://plyer.readthedocs.io/en/latest/

    Возможно ли удалить переменную супер глобального массива?

    Например, $_SERVER["PHP_AUTH_USER"]
    Пробовал функцию unset, но не помогло.

    в начале админки есть код
    if (!isset($_SERVER['PHP_AUTH_USER'])){ header ("WWW-Authenticate: Basic realm=\"Admin Page\""); header ("HTTP/1.0 401 Unauthorized"); exit(); }
    то есть чтобы переавторизоватся мне где то из другого места кода нужно удалить элемент $_SERVER['PHP_AUTH_USER']


    Ответ

    Это интересный вопрос, и он оказывается немного сложнее, если прочитать не один только заголовок, но и сам текст вопроса.
    Для ответа на него требуется понимание того, как в принципе работает РНР
    поэтому ответа будет два:
    Удалить элемент из суперглобального массив, разумеется, можно. Но это вам не поможет.
    Поскольку эти переменные заполняются заново с каждым запросом, из приходящих НТТР заголовков. То есть, на самом деле вопрос звучит, как
    Можно ли заставить браузер не передавать определенный НТТР заголовок?
    Ответ: нельзя.
    HTTP basic authentication так устроена, что браузер передает логин и пароль с каждым запросом. Если он не будет их передавать, то РНР скрипт о них не узнает, и пользователь не сможет просмотреть запароленную страницу.
    При этом механизма логаута в HTTP basic authentication не предусмотрено.
    Можно только запросить пароль повторно, но если пользователь проигнорирует этот запрос, то браузер продолжит присылать старые логин и пароль. Лет 15 назад я довольно долго копал эту тему ,и даже сделал демо-страничку, которая разлогинивала-таки пользователя... но самые способные могли обнаружить, что этот трюк исполнялся с помощью банальной куки 8)