Страницы

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

воскресенье, 14 апреля 2019 г.

Как можно реализовать подобную вещь? (js, jQuery)

Как можно реализовать вот такую вещь?
Пояснение: Есть два изображения, которое наложено одно на другое. Необходимо сделать так чтобы при наведении мышкой на блок, частично исчезало изображение на величину зависящую от правого края до мышки.
P.s. я пытался найти в поисковике решение, но не смог сформулировать грамотно запрос.


Ответ

Как то так.
let $black_white = $('.black_white'), img_width = $('.black_white img').width(), init_split = Math.round(img_width/2); $black_white.width(init_split); $('.before_after_slider').mousemove((e) => { let offX = (e.offsetX || e.clientX - $black_white.offset().left); $black_white.width(offX); }); $('.before_after_slider').mouseleave((e) =>{ $black_white.stop().animate({ width: init_split },1000) }); .before_after_slider { position: relative; margin: 60px; width: 400px; height: 300px; } .before_after_slider > * { position: absolute; } .black_white { overflow: hidden; }

black_white

Как отличить ssd от hdd?

Есть ноутбук. Как не разбирая его узнать, что в нём установлено - ssd или hdd?


Ответ

нажимаешь пуск в строке поиска пишешь > оптимизация дисков . твердотельный накопитель это ssd - жёсткий диск - это hdd

Работа с несколькими базами данных одновременно

Создаю приложение калькулятор, в котором пользователь создает формулу расчета и сохраняется в Базе Данных SQL Server, нужно реализовать подключение к БД с исходными данными, откуда берется таблица, столбец которой соотносится с переменной в формуле. Отсюда выходит что мне надо работать с двумя таблица одновременно. Возможна ли работа с двумя БД одновременно, т.к. насколько я понял подключение идет через connectionString ,который только один, где можно указать только одно подключение, как реализовать, возможно ли это c Entity Framework или делать на чистом С#?


Ответ

Вы не правы, можно использовать не одну ConnectionString, это выглядит примерно вот так:

Ну и контекст нужен сразу для двух БД одновременно.

Как перебрать все комбинации из чисел и арифметических операций?

У меня есть задача, и хотелось бы узнать как её можно реализовать с помощью C++:
Есть цифры 1,3,4,6. Нужно написать программу реализующую последовательный перебор этих цифр и знаков четырех элементарных арифметических операций (сложение, вычитание, умножение и деление), чтобы получилось выражение с результатом 24.
Нужно именно как-то перебором это реализовать что бы подставлялись цифры и операции над ними последовательно а когда будет 24 перебор остановился и выдал результат.
У меня вообще нет идей как это можно реализовать подскажите пожалуйста или если можно напишите код или хотя бы кусок кода.


Ответ

Код писать не буду, опишу алгоритм.
Перво-наперво, определяетесь, что будете делать с потерей точности при делении(в числах с плавающей запятой). Предлагаю 2 варианта:
Реализовать класс рациональных чисел, в котором определить числитель/знаменатель, арифметические операции с автосокращением и т.п. Сравнение с результатом проводить с учётом погрешности (Ввести так называемый epsilon)
Во втором случае, теоретически могут появиться неверные решения
Далее, ознакомливаетесь, что такое обратная польская нотация...
1 + 2 * 3 === 1 2 3 * +
В вашем случае, оно сводится к выражению из четырёх чисел и трёх арифм.операций в формах:
a0 a1 a2 a3 op0 op1 op2 # линейное вычисление a0 a1 op1 a2 op2 a3 op3 # выражение вида a-b-c-d a0 a1 op1 a2 a3 op2 op3 # выражение вида (a+b)/(c-d)
В более сложном задании придётся перебрать все формы. Возможно проще перебирать вообще все, включая некорректные, но можно и формализовать.
Осуществляете перебор всех перестановок чисел 4!=24 и всех возможных операций. Операций всего 4(+-*/), выполняются 3 раза. Итого перебор операций 4^3=64, а всего полный перебор (двух форм) займёт 2*24*64 = около 3000 итераций.
На каждой итерации вычисляете выражение и сравниваете его с нужным результатом.
На базе найденного выражения из ОПН форматируете вывод решения.

ЗЫ: На этапе вычислений, не забудьте про edge cases. Деление на нуль нужно обработать (перейти к следующей итерации).

Демонстрация алгоритма на javascript:
class OPN { constructor() { this.stack = []; } __computeFn(a, b, op) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b === 0) throw new Error('Division by zero'); return a / b; default: throw new Error(`Unknown operator ${op}`); } } __renderFn(a, b, op) { return `(${a} ${op} ${b})`; } __process(tokens, fn) { for (let token of tokens) { if (typeof token === 'number') { this.stack.push(token); } else { // assume operation if (this.stack.length < 2) throw new Error('Incorrect expression'); let b = this.stack.pop(); let a = this.stack.pop(); this.stack.push(fn(a, b, token)); } } if (this.stack.length != 1) throw new Error('Incorrect expression'); return this.stack.pop(); } calc(tokens) { return this.__process(tokens, this.__computeFn); } render(tokens) { return this.__process(tokens, this.__renderFn); } } class Permutator { constructor() { this.current = []; this.used = [];} getAllFor(input) { for (let i = 0; i < input.length; i++) { let item = input.splice(i, 1)[0]; // take item this.used.push(item); // use item if (input.length == 0) this.current.push(this.used.slice()); this.getAllFor(input); this.used.pop(); // restore state input.splice(i, 0, item); // restore item } return this.current; } } let calc = new OPN; let permutator = new Permutator; let numbers = [1, 3, 4, 6]; let ops = ['+', '-', '*', '/']; const EPS = 1e-6; function find () { let solutions = []; for (let perm of permutator.getAllFor(numbers)) { for (let op1 of ops) { for (let op2 of ops) { for (let op3 of ops) { let forms = [ [perm[0], perm[1], perm[2], perm[3], op1, op2, op3], [perm[0], perm[1], op1, perm[2], perm[3], op2, op3], [perm[0], perm[1], op1, perm[2], op2, perm[3], op3], ]; for (let form of forms) { try { let res = calc.calc(form); if (Math.abs(24 - res) < EPS) solutions.push(form); } catch(e) {} } } } } } return solutions; } let solutions = find(); solutions.forEach(solution => console.log('Solution: ', calc.render(solution)));

Библиотека AppCompat - в чём же её преимущества?

У меня есть компонент Activity. Вот исходный код компоновки:

Минимальный требуемый уровень API у моего приложения - 16. Для создания Android-приложений я использую среду программирования Android Studio.
В предварительном просмотре компоновка выглядит так:

то есть, шрифт Russo One успешно был задан элементу TextView (путь к файлу шрифта: res\fonts
usso_one.ttf). Но на реальном телефоне всё выглядит иначе:

Проблема в том, что шрифт не задаётся элементу TextView. Я решил данную проблему при помощи использования библиотеки AppCompat (com.android.support), а конкретно - при помощи замены компонента Activity на AppCompatActivity, и тогда шрифт был успешно задан элементу TextView
Но теперь проблема заключается в другом. До использования библиотеки AppCompat моё приложение весило ≈345 Кб. После того, как я добавил эту библиотеку в мой проект, приложение стало весить 2,6 Мб — это почти в 8 раз больше. Подскажите, используют ли эту библиотеку современные профессиональные программисты в своих Android-приложениях. В чём же заключается суть использования этой библиотеки? В интернете нашёл не много информации о ней, многие лишь утверждали, что она помогает сохранять красивый одинаковый стиль приложений на более ранних версиях Android... У моего приложения я хочу задать минимальный требуемый уровень API 15. Стоит ли мне в данном случае пользоваться этой библиотекой и если стоит, то какими её преимуществами руководствоваться? Очень мало русскоязычных справочников, документаций, форумов на эту тему в интернете я сумел найти.
Может быть, лучше скопировать только определённые нужные мне классы из библиотеки AppCompat и вставить их в моё приложение? Ну, допустим, мне нужен только класс AppCompatActivity в данном случае, его я и скопирую в моё приложение в отдельный пакет. Я не пользуюсь классом, к примеру, FloatingActionButton, вот и не копировать его в моё приложение вовсе. Не плохо ли поступить именно так со всеми классами этой библиотеки?


Ответ

Класс Activity находится в стандартной библиотеке андроида на каждом девайсе. Засим не нужно подклчать к-л библиотеки для использования этого класса. Но в этом кроется главная проблема - эта библиотека обновляется только с обновлением ОС девайса, что происходит или редко или никогда. Таким образом использование Activity приведёт к тому, что на разных девайсах с разными версиями ОС (в т.ч. минорными) у вас будет разное поведение в разных местах, разные баги и большие проблемы с их воспроизведением и фиксом. И это не говоря о разном отображении одних и тех же элементов интерфейса.
Засим следует всегда использовать библиотеку поддержки и класс AppCompatActivity - так у вас на всех девайсах всех возможных версий будет одна и та же версия классов и бороться вам надо будет в случае чего не со всем зоопарком версий, а только с одной. Ну и интерфейс будет везде одинаково выглядеть.
Вот эта же инфа в документации (относительно использования Toolbar, но это относится и ко многим другим вещам, в частности к TextView, которое автоматически заменится на android.support.v7.widget.AppCompatTextView, в котором много улучшений и исправлений. В т.ч. со шрифтами):
Beginning with Android 3.0 (API level 11), all activities that use the default theme have an ActionBar as an app bar. However, app bar features have gradually been added to the native ActionBar over various Android releases. As a result, the native ActionBar behaves differently depending on what version of the Android system a device may be using. By contrast, the most recent features are added to the support library's version of Toolbar, and they are available on any device that can use the support library. For this reason, you should use the support library's Toolbar class to implement your activities' app bars. Using the support library's toolbar helps ensure that your app will have consistent behavior across the widest range of devices. For example, the Toolbar widget provides a material design experience on devices running Android 2.1 (API level 7) or later, but the native action bar doesn't support material design unless the device is running Android 5.0 (API level 21) or later.

Есть ли в c# удобная функция поиска массива байтов внутри другого массива байтов?

for (int i = 0; i < fs.Length; i++) { if (fs[i] == 64) { if (fs[i + 1] == 115) { if (fs[i + 2] == 46) { if (fs[i + 3] == 119) { if (fs[i + 4] == 104) { if (fs[i + 5] == 97) { if (fs[i + 6] == 116) { if (fs[i + 7] == 115) { if (fs[i + 8] == 97) { byte[] noom = { fs[i - 11], fs[i - 10], fs[i - 9], fs[i - 8], fs[i - 7], fs[i - 6], fs[i - 5], fs[i - 4], fs[i - 3], fs[i - 2], fs[i - 1] }; string str = Encoding.UTF8.GetString(noom, 0, noom.Length); if (Convert.ToInt64(str) > 0) { numbers.Add(str); } } } } } } } } } } }
Сейчас использую что то типо этого. Неудобно


Ответ

Думаю, вам нужно что-то такое:
var pattern = new byte[] { 64, 115, 46, 119, 104, 97, 116, 115, 97 }; const int patternOffset = 11; for (int i = patternOffset; i < fs.Length - pattern.Length; i++) { if (!fs.Skip(i).Take(pattern.Length).SequenceEqual(pattern)) continue;
var numBytes = fs.Skip(i - patternOffset).Take(patternOffset); string str = Encoding.UTF8.GetString(numBytes, 0, numBytes.Length); if (long.TryParse(str, out var num)) numbers.Add(num); }
Обратите внимание на начальный и конечный индексы в цикле for: без этой поправки вы рискуете вылететь за границы диапазона.

Как подсказывает @АндрейNOP в комментариях, можно воспользоваться более изящным
new ArraySegment(fs, i, pattern.Length).SequenceEqual(pattern)
и
var numBytes = new ArraySegment(fs, i - patternOffset, patternOffset);

Почему статический блок инициализации выполнился после конструктора?

Доброго времени суток коллеги!
В литературе пишут, что при загрузке класса в первую очередь выполняется статический блок, а потом уже динамический блок и конструктор. У меня получилось написать класс так, что статический блок выполнился в последнюю очередь.
public class Singleton { static Singleton st = new Singleton(); static { //статический блок System.out.println("Статический блок"); }
{ //анонимный блок System.out.println("Динамический блок"); }
Singleton(){ //конструктор System.out.println("Конструктор");
} public static void main(String[] args) { //Пустая точка входа } }
OUTPUT:
Динамический блок Конструктор Статический блок
Вопрос: Как объяснить наблюдаемое поведение?


Ответ

Давайте по порядку посмотрим:
Первым у вас объявлено статическое поле:
static Singleton st = new Singleton();
Его нужно проинициализировать, соответственно вызывается конструктор:
Singleton() { System.out.println("Конструктор"); }
Но перед вызовом конструктора есть динамический блок инициализации, поэтому сперва инициализация объекта происходит в этом блоке, а потом уже выполняется конструктор:
{ //анонимный блок System.out.println("Динамический блок"); }
//затем вызывается непосредственно конструктор
Итак, первая строчка класса готова, статическое поле static Singleton st проинициализировано, далее уже инициализируем статический блок. Можете, на основе моего ответа предположить, что будет если в статический блок прописать ещё один вызов конструктора Singleton? Предположите, и можете попробовать затем и сравнить своё предположение.
UPD.
Нельзя сказать что static блок вызывается перед динамическим блоком. Они вызываются при разных условиях. Static блок вызывается после загрузки класса class loader'oм, а динамический блок вызывается при создании экземпляра класса. То есть static - инициализация класса, dynamic - инициализация экземпляра класса. И динамический блок в вашем конкретном примере вызывается во время инициализиции экземляра Singleton в первой строчке, которая static поле.

Ограничить величину int c++?

Например есть
int a; cin >> a;
И нужно при записи ограничить величину, то есть например что бы a было больше 0 и не больше 100. Возможно ли такое в c++ и как это сделать?


Ответ

Так годится?
int inputInt(const char * prompt, int m = INT_MIN, int M = INT_MAX) { int N; for (;;) { std::cout << prompt << " (целое от " << m << " до " << M << "): " << std::flush; if ((std::cin >> N).good() && (m <= N) && (N <= M)) return N; if (std::cin.fail()) { std::cin.clear(); std::cout << "Неверный ввод, повторите.
"; } else { std::cout << "Число вне допустимого диапазона значений. Повторите ввод.
"; } std::cin.ignore(100,'
'); } }
a = inputInt("Введите число от 0 до 100",0,100);

Обучение нейронной сети теореме Пифагора

Хочу обучить НС теореме Пифагора. Всё вроде правильно сделал, нормализовал данные, модель правильная, а вот в чём ошибка не понятно..
import numpy as np
from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.utils import np_utils
np.random.seed()
NB_EPOCH = 500 VERBOSE = 1
X_in = [[ 0 , 44 ], [ 0 , 18 ], [ 38 , 0 ], [ 48 , 14 ], [ 0 , 36 ], [ 14 , 0 ], [ 34 , 0 ], [ 0 , 0 ], [ 0 , 38 ], [ 32 , 0 ], [ 28 , 0 ], [ 36 , 0 ], [ 20 , 48 ], [ 0 , 6 ], [ 0 , 20 ], [ 0 , 42 ], [ 0 , 8 ], [ 24 , 32 ], [ 4 , 0 ], [ 6 , 8 ], [ 24 , 10 ], [ 0 , 22 ], [ 16 , 12 ], [ 30 , 40 ], [ 0 , 32 ], [ 0 , 32 ], [ 16 , 0 ], [ 48 , 20 ], [ 0 , 8 ], [ 32 , 0 ], [ 0 , 46 ], [ 0 , 22 ], [ 0 , 8 ], [ 10 , 24 ], [ 0 , 36 ], [ 14 , 0 ], [ 0 , 22 ], [ 42 , 0 ], [ 16 , 12 ], [ 40 , 30 ], [ 44 , 0 ], [ 40 , 0 ], [ 34 , 0 ], [ 0 , 32 ], [ 40 , 30 ], [ 32 , 0 ], [ 0 , 30 ], [ 24 , 18 ], [ 0 , 26 ], [ 22 , 0 ], [ 0 , 4 ], [ 16 , 0 ], [ 10 , 0 ], [ 0 , 32 ], [ 0 , 42 ], [ 2 , 0 ], [ 0 , 38 ], [ 32 , 24 ], [ 48 , 0 ], [ 20 , 0 ], [ 0 , 18 ], [ 0 , 38 ], [ 14 , 48 ], [ 40 , 42 ], [ 16 , 12 ], [ 26 , 0 ], [ 0 , 20 ], [ 40 , 30 ], [ 16 , 30 ], [ 36 , 48 ], [ 36 , 0 ], [ 18 , 24 ], [ 34 , 0 ], [ 16 , 0 ], [ 0 , 24 ], [ 0 , 24 ], [ 0 , 18 ], [ 38 , 0 ], [ 28 , 0 ], [ 0 , 34 ], [ 0 , 36 ], [ 24 , 32 ], [ 16 , 30 ], [ 40 , 30 ], [ 24 , 0 ], [ 0 , 14 ], [ 8 , 6 ], [ 12 , 0 ], [ 16 , 0 ], [ 16 , 30 ], [ 48 , 14 ], [ 0 , 30 ], [ 38 , 0 ], [ 38 , 0 ], [ 0 , 8 ], [ 36 , 48 ], [ 0 , 32 ], [ 10 , 24 ], [ 46 , 0 ], [ 24 , 10 ], [ 30 , 0 ], [ 0 , 48 ], [ 40 , 0 ], [ 42 , 0 ], [ 32 , 24 ], [ 32 , 0 ], [ 12 , 16 ], [ 0 , 4 ], [ 0 , 28 ], [ 32 , 0 ], [ 40 , 42 ], [ 46 , 0 ], [ 0 , 24 ], [ 30 , 16 ], [ 36 , 48 ], [ 40 , 0 ], [ 24 , 0 ], [ 0 , 22 ], [ 40 , 42 ], [ 10 , 24 ], [ 0 , 16 ], [ 14 , 48 ], [ 22 , 0 ], [ 0 , 22 ], [ 30 , 0 ], [ 0 , 2 ], [ 48 , 20 ], [ 6 , 0 ], [ 6 , 0 ], [ 28 , 0 ], [ 20 , 0 ], [ 0 , 40 ], [ 42 , 0 ], [ 48 , 36 ], [ 14 , 0 ], [ 10 , 24 ], [ 0 , 30 ], [ 48 , 20 ], [ 40 , 30 ], [ 0 , 0 ], [ 42 , 40 ], [ 0 , 48 ], [ 32 , 24 ]] X_answer = [[44] ,[18] ,[38] ,[50] ,[36] ,[14] ,[34] ,[0] ,[38] ,[32] ,[28] ,[36] ,[52] ,[6] ,[20] ,[42] ,[8] ,[40] ,[4] ,[10] ,[26] ,[22] ,[20] ,[50] ,[32] ,[32] ,[16] ,[52] ,[8] ,[32] ,[46] ,[22] ,[8] ,[26] ,[36] ,[14] ,[22] ,[42] ,[20] ,[50] ,[44] ,[40] ,[34] ,[32] ,[50] ,[32] ,[30] ,[30] ,[26] ,[22] ,[4] ,[16] ,[10] ,[32] ,[42] ,[2] ,[38] ,[40] ,[48] ,[20] ,[18] ,[38] ,[50] ,[58] ,[20] ,[26] ,[20] ,[50] ,[34] ,[60] ,[36] ,[30] ,[34] ,[16] ,[24] ,[24] ,[18] ,[38] ,[28] ,[34] ,[36] ,[40] ,[34] ,[50] ,[24] ,[14] ,[10] ,[12] ,[16] ,[34] ,[50] ,[30] ,[38] ,[38] ,[8] ,[60] ,[32] ,[26] ,[46] ,[26] ,[30] ,[48] ,[40] ,[42] ,[40] ,[32] ,[20] ,[4] ,[28] ,[32] ,[58] ,[46] ,[24] ,[34] ,[60] ,[40] ,[24] ,[22] ,[58] ,[26] ,[16] ,[50] ,[22] ,[22] ,[30] ,[2] ,[52] ,[6] ,[6] ,[28] ,[20] ,[40] ,[42] ,[60] ,[14] ,[26] ,[30] ,[52] ,[50] ,[0] ,[58] ,[48] ,[40]] X_in = np.asarray(X_in, dtype=np.float32) X_answer = np.asarray(X_answer, dtype=np.float32)
X_in /= np.amax(X_in) X_answer /= np.amax(X_answer)
model = Sequential() model.add(Dense(10, input_dim = 2, activation='relu')) model.add(Dense(10, activation='relu')) model.add(Dense(1, activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
history = model.fit(X_in, X_answer, epochs=NB_EPOCH, verbose=VERBOSE)
Что до 100 эпох, что до 500 один и тот же результат:
Epoch 1/100 143/143 [==============================] - 0s 2ms/step - loss: 0.2966 - acc: 0.0280 Epoch 2/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 3/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 4/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 5/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 6/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 7/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 8/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 9/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 10/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 11/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 12/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 13/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 14/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 15/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 16/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 17/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 18/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 19/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 20/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 21/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 22/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 23/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 24/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 25/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 26/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 27/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 28/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 29/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 30/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 31/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 32/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 33/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 34/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 35/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 36/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 37/100 143/143 [==============================] - 0s 49us/step - loss: 0.2966 - acc: 0.0280 Epoch 38/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 39/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 40/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 41/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 42/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 43/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 44/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 45/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 46/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 47/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 48/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 49/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 50/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 51/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 52/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 53/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 54/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 55/100 143/143 [==============================] - 0s 49us/step - loss: 0.2966 - acc: 0.0280 Epoch 56/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 57/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 58/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 59/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 60/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 61/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 62/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 63/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 64/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 65/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 66/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 67/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 68/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 69/100 143/143 [==============================] - 0s 52us/step - loss: 0.2966 - acc: 0.0280 Epoch 70/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 71/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 72/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 73/100 143/143 [==============================] - 0s 39us/step - loss: 0.2966 - acc: 0.0280 Epoch 74/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 75/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 76/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 77/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 78/100 143/143 [==============================] - 0s 49us/step - loss: 0.2966 - acc: 0.0280 Epoch 79/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 80/100 143/143 [==============================] - 0s 49us/step - loss: 0.2966 - acc: 0.0280 Epoch 81/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 82/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 83/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 84/100 143/143 [==============================] - 0s 35us/step - loss: 0.2966 - acc: 0.0280 Epoch 85/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 86/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 87/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 88/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 89/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 90/100 143/143 [==============================] - 0s 49us/step - loss: 0.2966 - acc: 0.0280 Epoch 91/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 92/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 93/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280 Epoch 94/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 95/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 96/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 97/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 98/100 143/143 [==============================] - 0s 45us/step - loss: 0.2966 - acc: 0.0280 Epoch 99/100 143/143 [==============================] - 0s 42us/step - loss: 0.2966 - acc: 0.0280 Epoch 100/100 143/143 [==============================] - 0s 38us/step - loss: 0.2966 - acc: 0.0280


Ответ

Как уже сказал @L.Murashov функция активации softmax применяется в задачах мультиклассовой классификации - она помогает посчитать вероятности принадлежности образца каждому из классов.
Есть еще несколько моментов, на которые стоит обратить внимание:
В обучающей выборке слишком много (около половины) нулевых значений - это вырожденный случай для теоремы Пифагора, когда одна из сторон треугольника имеет нулевую длину. Для того, чтобы лучше обучить модель можно выборку взять побольше - в вашем случае не проблема сгенерировать столько данных сколько нужно. Для данной (простой) задачи хватит одного скрытого слоя В качестве функции активации выходного слоя можно использовать linear В качестве функции потери и метрики можно выбрать mean_squared_error

Пример:
import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Activation
N = 5000 np.random.seed(1234) X = np.random.randint(0, 50, size=(N,2)) y = np.linalg.norm(X, axis=1)
NB_EPOCHS = 100 VERBOSE = 1
model = Sequential() model.add(Dense(20, input_dim = 2, activation='relu')) model.add(Dense(1, activation='linear')) model.compile(loss='mse', optimizer='adam', metrics=['mean_squared_error']) model.fit(X, y, epochs=NB_EPOCHS, verbose=VERBOSE)
Обучение:
... 5000/5000 [==============================] - 0s 22us/step - loss: 0.0057 - mean_squared_error: 0.0057 Epoch 98/100 5000/5000 [==============================] - 0s 22us/step - loss: 0.0048 - mean_squared_error: 0.0048 Epoch 99/100 5000/5000 [==============================] - 0s 22us/step - loss: 0.0045 - mean_squared_error: 0.0045 Epoch 100/100 5000/5000 [==============================] - 0s 22us/step - loss: 0.0043 - mean_squared_error: 0.0043 Out[70]:
Предсказание:
In [71]: model.predict(np.array([[3,4], [10,10], [5,6]])) Out[71]: array([[ 5.018393], [14.130004], [ 7.841759]], dtype=float32)

Максимальное колличество одновременных потоков

Сколько максимум можно создать потоков, которые работают одновременно?


Ответ

Есть несколько "понятий" для процесса/потока.
Физически - не более колличества ядер процессора. Т.е. если процессор 4-х ядерный, он не может выполнять более 4-х потоков одновременно. Есть технология Hyper-threading суть которой - оптимизация "переключений" между процессами, т.е. Hyper-Threading 4-8 не означает что 8 выполняются одновременно, а означает что переключение между потоками организовано таким образом, что создаётся впечатление что ядер больше.
Логически (уровень ОС) - пока не закончится память хандлов (т.е. много). Ваш вопрос сводится к макc колличество хандлов (т.к. каждому thread нужно присвоить хандл) тогда ответ - до 10000 (минус штук 300 используется системой). Активные хандлы ОС "преобразует" в таски, а процессор аппаратным решением выбирает какой таск выполнять сейчас на аппаратном уровне. Хандлами могут быть - файлы, pipes, event, mailslot и другие обьекты ОС, если программа активно использует хандлы (например для каждого thread открывается file) то хандлы закончатся в два раза быстрее, т.к. общее число ханлов не должно превышать 10000.
Уровень DOT NET. У с# Thread - это обьект за которым может быть а может не быть реального Thread Handle. Кроме того, хандлы обьеденяются в пул (для повторного использования). Активный Thread всегда подкреплен Thread Handle ОС, но неактивые можно создавать - пока не закончится память Heap. При превышении определённого числа активных Thread - получим ошибку, что не возможно создать хандл.
Апаратный уровнь. TSS или Task Gate Descriptor Для 32 битных процессоров, существует каталог GDT - таблица таблиц на 8192 ячеек. В каждой можно сохранить ссылку на 8192 LDT елементов, один из которых может быть дескриптором процесса Task-и (частью Thread без которой процессор не сможет аппаратно переключать Thread. Т.е. 67 108 864 - это "теоретически" предел аппаратных мест для потоков, но... нужно учесть, что дескрипторы памяти так же нужно разместить в этой таблице, т.е. минус дескрипторы памяти... выйдет от миллиона до 60 миллионов. Но в реальности, есть предел, выше которого процессор будет "ничем другим не занят кроме как переключением процессов", поэтому... столько не используют. Процессор распределает эти таски между ядрами апаратным решением. Что ОС будет делать когда они закончатся - скорее всего у ОС встроен константой предел на колличество тасков, так как при слишком большом их колличестве процессор начнёт терять производительность.
Ccылки по аппаратной части:
http://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-246.html http://en.wikipedia.org/wiki/Global_Descriptor_Table

WPF Отследить сколько секунд мышь остается на Label

Не знаю как можно реализовать следующие: Когда мышь входит в область label(MouseEnter), если мышь остается в области label 3 секунды, то создается новый контрол. При этом надо сделать так чтобы главный поток не останавливался, а если таймер делать в другом потоке, то надо чтобы этот поток имел возможность создавать элементы на форме(в главном потоке). Если мышь выходит за пределы label и 3 секунды не прошло то ничего не создается соответственно.


Ответ

Всё просто. При заходе мыши в лейбл, делаем 2 задачи: первая закончится через 3 секунды, вторая закончится когда мышь покинет лейбл.
Ждем конца любой из задач. После этого проверяем - если закончилась первая, то добавляем элемент, если вторая - то ничего не делаем.
Все это запускается асинхронно, никаких таймеров не надо.
Пример кода:
class Wnd : Window { public Wnd() { var lbl = new Label() { Content = "I AM LABEL" }; var sp = new StackPanel() {Orientation = Orientation.Vertical}; sp.Children.Add(lbl);
lbl.MouseEnter += async (sender, args) => { var tcs = new TaskCompletionSource();
MouseEventHandler leave = null; leave = (sender2, args2) => { lbl.MouseLeave-=leave; tcs.SetResult(0); };
lbl.MouseLeave+=leave;
var delayTask = Task.Delay(3000); await Task.WhenAny(tcs.Task, delayTask);
if (delayTask.IsCompleted) sp.Children.Add(new Label() {Content="3 sec passed!"}); };
this.Content = sp; } }
В действии:

java compiler, generics и наследование

Есть некий обобщенный интерфейс и класс, его реализующий.
interface Contract { void doIt(T arg); }
class Impl implements Contract {
@Override public void doIt(Integer arg) { System.out.println("hi"); } }
При создании экземпляра Impl и вызове метода следующим образом
Contract obj = new Impl(); obj.doIt(42);
компилятор вежливо предупреждает, что Unchecked call ... .
Я сделал следующий вывод - компилятор не смотрит на то, метод какого класса будет фактически вызван. Вот смотрит он что Contract#doIt(T arg) дергают и предупреждает, что надо бы тип передать. А то что тип передали в класс, который будет всю работу делать от него скрыто.
Я правильно всё понял?


Ответ

Суть тут в том, что вы явно не указали, какой тип в дженерике будет, то есть компилятор не знает об этом, а это чревато ошибкой в рантайме. То есть в приведеном вами коде можно написать так:
Contract obj = new Impl(); obj.doIt("123"); //можно передать String и компилятор это съест
Но когда вы запустите этот код, вы получите ClassCastException. Почему? Потому что в случае с дженериком в параметре метода компилятор создает так называемый bridge-метод и после компиляции ваш класс Impl будет иметь 2 метода:
public void doIt(Integer arg) { System.out.println("hi"); }
public void doIt(Object arg) { doIt((Integer) arg); //тут ClassCastException }
компилятор вежливо предупреждает, что Unchecked call
Собственно, предупреждает, потому что если вы напишите вот так:
Contract obj = new Impl();
то передаваемый в этот bridge-метод параметр будет проверен на этапе компиляции и не даст вам выстрелить в ногу.
Рекомендую

как вывести доступное место на жестком диске

На одном жестком диске установлены Win10 и linux нужно узнать сколько осталось всего доступного места? вывод требуется в "одну строку" типа - 100gb и еще вопрос - как узнать сколько "смонтировано в корневую директорию / -"? куда смотреть? вывод такой же главное без заморочек всяких


Ответ

Смотрим доступные разделы
~# lsblk
Смотрим точки монтирования
~# mount
Проверяем все разделы на количество использованного места
~# df -h
Смотрим типы фс и размеры партиций
~# fdisk -l
Предположим, у вас Win на разделе /dev/sdb1, смотрим сколько там места после монтирования
~# mkdir /mnt/ntfs && mount -t ntfs-3g /dev/sdb1 /mnt/ntfs && df -h /mnt/ntfs
Вывод всех команд легко фильтровать до "одной строчки" если вы знаете какой раздел вам нужен - grep/sed/awk

Создать свой Task.Run

Каким образом в c# можно сделать async получив значение во внешний метод из лямбды?
Вот тестовый пример (он нерабочий):
public async Task Test(MyClass data) { return Task.Run(() => {
MyOtherClass result = null; bool endFlag = false;
protocol.Invoke((MyOtherClass response) => // это async { endFlag = true; result = response; }, "uri/to/my/rpc", data);
for (;;) // а это уже await { Thread.Sleep(200); if (endFlag) break; }
return result;
}); }
Задача функции Test - вытащить значение response из лямбды, и вернуть его, причём, сделать это надо асинхронно, к циклу for(;;) хотелось бы перйти только когда потребуется await. Подскажите, что нужно сделать, и почему этот код студия ругает?


Ответ

Вероятно, вам надо что то вроде
public Task Test(MyClass data) { return Task.Run(async () => {
MyOtherClass result = null; bool endFlag = false;
protocol.Invoke((MyOtherClass response) => // это async { endFlag = true; result = response; }, "uri/to/my/rpc", data);
for (; ; ) // а это уже await { await Task.Delay(200); if (endFlag) break; }
return result;
}); }
Но если вызов protocol.Invoke не блокирующий, то внутренний таск нам не нужен, у нас же уже асинхронный код.
public async Task Test(MyClass data) { MyOtherClass result = null; bool endFlag = false;
protocol.Invoke((MyOtherClass response) => // это async { result = response; endFlag = true; // И лучше бы флагать о конце операции в конце метода, чтобы не возникло проблем с race condition }, "uri/to/my/rpc", data);
for (; ; ) // а это уже await { await Task.Delay(200); if (endFlag) break; }
return result; }
а вот уже совсем короткий вариант, что делает по сути то же самое
public Task Test(MyClass data) { var tcs = new TaskCompletionSource(); protocol.Invoke((MyOtherClass response) => // это async { tcs.SetResult(response); }, "uri/to/my/rpc", data); return tcs.Task; }

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

Все привет. Как переключать activity при отсутствии интернета?
Есть простой webview с ссылкой на сайт.
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.setWebViewClient(new MyWebViewClietn()); webView.loadUrl("http://google.com/"); } }
и есть еще класс TryNetwork
public class TryNetwork { public static boolean check() { Runtime localRuntime = Runtime.getRuntime(); boolean bool = false; try { int i = localRuntime.exec("/system/bin/ping -c 1 8.8.8.8").waitFor(); if (i == 0) { bool = true; } return bool; } catch (InterruptedException localInterruptedException) { localInterruptedException.printStackTrace(); return false; } catch (IOException localIOException) { localIOException.printStackTrace(); } return false; } }
я знаю как переключать экраны простыми кнопками, но тут возникла потребность сделать переключение автоматическим google не находит ничего ((
вот второй activity
public class BaseActivity extends AppCompatActivity implements View.OnClickListener { Button reTry; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base);
reTry = (Button) findViewById(R.id.reTry); reTry.setOnClickListener(this); }
@Override public void onClick(View v) { switch (v.getId()) { case R.id.reTry: Intent intent = new Intent(this, MainActivity.class); startActivity(intent); break; default: break; } } }
и разметка второго activity

Амортизированная константа

Может кто-нибудь объяснить, что означает амортизированная сложность алгоритма, в частности, амортизированная константа? Это когда для массива операция выполняется не каждый вызов, а только один раз?


Ответ

Ну вот смотрите. Берем динамическим массив. Сначала из одного элемента.
Добавляем еще один. Удваиваем массив. Итого - одно выделение, один перенос (первого элемента).
Еще добавление - массив становится равен 4 элементам. Выделений - 2. переносов - 3 (теперь переносим 2 элемента, + 1 ранее). Добавление четвертого элемента не требует ни выделения, ни переноса.
Еще добавление. Массив увеличивается до 8 элементов. Теперь в массиве 8 элементов, 3 выделения памяти, 7 переносов элементов. Элементы с 6 по 8 не требуют ни выделения, ни переноса...
...
Теперь у нас 2n элементов, n выделений памяти, 2n-1 переноса элементов.
Т.е. в среднем каждый элемент пришлось переносить 1-2-n раз, при больших n - 1 раз.
Константа? Да. При том, что первый элемент переносился log2n раз.
А вот в среднем, т.е. амортизированно - константа.
Так более-менее понятно?

Как подписаться на изменение файла в файловой системе?

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


Ответ

Штука, которая Вам нужна, называется inotify. А дальше просто гуглением находятся примеры, например это

static nested class? [дубликат]

На данный вопрос уже ответили: Зачем нужен static class? 3 ответа для чего нужен static nested class? и как его использовать?


Ответ

Вложенные классы — элементы содержащего их класса. Статические — не имеют доступ к членам внешнего класса. Как и другие поля класса, вложенные классы могут быть объявлены как private, public, protected, или package private. Для чего использовать вложенные классы Вот некоторые причины использования вложенных классов:
Это хороший способ группировки классов, которые используются только в одном месте: если класс полезен только для одного другого класса, то логично будет держать их вместе. Вложение таких вспомогательных классов делает код более удобным. Инкапсуляция: допустим, есть два класса A и B, классу B требуется доступ к свойству класса A, которое может быть приватным. Вложение класса B в класс A решит эту проблему, более того сам класс B можно скрыть от внешнего использования. Улучшение читаемости и обслуживаемости кода: вложение малых классов в более высокоуровневые классы позволяет хранить код там, где он используется. Вложенные классы Как статические переменные и методы, вложенный (статический) класс связан с внешнимклассом. И так же как и статические методы не может напрямую обращаться к полям объекта внешнего класса.
Доступ к вложенному классу осуществляется с помощью следующей конструкции:
OuterClass.StaticNestedClass
Синтаксис создания объекта вложенного класса:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
Подробнее можно почитать в этом уроке Вложенные и внутренние классы в Java. Часть 1

Как из терминала заменить слово в файлах в Ubuntu?

Во всех файлах в папке и во вложенных папках.


Ответ

Например, так:
grep -lr -e 'было' . | xargs sed -i 's/было/стало/g'

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

Браузер выделяет текст при перемещении объектов с помощью DnD. Как от этого избавиться?


Ответ

Нужно отменить действие по умолчанию во время перетаскивания. function cancel(e) { // Non-IE if (e && e.preventDefault) { e.preventDefault(); } // IE else { window.event.returnValue = false; } return false; }

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

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


Ответ

Для подписки на это событие необходимо установить функцию обратного вызова у тега в вашем документе. Например:

Как установить переменную окружения в windows?

Как установить переменную окружения в windows?


Ответ

Для единовременного действия переменной, надо открыть консоль и выполнить команду
set VAR_NAME=VAR_VALUE
Для постоянного действия переменной, надо перейти в "Мой компьютер" нажать правую клавишу мыши, выбрать свойства, вкладку "Расширенные". Далее выбрать "Переменные окружения". В появившийся форме создать новую переменную.

Использование веб камеры из С++

Хочу написать приложение работающее с веб камерой. Интересует какие есть способы работы с ней? ОС будет windows ХР, windows Vista и windowws 7. Можно ли писать в файл и т.д.? Есть ли завязки на производителей веб камер или на драйвера устройств?


Ответ

Рекомендую ознакомиться с библиотекой OpenCV, представляющей возможности обработки изображений. В примерах можно найти работу с веб-камерой (samples/c/facedetect.c - поиск лиц на изображении с веб-камеры, демонстрирующий возможность захвата изображения с камеры с помощью модуля HighGUI). Если драйвер камеры правильно работает, то принципиальной разницы нет, веб-камера представляется обычным интерфейсом устройства DirectShow. В интернете можно найти много материалов с готовыми примерами по OpenCV.

Как поменять все прописные на строчные с подчеркиванием?

Есть строка, в которой нужно заменить все идентификаторы вида SomeIdentifier на идентификаторы вида some_identifier Готовое решение (работает правильно): string GetUnderScore(string source) { string target = "";
foreach (char c in source) { if (char.IsUpper(c)) { target += "_" + char.ToLower(c); } else { target += c; } } if (target[0] == '_') { target = target.Substring(1); }
return target; } но уж как-то много кода для такой простой задачи. Как упростить?


Ответ

Можно избавиться от else и второго if и если строки длинные, то лучше использовать StringBuilder вместо string, т.к. StringBuilder не создаёт новую строку с копированием символов из предыдущей при каждом добавлении наших char :) string GetUnderScore(string source) { var result = new StringBuilder(source); foreach (char c in source) { if (char.IsUpper(c) && result.Length > 0) result.Append("_"); result.Append(char.ToLower(c)); } return result.ToString(); }

Проблема комбинирования ScrollView и RelativeLayout

Имеется xml разметка для экрана.
Но если TextView будет содержать много текста, то кнопки пропадают. Текст при этом прокручивается. Как сделать, чтобы кнопки не исчезали?


Ответ

Чтобы прокручивать TextView не обязательно помещать его внутрь ScrollView, TextView умеет сам прокручиваться. Нужно изменить разметку TextView, добавив атрибут android:scrollbars = "vertical" и изменить код активности, задав метод прокрутки import android.text.method.ScrollingMovementMethod;
...
mTexView.setMovementMethod(new ScrollingMovementMethod()); а ScrollView - убрать. Пример на основе Skeleton App из Android SDK. Вместо EditText добавить TextView: В итоге получаем до прокрутки: и после прокрутки:

Django ORM выбор связаных моделей

У меня есть 2 модели class menu(models.Model): title = models.CharField(max_length=255)
class item(models.Model): title = models.CharField(max_length=255) menu = models.ForeignKey(menu) Как при выборке связать их? Например что бы было так m = menu.objects.all() for i in m.item: #?


Ответ

К связанным моделям тут можно обратиться как m_instance.item_set. Или задать (вместо стандартного lowercased_classname_set) название в item (кстати, в Python традиционно принято именовать классы с прописной буквы) через аргумент related_name в ForeignKey() Т.е. будет что-то в духе: for m in Menu.objects.all(): for i in m.item_set.all(): ... В документации все есть с примерами: https://docs.djangoproject.com/en/1.3/topics/db/queries/#backwards-related-objects (модели, используемые в примерах, описаны в самом верху страницы) Здесь одно большое «но» — при этом для каждого объекта в m будет выполнен запрос SELECT из таблицы с item'ами. Если записей menu много, то запросов будет, соответственно, тоже много. В этом случае, возможно, имеет смысл как-то переделать структуру и, например, как-то выбирать item'ы и их menu через select_related. В SQL это будет сформировано в духе SELECT ... FROM items AS i LEFT JOIN menus AS m ON m.item_id = i.id .... А дальше в питоновом коде уже, возможно, перестраивать структуру, в зависимости от задач.

Время выполнения отрезка кода

Есть код. Как узнать его время выполнения в м.секундах или ещё меньше? Не могу нигде найти( Помогите, пожалуйста. Код короткий, обычные функции с получением времени или простые таймеры не реагируют. (начало отсчета времени) // код (Конец отсчета времени) Спасибо за внимание!


Ответ

Первый ответ самый простой для выполнения, его можно еще упростить clock() находиться в библиотеке "time.h" int t=clock();
код { }
cout<

ajax + php = живой поиск

Обгуглил весь веб, может кто сможет мне предложить свой или ранее использованый им живой поиск на сайт. В двух словах требования, вводитн в форму символы, php сценарий берет данные из mysql и передает браузеру... В общем должно выглядеть примерно так ))


Ответ


Что-то типа того. идея: при отпускании кнопки, скрипт читает аттрибут "value" текстового поля. Если он длиннее 3 символов, то отправляет эту строку в PHP обработчик, который по БД проверяет все возможные варианты для данного сочетания символов. Ну, например, 'like("'.$_GET['query'].'%")' в Mysql. С этим вы сказали справитесь. Далее прилетает обратно массив строк, оформленный как Json(можно просто набор строчек, но теряется гибкость). Из этого массива каждая строка ложится в специальный блок search_advice_wrapper. При клике на строчку в этом блоке, ее содержимое отправляется в поле поиска.

Ошибка “PHP Notice: Undefined offset: 1 in…”

Вот код: $word[$i]=str_replace("*", ", ", $word[$i]); $part=explode("=", $word[$i]); $part1=str_replace("|", " ", $part[0]); $part2=str_replace("|", " ", $part[1]); При его выполнении, если в $word содержится выражения типа: [674237234092340234-42348437436::?(*)(_):;№! " " %)(_)]{^%#$@##$^^&*(&~@GVY()(*)(IOU} То возникает ошибка PHP Notice: Undefined offset: 1 in... которая указывает на строку: $part2=str_replace("|", " ", $part[1]); Собственно, как исправить ошибку? UPD Если в $word содержится: "В данной строке ($word) отсутствует знак", то ошибки не возникает, хотя там нет знака =


Ответ

В данной строке ($word) отсутствует знак =, поэтому после explode в массиве $part у вас есть только значение с 0 ключом и выражением $part2=str_replace("|", " ", $part[1]);
Вы пытаетесь обратиться к элементу с индексом 1, которого не существует, вот и ошибка.

С (GCC). Как исключить из сборки неиспользуемые функции?

В проекте есть пара .c / .h, в которой объявлены и определены несколько функций. При этом некоторые из них не используются. Но после компиляции, заглянув в листинг можно обнаружить там ассемблерный код этих самых неиспользуемых функций? Как исключить их из сборки? В моем случае память очень ограничена и хотелось бы оптимально ее расходовать. Да и вообще интересно. К тому же, не попадают же таким образом неиспользуемые ф-ии из стандартной библиотеки.


Ответ

Итак давайте разбираться, на этапе компиляции понятное дело что функции вряд-ли куда денутся, все они окажутся в объектном файле, следовательно все дело в сборке (linking). Создадим пример: /* Файл func1.c */ int FuncA (void) { return 1; } /* ни где не используется */ int FuncB (void) { return 2; } /* ни где не используется */
/* Файл func2.c */ int FuncC (void) { return 0; } /* используется в main() */
/* Файл func1.h */ int FuncA (void); int FuncB (void);
/* Файл func2.h */ int FuncC (void);
/* Файл main.c */ #include "func1.h" #include "func2.h"
int main(int argc, char **argv) { return FuncC(); } Теперь начинаем собирать: gcc -o a.out main.c func1.c func2.c Проверяем: nm a.out | grep Func[ABC] 080483c4 T FuncA 080483ce T FuncB 080483d8 T FuncC Ничего не получилось :-) Делаем еще одну попытку: gcc -c func1.c gcc -c func2.c gcc -o a.out main.c func1.o func2.o Проверяем: nm a.out | grep Func[ABC] 080483c4 T FuncA 080483ce T FuncB 080483d8 T FuncC Опять все функции попали в выходной файл. Применяем черную магию, а конкретно собираем библиотеку: gcc -c func1.c gcc -c func2.c ar rcs lib.a func1.o func2.o gcc -o main.c lib.a Проверяем: nm a.out | grep Func[ABC] 080483c4 T FuncC Итак у нас получилось. Отсюда вывод - разделяем исходняки на модули затем компилируем модули в объектные файлы, затем объектные файлы объединяем в библиотеку, а затем собираем основную программу с библиотеками подключатся только используемые модули UPDATE У gcc-шного линкера есть такая возможность как -gc-sections (garbage collect and discard unused sections), воспользоваться ею легко: gcc -fdata-sections -ffunction-sections -Wl,--gc-sections -o a.out \ main.c func1.c func2.c nm a.out | grep Func[ABC] 080483c0 T FuncC Но это не всегда приемлемо особенно когда это касается больших проектов. Пример

Рассчитать траекторию пули

Пишу игру и нужно рассчитать траекторию полета пули. Пишу для тачскрина и траектория создается в зависимости от точки касания, позиции пальца на экране, но получается что работает только на вторые 45 градусов из первой половины экрана, вот как выглядит. А мне нужно, что бы стреляло в любую точку. Помогите, пожалуйста, как рассчитать? Вот как я сделал, что бы оно так летало: angle = Math.atan((y - gameView.shotY) / (x - gameView.shotX)); //позиция начальная - координата косания
x = (int)(x + xSpeed * Math.cos(mAngle)); y = (int)(y + ySpeed * Math.sin(mAngle)); Достиг того эффекта, а нужно что бы равномерно летело. Заранее спасибо!


Ответ

У меня выдавало странные результаты пока не конвертнул тип данных для x, y к double. проблема в неявном конвертировании типов в первой формуле. попробуй так: angle = Math.atan ( (double) (y - viewY) / (x - viewX) ) ; UPDATE: что, где, когда: Если я правильно понял то происходит следующее (y - viewY) и (y - viewY) int. При делении результат неявно конвертируется к типу int (здесь и отрезается дробная часть). После чего он неявно конвертируется к типу double для передачи в функцию atan. проверить можно так: System.out.println ( 5 / 3 ) ; System.out.println ( (double) 5 / 3 ) ;

Senior Python Developer?

Часто вижу в заголовках вакансии слово Senior, и далее большие суммы которые готовы платить этому человеку. Закономерно возникает вопрос, кто такой Senior? Какие критерии существуют чтобы определить senior человек или не senior? Какие вопросы задают senior python девелоперу на собеседовании?


Ответ

Очень сложный вопрос ) Все равно человека собеседует человек, у которого имеется своё представление о том, кто такой Senior. Для кого-то это чел, который знает как оценить сложность алгоритма и который на листочке напишет сразу несколько способов сортировки. Для кого-то это чел, который ответит на вопрос вроде "В чем разница между synchronized, ReentrantLock и AtomicReference?" Для меня градация приблизительно такая: Junior Базовые знания core java (типы коллекций и разница между ними, остановка/запуск потоков, что такое generics, три "слона" ООП). По библиотекам вопросы чисто поверхностные. Developer Всё что junior + хорошее знание библиотек, которые перечислены в резюме и которые мне нужны. Если написано, что человек знает XSLT, а мне это щас не надо и я знаю что в проекте это не нужно, то я и не спрашиваю. Ну и вопросы уже более глубокие, например как работает наследование в generics, как синхронизировать потоки, что быстрее: LinkeList или ArrayList и почему, класслоадеры и т.д., базовые паттерны типа синглтон, фасад, итератор и т.д. Senior Developer Всё что developer + рассадник вопросов "Почему". Здесь человек сознательно загоняется в тупик разными "почему, зачем, нафига" и смотрится его реакция. Здесь очень удобно использовать предыдущий опыт кандидата, обсудить его проекты. Например "Вот ваш мегапроект из резюме, стоит на Spring, WebServices и JPA. Зачем вам JPA? Какой JPA, чем один от другого отличается? Почему именно так, а не иначе? Как бы вы сделали по-другому/быстрее/удобней/красивее?" При этом ответы типа "Так сделали до меня" или "Просто так прикольно" автоматом идут в минус. Если человек не понимает, для чего нужно так или иначе в своей родной среде, то извините, это никак не Senior. Здесь важно умение аргументировано выбирать лучшее решение и доказывать, что именно так будет лучше, чем по-другому. Чем больше библиотек и фреймворков в резюме, тем лучше. Тут такое можно развести... Ну, сами понимаете :) Team Lead и Архитектор это уже другая песня. P.S. Мнения типа "На такие вопросы даже моя бабушка ответит" можно даже не высказывать. Я ж не говорил, что после ответа вопрос сразу зачислю претендента в ту или иную группу. Обычно кандидат плавает из одной в другую. Помимо этого есть ещё немало критериев вроде коммуникабельности, умения грамотно выражать свои мысли чтобы остальным было понятно что вы щас сказали и т.д. Никогда не делал большого упора на знание алгоритмов. Может человек и знает 8 способов сортировки, 6 способов обхода графа, может легко написать ОПЗ/ППЗ любого арифметического выражения, да еще и знает область применения LL1 грамматик, поклоняется книгам Кнута, а Дейкстра - его герой, но это всё в проекте мало применимо, потому что там надо тупо данные передавать из места "А" в место "Б" используя Spring, WS и сделать для этого UI на GWT (всё как пример), но он в этом ноль, то что прикажете с ним делать? :) Ну не нужно в проекте ничего сортировать, обходить и считать. Все его знания для проекта нафиг не нужны. Нужно просто знать как работать со Spring, GWT и WS. Всё зависит от проекта и решаемых им задач. Точнее, даже всё. Если ваш проект - новый язык программирования, то человек вам подходит. Если проект - очередной спринг + обвес, то это не ваш разработчик. Важен баланс. Важно и знание основ, алгоритмов, и знание того, с чем 90% разработчиков работают. Это идеал. Кардинальный перевес кандидата в какую-то сторону может ему как дать преимущество, так и не дать. Всё зависит от проекта и ожиданий того, кто вас собеседует. А то щас подумаете, что достаточно досконально знать кучу либ и больше ничего не надо. Надо, очень надо. Это вам надо в первую очередь. Как-то так :) Источник

Удаление большого числа строк из таблицы Transact-SQL

В общем нужно удалить из таблицы Nodes порядка 110000 записей, только их id указывается не явно а берётся из другой таблицы.
DELETE FROM Nodes WHERE (id NOT IN (SELECT DISTINCT node_id FROM Relations))
В SELECT DISTINCT id FROM @gh гдето около 20000 записей и в результате удаления не совершаются изза истекшего таймаута.
Update: Если удалять по пакетам и убрать DISTINCT то возникает другая ошибка связанная с нехваткой памяти и завершением процесса SQL Server
WHILE EXISTS(SELECT * FROM Nodes WHERE id NOT IN (SELECT node_id FROM Relations)) DELETE TOP (100) Nodes WHERE id NOT IN (SELECT node_id FROM Relations)


Ответ

На самом деле проблема решена сторонним способом через ADO.NET. Сначала загрузил в список всех id из таблицы Nodes. Затем в другой список загрузил node_id из таблицы Relations. И наконец циклом пробежался по первому списку выполняя запрос на удаление тех строк id которых не содержится во втором списке. Это полностью решает проблему с накоплением памяти. using (var connection = new SqlConnection(MainWindow._connectionString)) { connection.Open(); var readerRelations = new SqlCommand("SELECT DISTINCT node_id FROM Relations", connection).ExecuteReader(); var DistinctRelations = new List(); while (readerRelations.Read()) { DistinctRelations.Add((int)readerRelations.GetValue(0)); } readerRelations.Close();
var readerNodes = new SqlCommand("SELECT id FROM Nodes", connection).ExecuteReader(); var AllNodes = new List(); while (readerNodes.Read()) { AllNodes.Add((int)readerNodes.GetValue(0)); } readerNodes.Close(); int iterator = 0; int NodesCount = AllNodes.Count; int lastpercent = 0; foreach (var node in AllNodes) { int percent = (int)(iterator * 1.0 / NodesCount * 100); if (percent == lastpercent + 1) { lastpercent = percent; DeleteUnnecesseryNodesChanged(this, new MyEventArgs("Удаление ненужных точек", (int)percent)); } if (!DistinctRelations.Contains(node)) { try { new SqlCommand("DELETE FROM Nodes WHERE id = " + node, connection).ExecuteNonQuery(); } catch (Exception e) { var t = e.ToString(); throw new Exception(t); } } iterator++; }
connection.Close(); }

C# Windows Form

Здравствуйте. У меня есть форма в ней есть элементы textBox , richTextBox и кнопка. После ввода текста в textBox и нажатии на кнопку он форматируется и появляется в richTextBox. После того как я добавляю окало 10 записей появляется ползунок (т.к. размер элемента не позволяет вместить в себя их) и текст идет вниз. Чтобы его увидеть нужно каждый раз проматывать ползунок вниз. Это не совсем удобно. Как сделать так чтобы он проматывался автоматически вниз после добавления записи? Заранее спасибо.


Ответ

Попробуйте так: mySuperRichTextBox.SelectionStart = mySuperRichTextBox.TextLength; // Курсор в конец текста mySuperRichTextBox.ScrollToCaret(); // И прокручиваемся к курсору

Автоматическая табуляция в NotePad++

Очень часто, работая в NotePad++, приходится вручную табулировать html-файл. В принципе, это занимает всего 1-2 минуты, но сумарно затрачивается некое время, которое можно продуктивно использовать на благо работы :) Есть ли какая-то функция/плагин, который автоматически табулирует html-файл? Например: name text name text


Ответ

Для написания кода можете использовать плагин NppAutoIndent(довольно удобно), для автоматического табулирования файлов вы можете использовать плагин IdentByFold. После установки плагина - открываем "плохой файл", жмем - Плагины->Ident By Fold->Reindent File И файл становится хорошим =)

Передача данных между формами

Добрый день. Только начал разбираться с 1С программированием и столкнулся с проблемой. 1С:Предприятие 8.2 (8.2.13.219) нетиповая конфигурация Есть справочник контрагентов. У каждого контрагента есть связанные с ним события. Открываем форму выбранного контрагента, в этой форме есть кнопка "добавить документы", при нажатии на которую выскакивает форма выбора документов, в которой можно выбрать "Событие". Выбираем событие, открывается форма создания события. Вопрос: как передать данные (например самого контрагента) в форму события из открытой формы выбранного контрагента? Или как мне сослаться на конкретную форму? чтобы, находясь в самой форме события, взять все, что мне надо, из формы контрагента. Что должно получиться: из формы контрагента вызываем форму события, и в поля ввода формы события сразу подставляется значения, взятые из формы контрагента. свойства кнопки добавления нажимаем кнопку, открывается окно выбора документа, в котором выбираем событие, после чего отрывается форма события


Ответ

В модуле документа "Событие" должна быть процедура ОбработкаЗаполнения(Основание). Система автоматически вызывает эту процедуру и передает в нее параметром "Основание" данные объекта "по ссылке", который явился инициатором заполнения. В вашем случае это контрагент. Вот тут вам и нужно посмотреть, какой тип имеет основание, если это справочникСсылка.Контрагенты тогда заполняете, если нет продолжаете по умолчанию. Выглядеть будет примерно так: Если ТипЗнч(Основание) = Тип("СправочникСсылка.Контрагенты") тогда <Заполняем какие то реквизиты> <При необходимости выходим из процедуры методом Возврат;> КонецЕсли;

Как прочитать строки с пробелами в цикле в С++?

Вопрос следующий. В цикле нужно читать строки, содержащие пробелы. Признак конца строки - символ '
'. Пробовал функции cin.getline(), gets(). Результат один - читает один раз, а затем зацикливание. Вот собственно код.
#include using namespace std;
int main() { int Exit = 1; char mes[20]; while (Exit) { cout << "Введите строку" << endl; cin.clear(); cin.getline(mes, 19, '
'); cout << "Вы ввели: " << mes << endl << "1 - продолжить
0 - выход" << endl; cin >> Exit; } return 0; }


Ответ

Классическая проблема. После того, как число было считано в переменную Exit, в буфере потока cin остался непрочитанный символ переноса
. Он-то в последующем чтении из потока все и портит. Его можно убрать, например, так cin >> Exit; cin.ignore (7777, '
');

Масштабируемость приложений Windows Forms

Как можно обеспечить пропорциональное масштабирование оконных приложений, написанных VS C#? Чтобы элементы окна, при его развертывании оставались на расстоянии, пропорциональном измененному размеру формы.


Ответ

Используйте контролы из категории контейнеры; cкорей всего, вам понадобится TableLayoutPanel. С его помощью нужно будет разметить основной каркас формы, а размеры всех строк и столбцов задать в процентах. Далее, добавляем нужный контрол в ячейку таблицы и, если вы хотите масштабирования за счёт расстояния между контролами — устанавливаем свойство Anchor равным None. Если нужна масштабируемость по размеру — Dock равным Full И, конечно, одной табличкой вы не ограничитесь. Скорей всего придётся использовать вложенные.

Проверка !window.jQuery и динамическая загрузка библиотеки

Пишу простой виджет типа последних твитов для новой социальной сети, виджет будет встраиваться на сторонних сайтах. Сам виджет работает нормально, но если на сайте нет jQuery, то мы загружаем его динамически if(!window.jQuery){ var jqScript = document.createElement('script'); jqScript.type = 'text/javascript'; jqScript.async = true; jqScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'; var firstScript = document.getElementsByTagName('script')[0]; firstScript.parentNode.insertBefore(jqScript, firstScript); } Если после этого скрипта вызвать jQuery, то библиотека не работает, а сам $ не определен. Вопрос как заставить (или как правильно вызвать следующие функции, которые используют jQuery), которые бы дождались бы загрузки библиотеки, если ее нет на сайте или может как-то по другому надо динамически загружать саму библиотеку?


Ответ

Я делаю просто. Может и не элегантно, но работает сто процентов !window.jQuery && document.write('