Страницы

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

вторник, 5 февраля 2019 г.

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


Как делать подчеркивание такого рода? Есть две идеи, это SVG и просто PNG картинка с абсолютным позиционированием относительно блока с заголовком. Может есть способы с помощью чистого CSS?


Ответ

Самое простое решение - это svg
svg { width:347; height:188; background:#3D4248; } #txt { font-size:70px; font-family:sans-serif; fill:white; } svg path { fill:none; stroke:white; stroke-width:2; } Expire

Изменить значение в input по клику на кнопки +/- и взять значение из div

Как изменить значение input по клику на кнопки (+/-) и взять значение из имеющейся таблицы если комплектов кнопок и input на странице может быть несколько?
$(function() { var countInputs = document.getElementsByClassName('count-buttons'); for (var input in countInputs) { if (!countInputs.hasOwnProperty(input)) { continue; } var butM = input.getElementsByClassName('btn-minus'); var butP = input.getElementsByClassName('btn-plus'); var units = countInput.value.replace(/\d/g, ''); butP.onclick = function() { countInput.value = parseInt(countInput.value) + 1 + units; }; butM.onclick = function() { if (parseInt(countInput.value) > 1) { countInput.value = parseInt(countInput.value) - 1 + units; } }; $(function() { document.querySelector('.count-buttons').onmouseover = (function() { document.querySelector('.count-buttons__table').style.display = 'table'; }); document.querySelector('.count-buttons__table').onmouseout = (function() { document.querySelector('.count-buttons__table').style.display = 'none'; }); var elems = document.querySelectorAll('.count-buttons__table-td'); for (var i = elems.length - 1; i >= 0; i--) { elems[i].addEventListener('click', myFunc, false); } function myFunc() { document.getElementsByClassName('qty').value = this.innerHTML; } });

6
12
18
24
30
36

jsfiddle
UPD
Суть в том, что значения для value можно получить двумя способами:
по нажатию кнопки + или - (соответственно, число либо увеличивается на 1 либо уменьшается) пример выбрать число из выпадающей таблицы (числа никогда не меняются) пример


Ответ

К сожалению, предложенный @dmitryshishkin ответ мне не подошел, т.к. возникала странная ошибка - при клике на кнопки +/- значение увеличивалось/уменьшалось сразу на два числа...
В итоге, мне подошел этот код:
counters = [].slice.call(document.querySelectorAll('.count-buttons'));
counters.forEach(function(counter) { var input = counter.querySelector('.input-text');
counter.querySelector('.btn-minus').onclick = function () { var newValue = +input.value - 1;
if (newValue >= 1) { input.value = newValue; } };
counter.querySelector('.btn-plus').onclick = function () { input.value = +input.value + 1; };
counter.querySelector('.count-buttons__table').onclick = function (evt) { input.value = evt.target.textContent; this.style.display = 'none'; } });

Проверка существования Properties.Settings

Есть приложение на WinForms, в котором используются настройки Properties.Settings. При каждом изменении версии настроек нет и требуется выполнить Properties.Default.Upgrade();
А как проверить что настроек нет? Если смотреть само свойство Properties.Settings.Default — оно существует. Есть смотреть Properties.Settings.Default.Переменная — оно тоже существует. А по факту на новой версии даже папки с настройками нет.


Ответ

Дело в том, что при отсутствии пользовательских настроек, подтягиваются настройки по умолчанию, поэтому не остается ничего кроме как завести в настройках еще один элемент bool-типа со значением true по умолчанию, например UpgradeRequired, и при каждом запуске приложения, проверять его:
if (Settings.Default.UpgradeRequired) { Settings.Default.Upgrade(); Settings.Default.UpgradeRequired = false; Settings.Default.Save(); }

Как увеличить размер svg иконки?

Есть следующая SVG иконка 17 на 17 пикселей. Как сделать ее размером 40 на 40? Или единственный вариант это transform: scale(2)


Ответ

Вам наверное нужно кроме увеличения размеров иконки, сделать её адаптивной.
Для этого убираем width="17" height="17" и оставляем только viewBox="0 0 17 17"
А размеры иконки будем регулировать в процентах (для адаптивности) внутри команды

2# способ (главный и самый правильный)
с помощью
размеры иконки регулируются с помощью процентов ширины и высоты.

Атомарность операции получения экземпляра класса на x64 приложении

Атомарность присваивания можно добиться с помощью System.Threading.Interlocked
Interlocked.Exchange(ref toItem, fromItem);
А вот как атомарно получить экземпляр класса атомарно, ведь у System.Threading.Interlocked нет метода Read(ref object), есть только Read(ref long)?
TObject obj = somethingObject; //Сомнение атомарности. //Поскольку передача указателя x64 не умещается в такт процессора, //и не гарантирует атомарности.
просьба не приводить примеры с lock, т.к. мне они не интересны.


Ответ

Операция чтения ссылки на объект всегда атомарная. Это следствие базового принципа .NET: если ваш код не содержит вызовов unsafe - вы никак не можете получить некорректную ссылку на объект.
Как следствие, всегда атомарными являются чтение int, указателей и IntPtr. Более того, чтение long тоже атомарно на 64-битной системе (найденный вами метод Interlocked.Read(ref long) предназначен для платформ x86 или AnyCPU)
Однако, надо понимать что Interlocked-операции - это не только атомарность, это еще и барьеры памяти. Поэтому читать разделяемую переменную как TObject obj = somethingObject нельзя - это чтение может дать устаревшие данные.
Для чтения нужно использовать метод Volatile.Read
TObject obj = Volatile.Read(ref somethingObject);

Полупрозрачный размытый фон с шумами

когда-то давно уже задавался этим вопросом, но без особых успехов. Речь идёт о полупрозрачном размытом фоне, да ещё и с шумами(собственно как на картинке). Подскажите, как можно достичь подобного результата в WPF?
Я знаю, что в UWP есть какая-то встроенная функция, которая позволяет достичь такого результата, а как на счёт классических приложений WPF? Какой наиболее оптимальный способ, в плане производительности, достижения подобного эффекта?


Ответ

Этот эффект называется Acrylic, часть Fluent Design System
У вас есть 3 способа получить его:
Создать свой ShaderEffect, который будет реализовывать шум (Noise) с помощью текстуры. Подобную реализацию можно посмотреть у данного проекта (сам эффект шума). Вы можете установить готовые решения, к примеру FluentWPF (есть в NuGet). Вы можете попробовать с помощью Desktop Bridge конвертировать ваше приложение в UWP, что даст вам весь функционал данной системы (Toast, Fluent Design и многое другое).

На конференции Build 2018 была анонсирована возможность реализации Fluent Design в классических программах (Windows Forms, WPF или нативный Win32.).

Как сделать ломаный фон?

Подскажите, пожалуйста, как можно срезать фон вверху и внизу таким образом? Благодарю!
p { display: block; height: 10px; } .cover { width: 100%; height: 250px; background: #ffffff url(http://katyaburg.ru/sites/default/files/pictures/krasota_prirody/les_hvoyniy_foto_02.jpg); background-size: cover; background-position: center center; background-repeat: no-repeat; }



Ответ

Первый вариант CSS — clip-path
p { display: block; height: 10px; } .cover { width: 100%; height: 250px; background: #ffffff url(http://katyaburg.ru/sites/default/files/pictures/krasota_prirody/les_hvoyniy_foto_02.jpg); background-size: cover; background-position: center center; background-repeat: no-repeat; -webkit-clip-path: polygon(20% 0, 50% 6%, 80% 0, 100% 0, 100% 18%, 80% 18%, 50% 24%, 20% 18%, 0 18%, 0 0); clip-path: polygon(20% 0, 50% 6%, 80% 0, 100% 0, 100% 18%, 80% 18%, 50% 24%, 20% 18%, 0 18%, 0 0); }


Второй вариант SVG — clipPath

Могу ли я перенести значения из одной таблицы в другую в Postgresql одним запросом?

Я хочу перенести 3 значения из одной таблицы в другую. Я делаю это тремя вложенными запросами. Могу ли я это делать одним запросом? То есть не писать 3 вложенных запроса?
UPDATE worker SET start = (SELECT em.start FROM employee em WHERE em.id = id); UPDATE worker SET end = (SELECT em.end FROM employee em WHERE em.id = id); UPDATE worker SET count = (SELECT em.count FROM employee em WHERE em.id = id);


Ответ

UPDATE worker SET (start, end, count) = (SELECT em.start, em.end, em.count FROM employee AS em WHERE em.id = id);
См. синтаксис UPDATE

Как выбрать произвольные элементы двумерного массива? Си

Как из двумерного массива 9х9, наполненного случайными числами от -99 до 99 выбрать элементы из закрашенной области (как на рисунке) и найти из них максимальный элемент? Есть идеи?


Ответ

Псевдокод
max = m[0,0]; for (i = 0; i < 5; i++) { for (j = 0; j <= i; j++) { if (m[i,j] > max) max = m[i,j]; } } for (i = 5; i < 9; i++) { for (j = 0; j < 9 - i; j++) { if (m[i,j] > max) max = m[i,j]; } }

c#. Winforms. Single-Instance и активация окна при повторном запуске

Разрабоатываю WinForms приложение как Single-Instance. При первом вызове запускается как бы «Ядро» приложения, которое затем создает и отображает определенное окно. При последующем запуске приложение проверяет, запущено ли уже приложение и в положительном случае посылает сообщение ядру, передает ему опредленные данные и закрывается. Ядро получает сообщение с параметром, обрабатывает его пределенным образом и создает новую форму и ее оторбражает. Реализаций подобного есть несколько. Я ипользовал мютексы для проверки существования запущенного приложения и данные передаю при помощи именованных pipes (также пробовал с Remoting). Но есть одна проблема, которая доставляет большое неудобство, а именно, вторая инстанция приложения не получает фокус ввода. Чего я уже только не пробовал, приложение при актвации лишь мигает в таскбаре, а фокус ввода находится там, откуда оно было вызвано.
Я уже и с виндовc API игрался, никак не выходит. Например вызов SetForegroundWindow(HandleRef hWnd) возвращает False. И ничего нельзя сделать.
Как можно решить задачу?

Добавление:
Если кто-то захочет помочь, как базис можно использовать например вот эту статью и код. Хотя я использую несколько другой подход, в этом приложении тоже проявляется описанная мною проблема:
http://blogs.microsoft.co.il/maxim/2010/02/13/single-instance-application-manager/
Просто запускайте приложение из файлового проводника при помощи "Enter", и увидете что фокус ввода при повторном запуске остается в проводнике. Экспериментировать, как я понимаю, нужно здесь:
private static void SingleInstanceCallback(object sender, InstanceCallbackEventArgs args) { if (args == null || _mainFrm == null) return; Action d = (bool x) => { _mainFrm.ApendArgs(args.CommandLineArgs); _mainFrm.Activate(x); }; _mainFrm.Invoke(d, true); }


Ответ

Натолкнулся на одно решение и оно у меня на Windows 10 с небольшими изменениями работает: https://stackoverflow.com/questions/6319568/how-to-bring-a-form-already-shown-up-to-the-very-foreground-and-focus-it/22737820#22737820
[DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")] private static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")] private static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
public static void xActivateAndBringToFront(this Form form) {
// activate window var currentForegroundWindow = GetForegroundWindow(); var thisWindowThreadId = GetWindowThreadProcessId(form.Handle, IntPtr.Zero); var currentForegroundWindowThreadId = GetWindowThreadProcessId(currentForegroundWindow, IntPtr.Zero); AttachThreadInput(currentForegroundWindowThreadId, thisWindowThreadId, true); form.Activate(); // or: SetForegroundWindow(form.Handle); AttachThreadInput(currentForegroundWindowThreadId, thisWindowThreadId, false);
// set window to front form.TopMost = true; form.TopMost = false; }

Дополнение после подсказок от MSDN.WhiteKnight.
MSDN.WhiteKnight указал на то, что применение метода AttachThreadInput может вызывать в некоторых случаях проблемы. Краткий поиск в интернете подтверждает это.
Поэтому, с его же подсказки, я попробовал применить метод AllowSetForegroundWindow. С успехом! А именно, приложение при первом запуске сохраняет ID своего процесса в реестре:
Application.UserAppDataRegistry.SetValue(CORE_PROCESS_ID, Process.GetCurrentProcess().Id);
Затем, при повторном запуске приложение перед посылкой сообщения ядру вызывает метод AllowSetForegroundWindow:
int processID = (int)Application.UserAppDataRegistry.GetValue(CORE_PROCESS_ID); bool b = AllowSetForegroundWindow(processID); // .. сообщение ядру .. // .. выход ..
Ядро создает и отображает окно, окно получает фокус ввода как положено. Не нужно даже как-то принудительно подымать окно. По сути form.Activate() достаточно, но даже этот вызов не нужен, если окно создается и отображается в регламентированном порядке через Show(), ShowDialog() или Application.Run(form).

Синтаксис перегрузки операторов C#

Подскажите, пожалуйста, почему метод перегружающий оператор должен быть обязательно public и static?


Ответ

Давайте создадим тестовый класс и перегрузим оператор сложения для него:
public class MyClass { public int A { get; set; }
public static MyClass operator +(MyClass A, MyClass B) { return new MyClass { A = A.A + B.A }; } }
А теперь посмотрим, какие методы декларирует наш класс:
MethodInfo[] methods = typeof(MyClass).GetMethods();
Среди прочего в массиве methods мы увидим такую запись:
MyClass op_Addition(MyClass, MyClass)
Условно, когда вы перегружаете оператор, создается метод с указанным названием и атрибутами Public | Static | HideBySig | SpecialName. Так что следующий код:
MyClass a = new MyClass { A = 1 }; MyClass b = new MyClass { A = 2 }; MyClass c = a + b;
На деле преобразуется в:
MyClass a = new MyClass { A = 1 }; MyClass b = new MyClass { A = 2 }; MyClass c = MyClass.op_Addition(a, b);
Как видите, когда Вы описали оператор, Вы создали статическую функцию с именем op_Addition. Статическая она по той причине, что в C# не предусмотрен вариант типа
public MyClass operator +(MyClass B) { return new MyClass { A = this.A + B.A }; }
Да и это не нужно, так как статическим вариантом можно покрыть любую свою нужду. Так что плодить какие-то дополнительные методы с теми же возможностями - бессмыленно.Почему синтаксис C# не предусматривает приватные перегруженные операторы? По той же причине, по которой он не поддерживает методы с одинаковыми параметрами, но разными модификаторами доступа: компилятор не сможет понять, какую именно функцию Вы захотите использовать в некотором контексте.

Имя компьютера, localhost или имя чего?

Не знаю, даже, как сформировать вопрос. Переставил сегодня Fedora с нуля и в командной строке увидел "неясное" имя:
[ekkl@37L4247F27-25 ~]$
Что такое 37L4247F27-25 ?
Раньше, насколько я помню был localhost
]$ cat /etc/hostname localhost
Переименование
]# hostnamectl set-hostname localhost
Помогает до перезагрузки системы. Как это "37L4247F27-25" заменить?

Добавлю следующее:
[ekkl@37L4247F27-25 ~]$ cat /etc/hostname localhost
Иными словами: манипуляции с "/etc/hostname" типа
]# hostname `cat /etc/hostname`
ещё раз повторю: имеют место только до перезагрузки компьютера. Более того,
]# hostname `cat /etc/hostname` [root@37L4247F27-25 ~]#
не меняют "37L4247F27-25" в текущей консоли, только в новь открытой. Кажется мне, если бы изменения были глобальными, имя поменялось бы уже в следующей командной строке. Ну это предположение.


Ответ

Как написано в man 1 hostnamectl
... and the transient hostname which is a fallback value received from network configuration. If a static hostname is set, and is valid (something other than localhost), then the transient hostname is not used.
Таким образом при установке в /etc/hostname значения localhost судя по всему при загрузке hostnamed кто-то устанавливает имя хоста в некоторое значение полученное от сетевых служб (DHCP, DNS, возможно (хотя и вряд ли) mdns, NIS или wins. Скорей всего это имя осталось закешировано роутером со времени запуска другой ОС на текущей сетевой карте с данным MAC'ом/IP адресом.
Способ заблокировать данное поведения я не знаю, но не вижу особых причин использовать безликое имя вроде localhost на постоянной основе.

Потоки и IntentService

В каком потоке происходит работа IntentService? Вроде как по определению это подкласс обычного Service, у которого метод onHandleIntent отрабатывает в background потоке:
Clients send requests through Context.startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.
...
All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.
Но правильно ли я понимаю, что всё равно сам IntentService работает в главном (UI) потоке, и из него уже запускает новый worker/background-поток? И при завершении приложения IntentService будет убит вместе со всем приложением, до конца выполнится только текущий метод onHandleIntent, но следующий уже не будет запущен?
К примеру, если в активити есть следующий код:
for (int i = 0; i < 5; i++) { Intent intent = new Intent(this, MyIntentService.class); this.startService(intent); }
и приложение завершается, когда весь цикл выполнен, но метод onHandleIntent отработал только один раз, то больше метод onHandleIntent вызван не будет?
UPD
Например, если говорить об исходном коде класса IntentService
public abstract class IntentService extends Service { ... @Override public void onStart(@Nullable Intent intent, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); } ... @Override public int onStartCommand(@Nullable Intent intent, int flags, int startId) { onStart(intent, startId); return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY; } ... @WorkerThread protected abstract void onHandleIntent(@Nullable Intent intent); }
Правильно ли я понимаю, что в этом случае (в примере с циклом) метод onStartCommand выполнится 5 раз, и вызовет 5 раз метод onStart, который с помощью mServiceHandler помещает intent-ы в очередь, но при завершении main-потока умирает вместе с ним?..


Ответ

В каком потоке происходит работа IntentService?
работа IntentService происходит в отдельном Thread, который создается во время создания сервиса, все остальные Message будут поститься на Looper от этого треда, те получается что это SingleQueue.
Но правильно ли я понимаю, что всё равно сам IntentService работает в главном (UI)?
Не совсем точно. По умолчанию все компоненты одного приложения работают в одном процессе, но вам никто не помешает запустить сервис из другого потока, внутри себя он создаст поток из контекста который вы передадите. Как только процесс завершится поток сервиса умрет.
И при завершении приложения IntentService будет убит вместе со всем приложением, до конца выполнится только текущий метод onHandleIntent, но следующий уже не будет запущен?
Да. Но подмечу если компоненты одного приложения работают в одном процессе.
и приложение завершается, когда весь цикл выполнен, но метод onHandleIntent отработал только один раз, то больше метод onHandleIntent вызван не будет?
не факт, здесь работа разных потоков может успеть вызываться, а может нет. Смотря как быстро вы убиваете процесс. Смею предположить если сделать, что-то типо System.exit(0) то не успеет даже 1-раз вызваться.
Правильно ли я понимаю, что в этом случае (в примере с циклом) метод onStartCommand выполнится 5 раз, и вызовет 5 раз метод onStart, который с помощью mServiceHandler помещает intent-ы в очередь, но при завершении main-потока умирает вместе с ним?.
Да.

Смена файла css через javascript

Как можно реализовать при нажатии на ссылку или любой другой элемент css файл менялся на другой или просто смену фона и цвета текста если так проще, я не знаю javascripta, все что нашел в интернете у меня не работало. Что-то типо переключателя между дневным и ночным режимами. Заранее спасибо)


Ответ

Простейший вариант (Если разговор идёт про смену режимов):
var btn = document.getElementsByTagName('button'); btn[0].onclick = function() { document.body.className = 'day'; } btn[1].onclick = function() { document.body.className = 'night'; } * { text-transform: uppercase; } .day { background: white; color: black; } .night { background: black; color: white; }

lorem ipsum dolor


var btn = document.getElementById('btn'); btn.onclick = function() { document.body.classList.toggle('change-mode'); } * { text-transform: uppercase; } .change-mode { background: black; color: white; }

lorem ipsum dolor


Буквы и их размеры

Как добиться того, чтобы все буквы имели одинаковую ширину?


Ответ

Моноширинный шрифт
Можно тегами , , , можно в CSS универсальным семейством шрифтов monospace
.monospace-css { font-family: monospace; }

Обычный текст

WWWWWWWW
iiiiiiii

Моноширинный текст CSS

WWWWWWWW
iiiiiiii

Моноширинный текст CODE

WWWWWWWW
iiiiiiii

Моноширинный текст KBD

WWWWWWWW
iiiiiiii

Моноширинный текст SAMP

WWWWWWWW
iiiiiiii

Программно узнать вживую о забитом голе на чемпионате мира по футболу

Слово api или developer не видать на https://www.fifa.com/worldcup/
Подсматривая сетевые запросы браузера можно найти ссылку, которая обновления получает как json:
https://api.fifa.com/api/v1/live/football/recent/17/254645?language=ru-RU
В принципе можно с помощью периодического опроса (polling) недавнюю информацию получить отсюда.
В комментариях к похожему вопросу UEFA/FIFA scores API, можно найти ссылку на информацию обо всех матчах сразу:
https://api.fifa.com/api/v1/calendar/matches?idseason=254645&idcompetition=17&count=100
Эту ссылку также можно подсмотреть в инструментах разработчика в сетевых запросах браузера, находясь на fifa.com
Поисковики ещё подсказывают https://worldcup.sfg.io — сайт, который как json похожую информацию возвращает соскребая её с сайта fifa. Есть и другие сайты.
Идеально хотелось бы найти API в открытом доступе, которое бы позволило подписаться на интересующие меня события, без необходимости постоянного опроса, чтобы свежую информацию получить. Пример такого API это сайт https://pubsubhubbub.appspot.com/, который позволяет подписаться на push-уведомления. См. Как узнать что вышло новое видео на youtube-канале и как получить его url?


Ответ

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

Ошибка после установки на Ubuntu ORA-27101: shared memory realm does not exist

SQL*PLUS выдаёт ошибку:
ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Linux-x86_64 Error: 2: No such file or directory Process ID: 0 Session ID: 0 Serial number: 0
При старте БД:
sudo service oracle-xe start Starting Oracle Net Listener. Starting Oracle Database 11g Express Edition instance. Failed to start Oracle Net Listener using /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr and Oracle Express Database using /u01/app/oracle/product/11.2.0/xe/bin/sqlplus.
Ставила по этой инструкции Но пропустила шаг:
sudo rm -rf /dev/shm sudo mkdir /dev/shm
потому, что при простой замене имени каталога /dev/shm у меня пропал интернет. Просто так удалять системные файлы, боязно. Теперь не могу удалить /dev/shm, т.к. он занят.


Ответ

Сообщение об ошибке:
ORA-27101: shared memory realm does not exist
означает, что процесс (обычно listener, sqlplus) не может подсоединится к System Global Area (SGA).
В основном две причины:
SGA действительно не существует, так как инстанция БД не стартовала. Стартуйте инстанцию БД под пользователeм oracle
$ echo startup|sqlplus / as sysdba Shared memory segment Id для подключения к SGA генерируется из значений переменных окружения: $ORACLE_SID + $ORACLE_HOME. Если эти значения не соответствуют тем, которые были использованы при запуске инстанции БД, то будет выше указаная ошибка, так как такого сегмента не существует. Проверте переменные окружения:
env | egrep -i "oracle_(sid|home)"
Значения $ORACLE_SID + $ORACLE_HOME, которые были использованы при установке хранятся в /etc/oratab и устанавливаются так:
export ORACLE_SID=orcl; . oraenv
Например, если попытаться установить вручную и ошибиться:
$ echo exit|sqlplus -l user/pass
Connected to: Oracle Database 11g Release 11.2.0.1.0 - Production
$ ORACLE_HOME=$ORACLE_HOME/; test -d $ORACLE_HOME && echo "directory exists" directory exists
Всё хорошо, директория существует и sqlplus из неё будет вызываться, но незначащий слэш даст при подсчёте shmid другое значение:
$ echo exit|sqlplus -l user/pass
ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Linux Error: 2: No such file or directory

Помогите написать регулярное выражение на java

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


Ответ

Импортируем пакет:
import java.util.regex.*;
Удаляем из строки все символы, кроме русских букв и лишние пробелы с конца и начала строки с помощью метода trim()
class Rextester { public static void main(String args[]) { String Main = "4534%^$!@!Фамилия4534%^$!@! Имя 4534%^$!@!Отчество 4534%^$!@!";
String replaced = Main.replaceAll("[^А-Яа-я]+", " "); System.out.println(replaced.trim()); } }
На выходе получаем:
Фамилия Имя Отчество

Как подружить wxWidgets и CLion (Windows + mingw-w64)?

Хочу сделать GUI приложение и выбрал для этого Си (без ++) и wxWidgets. Скачал с офф.сайта установщик, поставил (Установился в C:\wxWidgets-3.1.1, но я кинул рядом с исходниками папку с библиотекой в папке wx есть файл, который просится в коде).

Думал, что на этом всё, но нет, при попытке компиляции вылазит ошибка, что нет библиотеки.
Ошибка:
"C:\Program Files\JetBrains\CLion 2018.1.5\bin\cmake\bin\cmake.exe" --build C:\Users\Timoshka-WIN10\Documents\CLionProjects\GuiTEST\cmake-build-debug --target GuiTEST -- -j 1 [ 50%] Building C object CMakeFiles/GuiTEST.dir/main.c.obj C:\Users\Timoshka-WIN10\Documents\CLionProjects\GuiTEST\main.c:3:10: fatal error: wx/wxprec.h: No such file or directory #include ^~~~~~~~~~~~~ compilation terminated. mingw32-make.exe[3]: * [CMakeFiles\GuiTEST.dir\build.make:62: CMakeFiles/GuiTEST.dir/main.c.obj] Error 1 mingw32-make.exe2: [CMakeFiles\Makefile2:67: CMakeFiles/GuiTEST.dir/all] Error 2 mingw32-make.exe1: [CMakeFiles\Makefile2:79: CMakeFiles/GuiTEST.dir/rule] Error 2 mingw32-make.exe: * [Makefile:117: GuiTEST] Error 2
CMakeLists.txt
cmake_minimum_required(VERSION 3.10) project(GuiTEST C)
set(CMAKE_C_STANDARD 11)
add_executable(GuiTEST main.c)
target_include_directories ( GuiTEST PUBLIC $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}libs/wxWidgets-3.1.1/include > $< INSTALL_INTERFACE:libs/wxWidgets-3.1.1/include > # /include/mylib )
Код с офф.сайта wxWidgets
// wxWidgets "Hello World" Program // For compilers that support precompilation, includes "wx/wx.h". #include #ifndef WX_PRECOMP #include #endif class MyApp : public wxApp { public: virtual bool OnInit(); }; class MyFrame : public wxFrame { public: MyFrame(); private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); }; enum { ID_Hello = 1 }; wxIMPLEMENT_APP(MyApp); bool MyApp::OnInit() { MyFrame *frame = new MyFrame(); frame->Show(true); return true; } MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, "Hello World") { wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item"); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT); wxMenu *menuHelp = new wxMenu; menuHelp->Append(wxID_ABOUT); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append(menuFile, "&File"); menuBar->Append(menuHelp, "&Help"); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText("Welcome to wxWidgets!"); Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello); Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT); } void MyFrame::OnExit(wxCommandEvent& event) { Close(true); } void MyFrame::OnAbout(wxCommandEvent& event) { wxMessageBox("This is a wxWidgets Hello World example", "About Hello World", wxOK | wxICON_INFORMATION); } void MyFrame::OnHello(wxCommandEvent& event) { wxLogMessage("Hello world from wxWidgets!"); }
Говорят, что надо что-то подшаманить в CMakeLists.txt, или добавить target_include_directories, но в первом случае вроде под Ubuntu и не понятно, а во втором и по официальному мануалу для CMake тоже ничего не понятно :).


Ответ

target_include_directories( GuiTEST PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/libs/wxWidgets-3.1.1/include

Как использовать колекции в Entity Framework Core?

С помощью EntityFramework DataBaseFirst создались классы :
public partial class ExpSections { public ExpSections() { ExpRemarks = new HashSet(); } public int ExpSectionId { get; set; } public int ExpMainId { get; set; } public string Name { get; set; } public string ExpertName { get; set; } public string ImageName { get; set; }
public ExpMains ExpMain { get; set; } public ICollection ExpRemarks { get; set; } }
public partial class ExpRemarks { public int ExpRemarkId { get; set; } public int ExpSectionId { get; set; } public string Number { get; set; } public string Question { get; set; } public string Answer { get; set; } public string Check { get; set; }
public ExpSections ExpSection { get; set; } }
ExpSections связан один ко многим c ExpRemarks Я так понимаю коллекция внутри класса ExpSections нужна для вывода связанных данных? Как ей воспользоваться, к примеру есть метод:
public IActionResult Method(int id) { ExpSections expSections = _bd.ExpSections.SingleOrDefault(m=>m.ExpSectionId == id);
А как получить связанные данные из класса ExpRemarks, если я пишу так:
Console.WriteLine(expSection.ExpRemark.Count());
Результат 0 записей, а в БД записи есть.


Ответ

В EF Core нет lazy loading (надо бы уточнить, не появилось ли в 2.1), поэтому у вас связанные данные не подгружаются автоматом.
Указывайте явно при загрузке, какие связанные данные вам понадобятся:
_bd.ExpSections.Include(x => x.ExpRemarks) .SingleOrDefault(m=>m.ExpSectionId == id);
Тут тёзка подсказывает, что в core 2.1 наконец впилили поддержку lazy loading так что если у вас есть возможность обновиться и включить lazy loading - то можете использовать как альтернативу.
Я правда люблю контролировать, что и когда грузится, это же лишние накладные расходы на базу и сеть, поэтому предпочитаю держать lazyloading отключенным.
Как включить lazy loading в 2.1 см. в доках, вкратце:
The simplest way to use lazy-loading is by installing the Microsoft.EntityFrameworkCore.Proxies package and enabling it with a call to UseLazyLoadingProxies
И, кстати, обращаю ваше внимание, что для поддержки lazy loading свойства должны быть virtual
public virtual ICollection ExpRemarks { get; set; }
См. также:
Загрузка связанных данных Entity Framework Core - Lazy Loading

Скрипт “ходячего человека” не работает, в чем просчет?

function(){ var curr; var swapped = 0; var $W = $(window); var $man = $('.footer-walk-man'); var mw = $man.width(); var max = $W.width() - mw; var time = $W.width()/(mw*1.2); var walk = { init: function (){ walk.right(); walk.counters(); $W.on('resize', function (){ max = walk.getMax(); time = $W.width()/mw; }); }, getMax: function (){ return $W.width() - mw; }, swap: function(){ swapped = swapped ? false : true; curr = curr == '180deg' ? '0deg' : '180deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); }, left: function (){ curr = swapped ? '0deg' : '180deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); TweenMax.to( $man, time, { left: 0, ease: Power0.easeNone, onComplete: function(){ TweenLite.killTweensOf($man); walk.right(); } } ); }, right: function (){ curr = swapped ? '180deg' : '0deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); TweenMax.to( $man, time, { left: max, ease: Power0.easeNone, onComplete: function(){ TweenLite.killTweensOf($man); walk.left(); } } ); }, counters: function (){ var $metr, $cal, _timer; $metr = $('.footer-walk-metr'); $cal = $('.footer-walk-cal'); clearInterval(_timer); _timer = setInterval(function (){ $metr.text(parseInt($metr.text())+1); $cal.text(Number(parseFloat($cal.text())+0.087).toFixed(2)); }, 1000); } }; walk.init();


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


Ответ

Чтобы человечек двигался, Вы задаете left от 0 до max, поэтому самому человечку нужно задать css св-во position:relative или position:absolute (на статику left \ right не действует).
Изначально в $metr и $cal пустота. Стоит задать какое-то стартовое значение (например просто 0):
var curr; var swapped = 0; var $W = $(window); var $man = $('.footer-walk-man'); var mw = $man.width(); var max = $W.width() - mw; var time = $W.width()/(mw*1.2); var walk = { init: function (){ walk.right(); walk.counters(); $W.on('resize', function (){ max = walk.getMax(); time = $W.width()/mw; }); }, getMax: function (){ return $W.width() - mw; }, swap: function(){ swapped = swapped ? false : true; curr = curr == '180deg' ? '0deg' : '180deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); }, left: function (){ curr = swapped ? '0deg' : '180deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); TweenMax.to( $man, time, { left: 0, ease: Power0.easeNone, onComplete: function(){ TweenLite.killTweensOf($man); walk.right(); } } ); }, right: function (){ curr = swapped ? '180deg' : '0deg'; TweenMax.set($man, {transform: 'rotateY('+ curr +')'}); TweenMax.to( $man, time, { left: max, ease: Power0.easeNone, onComplete: function(){ TweenLite.killTweensOf($man); walk.left(); } } ); }, counters: function (){ var $metr, $cal, _timer; $metr = $('.footer-walk-metr'); $cal = $('.footer-walk-cal'); //console.log($metr.text()); clearInterval(_timer); _timer = setInterval(function (){ $metr.text(parseInt($metr.text())+1); $cal.text(Number(parseFloat($cal.text())+0.087).toFixed(2)); }, 1000); } }; walk.init(); .footer-walk-man { width:150px; position:relative; } .footer-walk-man img { max-width: 100%; }


Изменение цвета фона консольного приложения в С++

Как задать цвет тексту я знаю через SetConsoleTextAttribute, это как-то быстро далось, а вот именно фон, как-то не дается. Пробовал вариант с system("color номер нужного цвета");, но как-то все не то что нужно получается. Задача у меня такая, чтоб пользователь сам выбирал и цвет текста и цвет фона, а результат уже в консоль. Мне не нужно решение, хочу сам понять. Перерыл весь MSDN, что-то я там так и не нашел. Дайте пожалуйста, ссылку на нужный ресурс или подскажите в целом, куда смотреть? Google облазил вдоль и поперек, но не попалось ничего из того что нужно, те варианты, мне не подходят. По-идее, так как задача простая, решение тоже долно быть простым. Работаю в Visual Studio 2017


Ответ

#include #include
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); // получение дескриптора // окна консоли
// перечисление доступных цветов enum class color : unsigned short { black, blue, green, cyan, red, magenta, brown, lightgray, darkgray, lightblue, lightgreen, lightcyan, lightred, lightmagenta, yellow, white };
// меняет цвет в консоли на указанный // foreground - цвет текста // background - цвет фона void set_col(color foreground, color background) { SetConsoleTextAttribute( hout, // дескриптор окна консоли в котором необходимо изменить цвет ((short)background << 4) | (short)foreground); // флаг // в котором закодирован необходимые цвета
// (short)background << 4 - приводим к типу short и смещаем на 4 бита влево // (short)foreground - приводим к типу short и объединяем бинарным или | }
int main() { set_col(color::green, color::white); std::cout << "Green text on white background"; std::cin.get(); return 0; }
На счет обработки ввода пользователя: тут на выбор, как реализовывать. Пользователь может вводить строку. Потом грубым перебором if-ом. Можно добавить std::map. Пользователь может также вводить число (но это не юзер-френдли).

Вращение SVG path вокруг окружности

Я хочу вращать polygon вокруг круга.
Я хочу зафиксировать отправную точку полигона в центре круга, подобно этому - http://www.enspiregroup.com
Я много пробовал, но не достиг этой цели.
Мой код ниже
CSS и HTML5
.circle-segment { position: absolute; top: 0; width: 260px; height: 260px; } div .circle-wrap { position: absolute; max-width: 360px; margin: 0 auto; top: 107px; left: 29.7%; } main.css:1032 .circle-wrap { width: 362px; height: 362px; } .main-circle { position: relative; height: 300px; width: 300px; background-color: #0c272e; border-radius: 50%; margin: 15px auto; }



Ответ

Конкретно в этом примере svg вообще не нужен:
.circle { width: 200px; height: 200px; border-radius: 50%; margin: 40px; position: relative; background-color: cadetblue; } .circle:before { content: ''; width: 220px; height: 220px; position: absolute; top: -10px; left: -10px; background: linear-gradient(rebeccapurple, rebeccapurple) no-repeat 110px 110px; border-radius: 50%; animation: rotate 2s linear infinite; } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }


Более того, анимированным svg элементом практически нельзя управлять, а автор сообщения именно это и хотел.
Вращение сектора происходит при прокрутке страницы.
var circle = document.querySelector('.circle'); window.addEventListener('scroll', function(){ circle.style.transform = 'rotate(' + window.pageYOffset + 'deg)'; }); body { min-height: 2000px; } .circle { width: 200px; height: 200px; border-radius: 50%; margin: 10px; position: fixed; background-color: cadetblue; transform: rotate(0deg); } .circle:before { content: ''; width: 220px; height: 220px; position: absolute; top: -10px; left: -10px; background: linear-gradient(rebeccapurple, rebeccapurple) no-repeat 110px 110px; border-radius: 50%; }

Откуда onClick берет значение константы, ведь метод, в локальном контексте которого она существовала завершился и ее больше быть не должно?

Я сидел, никого не трогал, изучал андроид SDK, писал простенькие приложения, как вдруг задумался над одним куском кода и понял, что я в принципе не понимаю как и почему он работает:
public void onBindViewHolder(ViewHolder holder, final int position) { CardView cardView = holder.cardView; ImageView imageView = (ImageView) cardView.findViewById(R.id.image_info); Drawable drawable = ContextCompat.getDrawable(cardView.getContext(), imgResIds[position]); imageView.setImageDrawable(drawable); ((TextView) cardView.findViewById(R.id.text_info)).setText(captions[position]); if(listener != null){ cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickListener(position); } }); } }
То, что никак не укладывается в моей голове - это константа position, в моем понимании эта констант существует как локальная переменная метода
onBindViewHolder
следовательно на момент создания объекта типа View.OnClickListener она определена и существует, но вызов onBindViewHolder завершится раньше, чем будет вызван метод onClick ранее созданного объекта типа View.OnClickListener и я не понимаю откуда onClick берет значение этой константы, ведь метод, в локальном контексте которого она существовала завершился и ее больше быть не должно.
Неужели при такой перегрузке метода он запомнит ссылку на эту константу и она продолжит существовать? Объясните пожалуйста как это работает!


Ответ

Локальные переменные создаются на стеке и уничтожаются при выходе из метода.
final переменные изначально тоже на стеке. Но для анонимного класса View.OnClickListener эта final переменная будет скопирована в хип и будет создано синтетическое поле внутри анонимного класса.
Так что, даже когда метод завершится, очистится только локальный стек, копия final переменной останется внутри анонимного класса.

Как записать значение в переменную во время выполнения асинхронной функции JavaScript [дубликат]

На данный вопрос уже ответили: Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа Имеется метод
function user_info (login) {
var info;
this.pool.getConnection(function(err, connection) { if (err) throw err; connection.query('SELECT * FROM user WHERE login = ?', [login], function (error, results, fields) { info = results; connection.release();
}); });
return info; }
В данном примере в info получаю undefined, тогда как в results записан объект(проверял через дебаг)
Мне нужно вернуть методом user_info объект results, как это сделать? Пробовал почти всё кроме промисов


Ответ

function user_info (login, callback) { this.pool.getConnection(function(err, connection) { if (err) throw err; connection.query('SELECT * FROM user WHERE login = ?', [login], function (error, results, fields) { connection.release(); callback(results); }); }); }
db.user_info(cookies.login, function(info){ /* code that uses user info */ });

Как убрать предупреждение “Сборка My.dll неверно указана как файл”?

Библиотеки подключаемые не через NuGet, сложили в папку dll в каталоге проекта. Добавили ссылки на них, всё работает, но при построении в Visual Studio в Списке ошибок выдаётся предупреждение
Сборка "dll\My.dll" неверно указана как файл.
Что от меня хочет MsBuild и как избавиться от предупреждения?

фрагменты .csproj:
dll\My.dll ... ...


Ответ


Эта строчка говорит о том, что этому файлу в свойстве Build Action указано Content. Описание ошибки в MSDN никак не связано с значением BuildAction=Content которое я нашел в этом ответе
Описание ошибки
MSB3178: Assembly '' is incorrectly specified as a file. This warning is generated during application manifest generation when the build process detects that a file reference is actually a (managed or native) assembly.
Это предупреждение выдается если в процессе сборки обнаружена ссылка на файл который на самом деле является управляемой сборкой или нативной библиотекой.
Описание значения Build Action=Content
Content: Allows you to retrieve a file (in the same directory as the assembly) as a stream via Application.GetContentStream(URI). For this method to work, it needs a AssemblyAssociatedContentFile custom attribute which Visual Studio graciously adds when you mark a file as "Content"
Добавляет возможность получить содержимое файла в виде потока с помощью метода Application.GetContentStream(URI). Файл должен быть помещен в той же папке что и текущая сборка.

Тем не менее, здесь можно найти ответ, который рекомендует для решения аналогичной проблемы изменить Build Action на None. Это не принятый ответ, но у него самое большое количество плюсов.
Я не сумел воспроизвести аналогичную ошибку и проверить ответ. Но нашел подтвержение ему в этом блоге
This time I tried something else, this time I set the build action to none and copy if newer for each of the dll’s generating this warning. It seems to have gotten rid of the warnings plus the program still compiles and runs (with complete directory clean).
На этот раз я попробовал кое-что еще. Я установил build action в none и задал опцию copy if newer для каждой dll, которая выдавала это предупреждение.
Кажется, это помогло избавиться от предупреждений, плюс программу можно было скомпилировать и запустить.

Поэтому я советую попробовать установить свойство Build Action=None. Скорее всего это поможет решить проблему.
Так как у меня нет локализованного интерфейса студии, прикладываю скриншот, на тот случай если будущим читателям будет необходима подсказка - как найти это свойство в студии. Нужно выделить файл в Solution Explorer (Обозреватель решений), и тогда его свойства станут доступны в этом окне.

Обрезать строку в переменной

Категорически приветствую! Существует некий скрипт, в переменной которого содержится строка: hello-1.my.domain.local hello-world-12.two.domain.local hello-7.three.domain.local hello-world-16.my.domain.local
Подскажите пожалуйста наиболее рациональный и правильный способ приведения этой строки к виду hello-1.my,hello-world-12.two,hello-7.three,hello-world-16.my
Сейчас я делаю это так:
VAR2=`echo $VAR1 | sed 's/.domain.local/,/g;s/ //g;s/,$//'`
Что на мой взгляд отвратительно (хотя бы из-за хардкода .domain.local)


Ответ

Вы можете использовать
sed -E 's/(\.[^.]+){2}([ \t]+|$)/,/g; s/,$//'
См. демо онлайн
Шаблон (\.[^.]+){2}([ \t]+|$) находит две последовательности ((...){2}) "точка" (\.) + "один и более символов, отличных от точки" ([^.]+), за которым следует один и более пробелов ([ \t]+) или символов табуляции или (|) конец строки ($), и заменяет на запятую. s/,$// необходим для удаления запятой, добавленной в конце строки.
Версия с awk
awk 'BEGIN {FS=OFS="."; RS=" "; ORS=","} {NF-=2;print}' | sed 's/,$//'
И более продвинутая версия без необходимости в sed
awk 'BEGIN {FS=OFS="."; RS=" "} {NF-=2; l=l $0 ","} END{sub(/,$/, "", l); print l}'
См. онлайн-демо
Кратко:
BEGIN {FS=OFS="."; RS=" "} - FS=OFS="." задают разделитель полей (символ ) при чтении и записи, а RS=" " задаёт разделитель строк (пробел) {NF-=2; l=l $0 ","} - уменьшаем кол-во полей на 2 для каждой строки и добавляем значение строки к переменной l + запятая END{sub(/,$/, "", l); print l} - в конце удяляем последнюю запятую.

Включение Unicode при использовании WinAPI

Для включения режима Юникода в WinAPI требуется два определения:
#define UNICODE #define _UNICODE
Подскажите, зачем нужно два определения, чем они отличаются и бывают ли ситуации, когда нужно одно, но не другое?


Ответ

UNICODE используется заголовочными файлами Windows, а _UNICODE - заголовочными файлами C-runtime и MFC.

Формула полета пули в 2d игре

Пишу небольшой 2D шутер. Возникла проблема с просчетом траектории полета пули. если в кратце: персонаж, который стреляет находится в центре экрана ( вид сверху), нам известен угол, на который повернут персонаж, начальная позиция пули так же центр экрана соответственно. Вот как я это пытался сделать:
phy->ownbullets[i].cX += cos(da) * .5 ; phy->ownbullets[i].cY += sin(da) * .5 ;
где .5 - скорость полета, da - угол, но все равно траектория хаотична. В чем может быть проблема?
Запись экрана - http://rgho.st/6HkZk2Tpy


Ответ

Функции sin и cos принимают значения в радианах. Если значения угла в градусах, то необходимо перевести их в радианы (умножить на число Пи и разделить на 180 градусов):
const double pi = 3.14159265358979323846; phy->ownbullets[i].cX += cos(da * pi / 180) * .5 ; phy->ownbullets[i].cY += sin(da * pi / 180) * .5 ;

Как получить время простоя компьютера?

Как выполнить некоторое событие, если компьютер простаивает определённое время. Подскажите, пожалуйста, какую-нибудь умную API-функцию. Или если таких нет или вы знаете, как отследить движение мыши вне окна своего приложения, и/или когда оно неактивно, то поделитесь советом.


Ответ

Возможно, вам нужно это: GetLastInputInfo (Windows API)
Только начиная с висты эта функция отдаёт структуру только для текущего пользователя - т.е. в сервисе использовать не получится.

Нейронная сеть

Может быть кто-нибудь знает хороший источник с информацией на эту тему? (желательнее чтобы информация была попроще и с примерами)


Ответ

Нейронные сети (statsoft) Нейронные сети (basegroup) Введение в теорию (каталог ресурсов)

Высвобождение памяти delete[]

Будет ли корректно работать код? void *ptr_1; long *ptr_2; *ptr_2=new long[10]; (long*)ptr_1=ptr_2; delete[] ptr_2;


Ответ

Во-первых, в том виде что вы привели, этот код даже компилироваться не будет, вот так он должен выглядеть: void *ptr_1; long *ptr_2; ptr_2 = new long[10]; ptr_1 = ptr_2; delete[] ptr_2; Во-вторых, после того как выполнится delete[] ptr_2;, указатель ptr_1 будет указывать на высвобожденную память, соответственно, любая попытка записи/чтения в/из нее приведет к ошибке.

gif анимация на php

Задался вопросом создания анимированной gif картинки, средствами PHP, но информации в интернете по этому поводу я не нашёл. Существует ли какая-нибудь библиотека для работы с ними?


Ответ

Есть, не подскажу точно, но на хабре есть статья называется капча 4д. Там полностью описывается как рисовать гифы. Если не ошибаюсь используется библиотека Imagick. Спасибо Sh4dow за то что нашел статью

Java & GWT: Web-приложение с desktop-версией

Постановка задачи: Разработать web-приложение для пользователей Windows, Linux, iPad, возможно MacOS, не для iPod и других мобильных платформ. С desktop-версией для Windows, Linux, MacOS, способной работать без активного соединения с интернет и выполнять весь основной функционал. Основной функционал заключается в произведении вычислений и генераций .txt, .doc, .pdf документов, на основе выбранных на форме пользователем параметров и данных из БД. Предлагаемое решение: Основной функционал готовить в виде общих библиотек (для использования в обоих версиях) на Java и БД sqlite. Версия-web: на клиенте только GUI на Java GWT, основной функционал выполняется на Java веб-сервере. Версия-desktop: GUI на Java Swing, основной функционал выполняется на клиенте. Логику приложения реализовать вместе с (на стороне) GUI, которая обращается посредством веб-сервера (web-версия) или напрямую (desktop-версия) к интерфейсным функциям общей библиотеки для выполнения основного функционала. Имеются вопросы: Используем NetBeans 7, настольные приложения Swing и веб-службы SOAP/REST на Java, там разрабатываются довольно просто. Есть проблемы с установкой и настройкой GWT. Насколько адекватно поддерживается в netbeans GWT? Альтернативы IDE? Идея с общей библиотекой для основного функционала выглядит обнадеживающе, это только наши иллюзии или это вполне реализуемо? Дополнение к п.2.: можно ли одно и то же хранилище данных sqlite использовать и на сервере и на клиенте? Какие еще есть альтернативы? Дополнение к п.2.: имеются ли готовые библиотеки на Java для работы с документами форматов .doc и .pdf? GWT используем для обеспечения работоспособности версии-web на всех вышеперечисленных платформах, могут ли нас ожидать проблемы несовместимости? Desktop приложения на Swing по разному выглядят на Windows и Linux. Похоже, как выяснилось, потому, что компоненты Swing надстроены над AWT. Эта проблема решаема, т.е., можно ли оформить интерфейс так, что бы выглядело всегда одинаково? UPD GWT приложение транслируется в JS во время выполнения на сервере, или приложение сначала транслируется в JS код и только затем развертывается на сервере? UPD 2 Дополнение к п.2.: имеются ли готовые библиотеки на Java для генераций .dxf документов?


Ответ

Для Eclipse есть очень удобный плагин для работы с gwt Общая библиотека это хорошо, но, вероятно, будет много различий, ведь как-никак инструментарий для разработки gwt web приложений и desktop приложений весьма отличается. Всё зависит от того, что Вы собираетесь пихать в эту библиотеку, и что у Вас вообще за проект. Всё зависит от поставленных задач и проекта. работа с .pdfработа с .doc Вряд ли. Можно. ссылка JS код компилируется вместе с приложением, на сервере уже хранится в виде JS. Исключение - hosted mode - режим, сделанный для удобства разработки. Для браузера нужно поставить соответствующий плагин, чтобы видеть приложение в таком режиме. Плюсы - возможность отладки и публикация изменений на сервер "на лету".

Перемещение файлов java

Добрый вечер. 3 дня уже пытаюсь понять, как перемещать файлы в java. Есть задача: прочитать список файлов из указанного каталога, отсортировать по слову, вводимому с клавиатуры и переместить отсортированные файлы в указанный каталог. Этот метод возвращает список файлов из каталога. public static String[] getFilesList(File fl) {
String[] listFiles = fl.list();
for (int i = 0; i < listFiles.length; i++) { } return listFiles; } Далее реализована сортировка циклом: for (int i = 0; i < arr.length; i++) { if (arr[i].indexOf(inpFilterName) > 0) И вот теперь самая большая проблема - в этом же цикле я хочу сразу перемещать файлы по указанному пути. Гугл подсказал, что необходимо использовать метод renameTo() класса File. Пыталась реализовать так: File dir = new File(); dir.renameTo() Но я не могу понять, что передавать ему в качестве аргументов, и сработает ли, если на входе у нас имя файла а не файл? Вобщем, я совсем запуталась и очень жду помощи!


Ответ

Рискну предположить, что под сортировкой вы имели ввиду фильтрацию - т.е. переместить только те файлы, в именах которых содержится указанная строка inpFilterName. В таком случае можно поступить следующим образом: File destFolder = new File("output"); // это папка, в которую будем перемещать File[] files = fl.listFiles(); // получаем непосредственно файлы, не просто имена for (File file : files) { if (file.getName().indexOf(inpFilterName) != -1) { file.renameTo(new File(destFolder, file.getName())); } } Кстати, обратите внимание на разницу условий в if. Возможно, вы написали ровно то, что хотели, но на всякий случай: ваше условие выберет строки, в которых искомая подстрока стоит по индексу 1 или больше. Т.е. "test123".indexOf("test") это условие не пропустит. String#indexOf() возвращает -1 в случае неудачи, а не 0.

Автоматное программирование

Подскажите, пожалуйста, в чем преимущества и недостатки автоматного программирования? К каким языкам автоматное программирование более применительно? (как с точки зрения парадигмы программирования - функциональное например, так и с точки зрения возможностей языка - возможность метапрограммирования и т.п., особенно интересует C#) Можно ли автоматное программирование применять для написание логики в играх или для для этого есть более эффективные методы? Есть ли различие между автоматным программированием и программированием с использованием автоматов или это просто игра слов?


Ответ

Для подробного ознакомления с темой рекомендую посмотреть статьи А.А.Шалыто на соответствующие темы. Вообще, если немножко броситься в демагогию, то автоматное программирование - это некоторый аналог идеи функционального программирования, но с более конкретной "практической точки зрения". Любой логический блок есть конечный автомат (утрированно, конечно), плюсы и минусы тоже вполне очевидны. Так, например, т.к количество состояний такой программы конечно и может изменяться только в определенных ее точках, то становится проще отладка, поддержка и осознание механизмов работы Из недостатков можно выделить сложность написания действительно качественного кода, недостаточность инструментов IDE для поддержки такой парадигмы и не слишком большое количество ситуаций, когда автоматное программирование действительно хорошо себя проявляет "из коробки" (логические стейт-машины, всякие штуки вроде лексического анализа, может-быть, еще программирование UI). Если интересно, то мое имхо насчет этого такое же как, например, насчет функциональной парадигмы - хорошо в ряде случаев, но не тянет на парадигму. Т.е намного проще использовать конечный автомат или функциональный стиль программирования для решения конкретной задачи, нежели пытаться решать все задачи в этом стиле. P.S У Шалыто много примеров, есть хорошие, есть натянутые, изучайте :)

Обязательно ли закрывать Statement и ResultSet?

Java сервлет при каждом вызове получает Connection с SQL базой данных (Oracle oracle.jdbc.driver.OracleDriver, используя DriverManager.getConnection()), затем создает Statement и ResultSet. Все в локальных переменных. Очевидно (везде пишут об этом), что Statement и ResultSet надо закрывать. Вопрос: будет ли утечка ресурсов, если не закрыть ResultSet или Statement? UPD (в ответ на ответы). Итак, Oracle XE development, соответственно, версия бесплатная, ограниченная (но настолько!) Прежде всего, Statement и ResultSet в нормальном режиме я закрывал, а вот для Exception(s) ограничился только закрытием Connection в try { ... } finally { ... } Поэтому для тестирования сначала выбросил Statement и ResultSet close() и в непрерывном цикле на 77 connection все свалилось, но свалилось по причине ORA-12519. Не Могу ОТКРЫТЬ новую connection!!! Вот те раз, я же их закрываю! Вернул все close() - то же самое. Я ведь в непрерывном цикле запросы не гонял, предположить такую подлянку не мог! Пробую цикл с одним соединением (при закрытии Statement и ResultSet) все работает (1000000 циклов). Если не закрывать, сначала падает по ResultSet, потом по Statement. Почитал про ORA-12519 в сети, увеличил ресурсы (alter system set processes=150 scope=spfile;, это кому-то помогло) падение отодвинулось до 230 соединений и все. Потом вычитал, оказалось, дело в том, что ограничено количество соединений в единицу времени. Сделал 100 в секунду - то идет, то валится. Сейчас идет с 50 в секунду (цикл 100000 после каждой сотни открытых-закрытых sleep(2000)) - YES - прошло. Так что, спасибо всем!!! UPD-2 Искал оптимальную задержку (при повторе попытки открыть новое соединение) оказалось 350 миллисекунд - для 1000 циклов у меня общая задержка в худшем случае 6.3 с. Почему-то она плавает, нет повторяемости. Для других задержек (от 50мс до 3с) общее время хуже. Нет ли у кого идей, как правильно организовать подобные замеры? UPD-3 Oracle - это загадка. Попробовал на работе с "боевой" 11.g Enterprise Edition на сервере. Выполняется раз в 10 медленнее, поэтому гонял до 10000 циклов. Нет сбоев! Без разницы, закрываю Statement и ResultSet или нет. Работает и все тут (без всяких sleep()), хотя драйвер в программе тот же самый от XE Development. У кого-нибудь есть идеи??? Как вообще правильно программировать взаимодействие с базой?


Ответ

Насчет statement не уверен, но точно знаю, что с resultset будет. Кажется, предел находится на 32к незакрытых resultset, oracle не сможет возвращать результаты выборки. имхо, лучше всегда за собой убирать :)

Посоветуйте скриптовый движок [закрыт]

Посоветуйте, пожалуйста, скриптовый движок для .Net. Желательно с отладчиком, автокомплитом, подсветкой синтаксиса. Язык лучше бы C#.


Ответ

Сам давно использую CSScript (полноценный C# в роли скриптового двига). Как уже писали выше, есть бинд для LUA - LuaInterface. Стоит еще посмотреть вот на эту новую сказку - Microsoft Roslyn (как основа для реализации своего языка). Просто и быстро - Conscript. Движков разных достаточно много, выбор зависит от того, какую функциональность ты от него хочешь получить.

Виртуальное наследование: проблема с вызовом конструктора с параметрами при создании объекта

При ромбовидном наследовании не вызывается конструктор с параметрами, при создании объекта производного. Т.е. если в мэйне будет: D object (1, 'c', .99, ""); cout << object; то в таком случает вместо желаемого вызова A(N), который по логике должен вызываться согласно цепочке, вызывает конструктор без параметров. Сама мини-иерархия: class A { public: A () {} A (int N) : n (N) {} protected: int n; };
class B : virtual public A { public: B () : A () {} B (int N, char C) : A (N), c (C) {} protected: char c; };
class C : virtual public A { public: C () : A () {} C (int N, double D) : A (N), d(D) {} protected: double d; };
class D : public B, public C { public: D () : B (), C () {} D (int N, char C, double D, char* Str) : C (N, D), B (N, C) { strcpy (str, Str); }
friend ostream& operator << (ostream& out, const D& operand) { out << operand.n << " " << operand.c << " " << operand.d << " " << operand.str << endl; return out; }
friend istream& operator >> (istream& in, D& operand) { cout << "int : "; cin >> operand.n; cout << "char : "; cin >> operand.c; cout << "double : "; cin >> operand.d; cout << "string : "; cin >> operand.str; return in; }
protected: char str[20]; }; Извините, конечно, за простейший вопрос, но я не могу разобраться =)


Ответ

И не получится. На то оно и виртуальное наследование. Конструктор базового класса при виртуальном наследовании надо вызывать явно class D{ ......... D (int N, char C, double D, char* Str) : C (D), B (C), A(N) { strcpy (str, Str); } ......... };

Python: разбить список на список списков, по элементу-разделителю

Python 3.2. Есть список lst, в котором есть значения вперемешку с элементами-разделителями. Например, ["spam", "ham", None, "eggs", None, None, "bacon"]. Хочу получить список списков, разбив lst по разделителю sep = None, т.е., получить [["spam", "ham"], ["eggs"], ["bacon"]] Полистал стандартную библиотеку, но ничего похожего не нашел. На PyPi искать сложно, быстрый пробег тоже ничего не дал. Наглая попытка проэксплуатировать str.split, разумеется, провалилась с TypeError Посоветуйте, пожалуйста, более красивое решение, чем вот этот вырвиглазный монстр. Не хочу ощущать себя Франкенштейном. from functools import reduce
# Fugly. def split_on(sep, lst): """ Given an iterable `lst`, split it into iterable of lists by `sep`.
>>> list(split_on(0, [1, 2, 3, 0, 4, 5, 0, 0, 6])) [[1, 2, 3], [4, 5], [6]] """ s = sep if hasattr(sep, "__call__") else lambda x: x == sep return filter(lambda sublist: len(sublist) > 0, reduce(lambda x, elem: x + [[]] if elem == sep else x[:-1] + [x[-1] + [elem]], lst, [[]]))


Ответ

Судя по всему, функциональное программирование оставило на вас серьезный отпечаток :) Сразу отмечу, что семантика split для случая вашего примера подразумевает возврат [["spam", "ham"], ["eggs"], [], ["bacon"]]. Это так, поскольку между None и None с точки зрения разделителей располагается пустой список. Так вот, решений можно придумать несколько. Наиболее explicit вариант подразумевает что-то в следующем духе: def split_on(what, delimiter = None): splitted = [[]] for item in what: if item == delimiter: splitted.append([]) else: splitted[-1].append(item)
return splitted Понятно, что это решение работает с точностью до контракта функции касательно работы в случае пустого списка - [] и списка, состоящего только из разделителя - [None]. Я определил этот контракт следующим образом: [ ] -> [[ ]], [None] -> [[], []]. Для первого случая контракт довольно спорный. Во втором же случае результат получается, поскольку слева и справа от разделителя по сути расположены пустые последовательности. В случае, если вы захотите изменить это поведение, то модифицировать метод не должно составить особого труда. Пример использования: list1 = ["spam", "ham", None, "eggs", None, None, "bacon"] list2 = [] list3 = [None] list4 = ["eggs"]
print split_on(list1) print split_on(list2) print split_on(list3) print split_on(list4)
# Результат: [['spam', 'ham'], ['eggs'], [], ['bacon']] [[]] [[], []] [['eggs']] Из альтернативных вариантов - можно написать аналогичный предложенной функции генератор с yield'ами и, думаю, что можно придумать решение, разбивая предложенную итерабельную последовательность на группы, а дальше объединяя результаты путем groupby из itertools. Правда, мне кажется, что очевидность этих решений по сравнению с предложенным выше методом будет несколько хуже.

Неверная высота страницы HTML

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


то он будет висеть где-то на границе красной области, но никак не у границы окна. Проблема не в браузере, проверял во всех последних версиях. Причем, в IE все, что ниже красной области тупо обрезатся. Код HTML и CSS проходят проверку на валидность. В чем может быть проблема?
Скриншот проблемы.


Ответ

Если у блока имеется свойства position: absolute или float: left или right То что бы блок не выходил за рамки родительского блока желательно после блока с перечисленными свойствами ставить