Страницы

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

вторник, 14 мая 2019 г.

Координаты областей РФ

Заметил у Гугла очень нужную штуку - он знает координаты границ практически всех областей/городов РФ. Но, увы, выдрать оттуда их нельзя - границы рисуюися прям на картинках, а времени (да и желания) парсить картинки нет. Скажите, есть ли какое-то общедоступный справочник полигонов областей-городов РФ?


Ответ

Вот тут гляньте: Свободные данные по границам субъектов РФ и тут: Данные OpenStreetMap в форматах XML и PBF - если вы умеете работать с *.osm файлами, то для вас не составит труда вытащить нужные отношения. Подробная информация... UPD: Вот ещё есть глобальная база данных по границам. Там данные различного уровня детализации по административным и государственным границам в разных форматах (включая Google Earth kml).

Занести массивы в многомерный массив на JavaScript

Добрый день, как в JavaScript заносить массив в многомерный массив, без обертывания в кавычки? Т.е. есть массив - в него нужно засунуть еще 3 массива с 3мя елементами в каждом. В конечном счете мне нужно получить многомерный массив такого вида: var big_array= [[2, 5, 7], [3, 1, 4], [6, 8, 9]]; Я пытался добавлять массивы через push и якобы эмулировать массивы... big_array.push("["+var1+","+var2+","+var3+"]"); //это пример добавления первого массива с данными (2,5,7)
Но результат получается вот такой, с кавычками:
["[2,5,7]"] //это big_array Когда должен быть: [[2,5,7]] Как это можно сделать?


Ответ

big_array.push("["+var1+","+var2+","+var3+"]"); // LOL
big_array.push([var1, var2 ,var3]);// не?.. Вы запихиваете строку и удивляетесь тому, что в массив добавляется именно строка? О_О

Java, Scala, Groovy и проч. что выбрать для разработки десктопа? [закрыт]

Есть запрос на написание десктопного мультиплатформенного приложения. Условие язык должен быть на платформе Java. Писать надо быстро, так что надо чтобы язык имел приличную гуйную библиотеку. Что посоветуете? По C/C++/Perl и проч. просьба не умничать. У приложения есть довольно большой набор Java библиотек с бизнес-логикой, так что платформа строго Java - вариантов нет.


Ответ

Сами по себе Scala и Groovy пока не содержат в себе отдельных production-ready решений для GUI, кроме оберток над swing. При этом вариантов, вообще говоря, два - SwingBuilder для Groovy и scala.swing для Scala Если вы хорошо знакомы с Groovy / Scala (и если вы не единственный из команды, кто может этим похвастаться), то можете воспользоваться одним из этих подходов. При этом, очевидно, стоит учитывать время на необходимость разобраться в деталях соответствующих оберток и возможные риски из-за их непродуманности или недоделанности. Очень обидно будет нарваться на UnsupportedOperationException("Not yet implemented") в конце спринта. Если нет, а выбор между vanilla Java / Scala / Groovy появился только благодаря "модности" последних, то работайте через них с java.swing, либо вообще остановитесь на просто Java Лично я, не будь у меня как минимум года работы со Scala / Groovy / Clojure / Kotlin, не стал браться за разработку бизнес-решения на их базе.

Как сделать “галочку” в главном меню приложения WinForms?

Собственно, хочу в WinForms приложении сделать переключаемую галочку в главном меню. Скажите, можно ли (и если можно, то каким образом) сделать это встроенными средствами Visual Studio (2008 редакция). Чтобы было понятнее, привожу скриншот желаемого результата на примере программы uTorrent.


Ответ

private void toolStripMenuItem2_Click(object sender, EventArgs e) { if (showIcon == false) { toolStripMenuItem2.Image = Bitmap.FromFile("d:\\pic.bmp");//рисовать галочку showIcon = true; //сделать действие } else { toolStripMenuItem2.Image = null; showIcon = false; //сделать действие } } pic.bmp (или .ico, .jpg)- картинка с галочкой. При нажатии пункта меню рисуем галочку и делаем какое-то действие (например, изменяем нужный параметр на 1). При повторном нажатии убираем галочку и делаем другое действие (например, изменяем нужный параметр на 0). "По просьбе трудящихся" вместо быдлокодерского варианта предлагается кошерный вариант :) private void toolStripMenuItem2_Click(object sender, EventArgs e) { if (toolStripMenuItem2.CheckState == CheckState.Unchecked) { toolStripMenuItem2.CheckState = CheckState.Checked; } else { toolStripMenuItem2.CheckState = CheckState.Unchecked; } }

Форматированый ввод в андроид

Необходимо организовать проверку ввода в текстовое поле по фильтру. +Х(ХХХ) ХХХ-ХХХХ Идеальный сценарий таков. Изначально текст ввода выглядит так: +_ ( _ _ _ ) _ _ _-_ _ _ _ . Пользователь вводит только цифры и они встают на свои места. Т.е. после первой цифры будет так: +7 ( _ _ _ ) _ _ _-_ _ _ _ Второй: +7 (4 _ _ ) _ _ _-_ _ _ _ и т.п. Помогите с реализацией, примеры идеи... Сам нашел это: using a mask with EditText, но до ума довести не получается. package my.dfedorenko;
import android.app.Activity; import android.os.Bundle; import android.widget.EditText;
public class TestPhoneparserActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditText phone = (EditText)findViewById(R.id.phone); phone.addTextChangedListener(new MaskedWatcher("(###) ###-##-##")); setContentView(R.layout.main); }}


Ответ

Самое простое, что приходит в голову, - нарезать текст .substring(), дальше надо смотреть, как у тебя вообще реализован ввод, через какие виджеты? Или просто в строку... import android.app.Activity; import android.os.Bundle; import android.widget.EditText;
public class TestPhoneparserActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText phone = (EditText)findViewById(R.id.phone); phone.addTextChangedListener(new MaskedWatcher("(###) ###-##-##"));
}}

Перегрузка двойной индексации C++

Пусть имеется класс Matrix: class matrix { public:
int row; int col; double **M;
matrix (int i, int j) { row = i; col = j; M = new double*[row];
for (int i = 0; i < row; i++) { M[i] = new double[col]; for (int j = 0; j < col; j++) { M[i][j] = 0; } } }; }; Нужно реализовать перегрузку двойной индексации на чтение и на запись элемента матрицы. Ход моих мыслей: Сделаю сначала на чтение, это легко => double* operator [] (int i, int j){ return M[i][j]; } Угу... много параметров... => friend double* operator [] (int i, int j){ return M[i][j]; } operator[] must be a member function ...хм...блин... Вопрос: В чем проблема? Как исправить? =)


Ответ

Так не получится. Индексация в С++ всегда одинарная. Запись M[x][y] означает (M[x])[y] Просто M[x] должен возвращать строку, а далее к строке применяется её индексация. double* operator [] (int i){return M[i];}

Запись вызова метода в лог

Есть такой код: public class Foo { [Log("Calling bar")] public void Bar() { } } Как сделать, чтобы при вызове метода Bar что-то писалось в лог? Хотелось бы какое-нибудь событие типа OnCall


Ответ

Аспектно-ориентированное программирование Ведение лога и обработка ошибок — типичные примеры сквозной функциональности. PostSharp - одна из лучших библиотек АОП для c# Вот пример аспекта: public class LogAttribute : PostSharp.Aspects.OnMethodBoundaryAspect { // Выполняется перед входом в метод. public override void OnEntry(MethodExecutionArgs args) { Console.WriteLine("Входим в метод {0} класса {1}", args.Method.Name, args.Method.DeclaringType.FullName);
}
// Выполняется при успешном завершении работы метода public override void OnExit(MethodExecutionArgs args) { Console.WriteLine("Метод {0} класса {1} успешно отработал", args.Method.Name, args.Method.DeclaringType.FullName); } } Быстрый старт PostSharp. Решение задач логгирования и аудита Несколько полезных аспектов для PostSharp

Как можно узнать высоту страницы в пикселях?

Есть страница сайта. Можно ли как-то узнать, какова её высота в пикселях?


Ответ

Прозрачная форма на C#, но так чтобы границы и заголовок остались видимыми?

Вопрос не новый, на хэшкоде уже подымался, вот таков был ответ: this.FormBorderStyle = FormBorderStyle.None; this.AllowTransparency = true; this.BackColor = Color.AliceBlue;//цвет фона this.TransparencyKey = this.BackColor;//он же будет заменен на прозрачный цвет но это делает форму полностью прозрачной, а мне нужно только чтобы внутри было прозрачное, а остальное (заголовок и границы) нет. Как такой фокус проделать?


Ответ

Вот этот код this.FormBorderStyle = FormBorderStyle.None; прячет границу и заголовок окна. Уберите его, и получите прозрачное окно с заголовком и границами. Form.FormBorderStyle - свойство Стилем границы формы определяется способ отображения ее наружного края. Стиль границы способен также влиять на размер и доступность секции строки заголовка формы. FormBorderStyle - перечисление Задает стили границ формы. Это перечисление используется классом Form. Оно предоставляет различные стили формы. По умолчанию используется стиль Sizable

Эмуляция команды ROR

Приветствую всех :) Собственно интересует такой вопрос: Как можно имитировать ассемблеровскую команду ROR в C#?


Ответ

Попробуйте так: static UInt32 ROL(UInt32 number, int shift) { shift %= 31; return ((number << shift) | (number >> (32 - shift))); }
static UInt32 ROR(UInt32 number, int shift) { shift %= 31; return ((number >> shift) | (number << (32 - shift))); }

План изучения Java для Web [закрыт]

Посоветуйте план изучения java для веб, собственно, java ee. Что почитать, что необходимо знать. Понимаю, что вопрос уже задавался не один раз, но хотелось бы услышать актуальное мнение. Немного о себе: изучал java по первому тому хорстманна, писал небольшие приложения в университете (лабораторные, курсовые работы), html, xml. Что советуете прочитать/узнать, чтобы получить более менее полное представление о веб разработке на java. Язык предпочтительно русский, но английский не будет большой проблемой


Ответ

Последовательность изучения: Servlets (установить себе в конце-то концов Tomcat) JSP (обратить внимание на теги и простейшие фреймворки типа Struts) JDBC (перед изучением знать хотя бы что-то о SQL и не ограничиваться одним JDBC-ODBC бриджем) Hibernate (попробовать пару-тройку диалектов, скажем MySQL/MS SQL Server/Oracle) Spring По JSP/Servlet есть уже классическая книга: М.Холл: Сервлеты и Java Server Pages По Hibernate и Spring сложно - не знаю ничего приличного.

Алгоритм генерации всевозможных последовательностей

Вот уже второй день ломаю голову над одной "типичной программерской" задачей. Суть её заключается в том, что надо сгенирировать всевозможные числовые последовательности, сумма всех членов которых должна равняться определенному числу. Я решил эту задачу с помощью тупого перебора всевозможных последовательностей, но при больших числах время выполнения оставляет желать лучшего. Какое бы вы предложили решение?
Скажем, дана последовательность от 1 до A, пользуясь которой нужно генерировать последовательности, представляющие сумму числа N.


Ответ

Рекомендую почитать учебники по теории чисел. Это называется композиции и разбиения в зависимости от того считать ли 5=1+1+2+1+1 или 5=2+1+1+1+1 одним и тем же или нет. В Википедии более менее доходчиво изложено. Вот скажем пример алгоритма на Java: http://www.btinternet.com/~se16/js/PartitionChoice.java Два примера на C++: http://www.cyberforum.ru/cpp-beginners/thread342773.html http://www.cyberforum.ru/cpp-beginners/thread372700.html Вот еще хорошая бумага: http://www.tusur.ru/filearchive/reports-magazine/2008-1/113-119.pdf Ну и конечно классика: TAOCP том 4 7.2.1.3. Generating all combinations 7.2.1.4. Generating all partitions

Замена макросов python

Добрый день! В субботний день голова думает не на нужном уровне :) Не могу разобраться - как в тексте подменить макрос на результат выполненного кода, к примеру, имеется текст с макросами: text = 'Date: [RAND-1-31]-[RAND-1-12]-20[RAND-11-12], [RAND-1-12]:[RAND-1-5][RAND-1-9] PM' Каким образом можно пройтись по всем этим макросам и заменить их результатом выполнения функции randint(a,b)? Думаю решение где-то на поверхности, но ко мне оно не приходит :) Заранее благодарен!


Ответ

re.sub и заменять на результат работы функции, которая на [RAND-1-31] выдаёт результат str(randint(1, 31)) def f(m): return str(random.randint(int(m.group(1)), int(m.group(2)))) t = re.sub(r'\[RAND-(\d+)-(\d+)\]', fun, text) или t = re.sub(r'\[RAND-(\d+)-(\d+)\]', lambda m: str(random.randint(int(m.group(1)), int(m.group(2)))), text) UPD Исправлена ошибка в первой группе: (\d+). Было (\d)+ (см. комментарий @xenoll)

Вывод сотых числа после запятой

Как сделать чтобы после полученного значения, если оно целое или один знак после запятой, выводились 1 или 2 нуля в зависимости от числа? [UPD]Все оказалось гораздо проще: sprintf("%.02f",$ostatok)


Ответ

$value = 10; echo sprintf("%.2f" . "
", $value);
$value = 10.3; echo sprintf("%.2f" . "

", $value);
$value = 10.23; echo sprintf("%.2f" . "

", $value);
?>
Вывод: 10.00 10.30 10.23

adb windows 8 64bit

К сожалению, купил и установил на компьютер Windows 8 Pro 64 и теперь возникла проблема с подключением девайса. Повествование касательно самсунг, но думаю с другими вендорами будет аналогично. Установил все нужные тулзы для разработки, установил Samsung kies - подключил по usb девайс - он его не видит. Драйвера через кайс ставил - результат аналогичный. Смутило, что обычно win 7, например, ставил драйвера устройства и потом все хорошо, девайс видно из Eclipse. Теперь же такого не было. Слышал, что это из-за того, что стоит настройка отказа установки устройства с неподписанным драйвером, но пока не нашел где эту шнягу выключить. Может, ну может, кто-нибудь, ну пожалуйста :) сталкивался с подобной проблемой и знает ее решение? Второй вопрос тоже наметился: avd не запускается(видимо из-за C:/Users/русские буквы) - напомните как решить и это за одно. Помню как-то перемещал avd и указывал путь.


Ответ

Все решается иначе, спасибо хабраюзеру serso за ссылку - PdaNet

Переполнение типа double при вычислении математических функций

Помогите разобраться. У меня есть код, в котором я подключаю проверку на переполнение типа double с помощью функции _finite() относительно математических операций, а не через присваивание переменных. В консоли для z выводит ошибку OVERFLOW error. Возможно ли в этом случае обойтись без обработки исключений? Компилятор - C++Builder 6. Буду очень благодарен. #include #include #include using namespace std;
int main (void) { double x = 10E200; double y = 10E400; double z = pow(x, 2); if(_finite(x) != 0) { cout << "This is finite number: " << x << endl; } else cout << "This is infinity: " << x << endl; if(_finite(y) != 0) { cout << "This is finite number: " << y << endl; } else cout << "This is infinity: " << y << endl; if(_finite(z) != 0) { cout << "This is finite number: " << z << endl; } else cout << "This is infinity: " << z << endl; system("pause"); } Update: Это моя вина, многие не поняли, чего я хотел, поэтому добавлю второй пример. Через pow() или x * x выводит ошибку о переполнении. Как мне корректно проверить условие, чтобы не выводило ошибку? #include #include #include using namespace std;
int main (void) { double x; char str[] = "Введите число, которое мы будем возводить в степень: "; CharToOem(str,str); cout << str; cin >> x; int check = 0; // флаг переполнения do { if(_finite(pow(x, 2)) != 0) { x = pow(x, 2); cout << x << endl; } else check = 1; } while(check == 0); system("pause"); }


Ответ

Через pow() или x * x выводит ошибку о переполнении. Как мне корректно проверить условие, чтобы не выводило ошибку? Если я ничего не путаю: ( a * e ^ x ) * ( b * e ^ y ) = c * e ^ ( x + y + z ), где z - экспонента получаемая при перемножении a на b, а c - остаточная мантисса от этой операции. Т.е. чтобы определить, будет ли переполнение, можно просто умножить целочисленную экспоненту на n (показатель степени - второй параметр функции pow) и проверить, выходит ли это значение за пределы используемого диапазона ( для double - это 1024). Если не выходит, нужно выделить остаточную экспоненту от квадрата мантиссы, добавить к ней вычисленное ранее произведение и проверить на выход за границы снова. Вобщем - достаточно муторно, но не смертельно. Чтобы выделить остаточную экспоненту, нужно выполнить целочисленное умножение 64-битных мантисс. Предварительно, нужно маской удалить из них экспоненту (те самые 11 бит) и привести обратным кодом в натуральный диапазон. После умножения - обнулить старший бит, и посчитать число правых сдвигов результата до того момента, пока эти 11 бит не обнулятся. Число этих сдвигов и дают остаточную экспоненту. p.s.: экспоненты - тоже знаковые, это следует учитывать при их сложении, вернее - при проверке на выход за пределы границ диапазона (для этого, надо перевести 11-битную экспоненту в short, заполняя оставшиеся 5 старших бит значением старшего бита этой экспоненты).

Включен ли Caps Lock или нет на сайте?

Можно узнать на сайте, включен ли Caps Lock или нет?


Ответ

Учитывая дискуссию в комментариях к вопросу, вот вариант, который определяет включен ли Caps Lock даже если нажата цифра (только в случае если Caps Lock имеет эффект!): $('#txtTest').on('keydown', function(e) { $(this).data('_lastKey', e.which); }); $('#txtTest').on('keypress', function(e) {
var lastKey = +$(this).data('_lastKey');
if(lastKey < 47 || lastKey > 90) return true;
var letter = String.fromCharCode(e.which); var upper = letter.toUpperCase(); var lower = letter.toLowerCase(); var isNumeric = lastKey >= 48 && lastKey <= 57;
var caps = false;
if(isNumeric) caps = (lastKey == e.which && e.shiftKey) || (lastKey != e.which && !e.shiftKey); else if( (letter === upper && !e.shiftKey) || (letter === lower && e.shiftKey) ) caps = !isNumeric;
//alert(caps); }); Единственный выход это предварительно отлавливать событие keydown и сохранять нажатую клавишу. Демо: http://jsfiddle.net/xH8vC/10/ Оформил как плагин к jQuery: jquery.capsChecker

Вывод массива по ключу

С новым годом всех ХешКодовцев! Есть массив таком виде: Array ( [1] => Array ( [id] => 1 [name] => Myname [type] => 1
[2] => Array ( [id] => 2 [name] => Myname [type] => 1
)
[3] => Array ( [id] => 3 [name] => Myname [type] => 2 )
[4] => Array ( [id] => 4 [name] => Myname [type] => 3
)
[5] => Array ( [id] => 3 [name] => Myname [type] => 1 ) ... ) Мне нужно вывести где type == 1, пробовал так че то не канает (( `array_keys($array_name, "type" == "1")` F1 плиз!


Ответ

Исходный массив: $a = array( array('type' => 1, 'name' => 'test0'), array('type' => 2, 'name' => 'test1'), array('type' => 1, 'name' => 'test2'), array('type' => 1, 'name' => 'test3') ); Фильтр: var_export(array_filter($a, function($v) { return $v['type'] == 1; })); Результат: array ( 0 => array ( 'type' => 1, 'name' => 'test0', ), 2 => array ( 'type' => 1, 'name' => 'test2', ), 3 => array ( 'type' => 1, 'name' => 'test3', ), ) Пожалуйста.

Алгоритм регистрации и авторизации через социальные сети

Добрый вечер. Расскажите, пожалуйста, как организовать сабж. Что хранить в базе, что держать в куках и как организовать авторизацию. Можно без кода - на словах. На всякий случай - пишу на PHP. Заранее спасибо.


Ответ

Пришёл новый чел, авторизуете его через ВК (см. Виджет Авторизации), получая от ВК напрямую в ваш сервер подтверждение, что этот клиент действительно Вася с ID 12345. Генерите для Васи запись у себя в БД, в том числе некий уникальный ключ, а ему ставите куки с этим ключем. В следующий раз придёт - если есть куки, соотв. записи в вашей БД - это видимо, Вася.

Линейное движение точки под углом: отскок

Приветствую. В общих чертах, пишу алгоритм перемещения точки в пределах прямоугольника, скажем 600 x 400. Точка имеет такие свойства: текущие координаты X и Y, при чем, X = [0,600]; Y = [0,400] (просто перемещаю div по relative-контейнеру) кинетический заряд A (длина шага за 1 такт — гипотенуза) угол Angle (град.) Сначала долго ломал голову насчет самого передвижения точки в направлении, указанном углом Angle. Когда обнаружил решение, стало стыдно. Вот оно: X = X + A * cos(Angle * PI / 180); Y = Y + A * sin(Angle * PI / 180); С этим все нормально: если Angle = 0, то точка движется вправо по OX, если Angle = 180, то влево, если Angle = 90, то вниз по OY (!), если 45 — то вправо-вниз... Но уже битый час не могу понять, какие ставить условия и как разворачивать угол при столкновении со «стеной» прямоугольника, которым описана площадь, за которую точка не должна вылезти. В каждой итерации (такт) происходит смещение точки по приведенным выше формулам и делается тест на столкновение. Извиняюсь за толстую просьбу, но я прошу дополнить (поправить?) эту секцию кода: if (x <= 0) { Angle = ... } else if (x >= 600) { Angle = ... }
if (y <= 0) { Angle = ... } else if (y >= 400) { Angle = ... } И еще у меня может быть и само движение неправильно описано, тоже поправьте пожалуйста, если так (у меня такое впечатление, что по-правильному, с увеличением угла Angle траектория точки должна заворачиваться против, а не по часовой — как у меня).


Ответ

исправил я функцию step, обратите внимания на коментарии this.step = function() { this.x = this.x + this.a * Math.cos(this.angle * Math.PI / 180); this.y = this.y + this.a * Math.sin(this.angle * Math.PI / 180);
if (this.x <= 0) { // this.angle = 180 - this.angle; if (this.angle < 0) this.angle += 360; // что бы угол был положительным } else if (this.x >= 600) { // 0 -> 180 10 -> 170 this.angle = 180 - this.angle; if (this.angle < 0) this.angle += 360; }
if (this.y <= 0) { // 270 -> 90 269 -> 91 this.angle = 360 - this.angle; } else if (this.y >= 400) { // 90 -> 279 180 - 180 this.angle = 360 - this.angle; }
return this; }; или даже ещё короче this.step = function() { this.x = this.x + this.a * Math.cos(this.angle * Math.PI / 180); this.y = this.y + this.a * Math.sin(this.angle * Math.PI / 180);
if (this.x <= 0 | this.x >= 600) { // this.angle = 180 - this.angle; if (this.angle < 0) this.angle += 360; }
if (this.y <= 0 | this.y >= 400) { // 270 -> 90 269 -> 91 this.angle = 360 - this.angle; } return this; };

Как ловить mouse events для группы SVG форм, как единого целого?

Разбираюсь с Raphael и SVG. Есть графический объект, состоящий из нескольких: напр., окружность и внутри неё квадрат поменьше. Как ловить мышиные события для этой пары, будто она одно целое? Пробовал: вешать onmouseover на бОльший (окружность): когда курсор заходит на квадрат, происходит onmouseout окружности; Встречал «решение» рисовать поверх группы почти прозрачную форму, покрывающую всю активную область, и вешать слушателя на неё. Как-то «неаккуратненько».. делать из них set, и цеплять Raphael'овский mouseover( handler) на этот сет: срабатывает для каждого из объектов сета.


Ответ

Предлагаю такой вариант - отлавливать mouseenter и mouseleave для группы элементов (). Raphael в "базовой поставке" это не поддерживает (set не является группой), но есть расширения которые позволяют добавить в него возможность работы с группами, вот например это https://github.com/rhyolight/Raphael-Plugins А дальше просто - берём группу и вешаем на неё mouseenter - mouseleave. Вот что-то типа этого

Тест на случайность Кнута (критерий сериальной корреляции)

Добрый день! Мне нужно реализовать один из тестов Кнута. Выбрала критерий сериальной корреляции. Во втором томе Кнута дается формула

Я пытаюсь по ней вычислить этот коэффициент корреляции и он у меня получается при N=50 равный 1,04. Но он не может быть, по модулю, больше единицы!... Помогите, пожалуйста, разобраться...

Кусочек кода:
const int M=N; unsigned int null_num, first_num, numerator_n, numerator_2, denominator_n, denominator_2; long double C; null_num = (a*x+c)%4294967296; numerator_n=0; numerator_2 = null_num; denominator_n = null_num*null_num;
for (i=0; inumerator_n = numerator_n + null_num*((a*x+c)%4294967296); numerator_2 = numerator_2 + null_num; denominator_2 = numerator_2; denominator_n = denominator_n + null_num*null_num; C = (double)((numerator_n*M)-(numerator_2*numerator_2))/(double)((denominator_n*M)-(denominator_2*denominator_2));
printf("Coefficient: %f

", C);


Ответ

Ваш тест неверно реализован. Делайте что-то такое: double sumUV = 0, sumU = 0, sumV = 0, sumU2 = 0, sum V2 = 0; for (int i = 0; i < n; i++) { double u = GetNextU(i); double v = GetNextV(i);
sumU += u; sumV += v; sumU2 += u*u; sumV2 += v*v; sumUV += u*v; } double coeff = (n * sumUV - sumU * sumV) / sqrt((n * sumU2 - sumU * sumU) * (n * sumV2 - sumV * sumV)); Это, к сожалению, достаточно наивный код: из-за неточности при округлении результат может оказаться катастрофически неточен. О подробностях читайте в Кнуте, 4.2.2. Пример после формулы (15) показывает, что при вычислении корня в знаменателе вы можете столкнуться с отрицательным числом, несмотря на то, что это математически невозможно. Апдейт. С новой формулой у вас V_i = U_{i+1}, вы считаете корреляцию последовательности на себя. Код можно упростить. double sumU = 0, sumU2 = 0, sumUShifted = 0; double firstU = GetNextU(0); double prevU = firstU; for (int i = 0; i < n; i++) { double nextU = i == (n - 1) ? firstU : GetNextU(i + 1);
sumU += prevU; sumU2 += prevU*prevU; sumUShifted += prevU*nextU;
prevU = nextU; } double coeff = (n * sumUShifted - sumU * sumU) / (n * sumU2 - sumU * sumU);

Как работает typedef в этом коде?

#include using namespace std;
typedef int (*func)(int a, int b);
int call_func(int a, int b) { return a + b; }
void function(int a, int b, func f);
int main () {
function(5, 2, &call_func); system("pause"); }
void function(int a, int b, func f) { int sum = (*f)(a, b); std::cout << "Sum = " << sum << std::endl; } typedef вводит новое имя для типа, и примеры вида typedef int int32 думаю понятны любому. Ну а что с typedef int (*func)(int a, int b); в этом коде, он же должен вместо func f подставить int (int a, int b) f, а подставляет int f(int a, int b), хотя я не только это не понимаю, а и то, откуда он знает что заменять нужно func, ведь это неполный тип или имя. Описание typedef в интернете заканчиваются на typedef int int32 или же просто с примером структур и функций или ещё каких сложных типов, но без объяснений. Я уже не знаю что думать, с дефайном было как-то проще.


Ответ

typedef -- не просто текстовая подстановка. Он работает следующим образом: если X -- имя typedef-типа, объявление переменной X x; работает как будто бы на этом месте стоит описание типа в typedef, где X заменено на x То есть typedef int (*func)(int a, int b); func f; работает как int (* /*было func, стало*/ f )(int a, int b);

Авторизация на сайте: ключевые моменты

Понимаю, что по теме авторизации на просторах интернета море информации, но всё таки решусь задать один вопрос. Без каких ключевых моментов нельзя обойтись, делая регистрацию на своём сайте? Авторизация через сессии. Задавая этот вопрос, рассчитываю на ответ примерно вот в таком виде: Пароль в базе данных хранить в зашифрованном виде. При авторизации сохранять время логина, IP и т. д. Проверка залогинен/нет должна проводиться не только как isset($_SESSION['username']), а.. А кстати, как это делать? P.S. Нет, меня не забанили в поисковых системах, но я хочу услышать на словах, что нужно делать, а не разбираться в тоннах чужого кода, гадая, зачем же он нужен.. Спасибо.^^ UPD: тем не менее кто может вкратце дать ответ на вопрос, как же начинающему, но, я надеюсь, перспективному проекту реализовать авторизацию на сайте? UPD: вопрос закрыт, в связи с отсутствием новых записей. Надеюсь кто-нибудь подчеркнет из всех этих дискуссий нечто полезное для себя)


Ответ

Давайте я пока попробую обобщить, что у нас получилось, а дальше как получится, может кто-то представит нам другой вариант.. Итак, поехали, некоторые общие выводы: Авторизация с помощью сессий не годится, так как она не будет работать, если сайт физически находится на нескольких серверах (сам не знаю, но так сказал @BOPOH). Соответственно если мы рассчитываем, что наш сайт будут любить тысячи людей, надо сразу выбирать другой способ. Исходя из первого, начинаем искать другую реализацию. Так вариантов много, были предложены варианты с БД и memcache.(опять же ВОРОН'ом). Я для себя решил, что сейчас буду делать через базу данных, просто потому, что для меня на данный момент это проще(я же только начинаю постигать азы вебдева). Как же сделать авторизацию через бд? Очевидно, алгоритм, упрощённый до минимума таков: Пользователь вводит логин и пароль, пароль сравнивается с паролем на сервере, если они одинаковы, в специальную таблицу заносятся данные о текущем логине. Пока точно не знаю, какие именно данные понадобятся, но я так думаю что это будут: IP-адрес пользователя, время логина, уникальный ключ данной сессии(отныне употреблять это слово я буду в значении "процесс пребывания пользователя на сайте в залогиненном состоянии", $_SESSION тут уже не при чём). Этот же ключ будет заноситься в cookies. Далее при загрузке каждой страницы браузер будет обращаться к серверу по этому ключу, и оттуда возвращать данные о логине. Теперь о безопасности. Естественно, в базе данных не может храниться сам пароль, а должен храниться только его хеш, то есть зашифрованная неким алгоритмом(лучше без возможности дешифровки) строка. Самый распространённый пример - функция md5(). Только желательно использовать её в таком виде: md5($pass.$salt), так как существует куча сайтов-дешифровщиков обычных md5-строк. Далее со слов @avp: ключ должен перевычисляться независимо сервером и клиентом при каждом обмене. И сервер сравнивает присланный клиентом ключ с ожидаемым. Также для важной информации хэш пароля пересылать по сети нельзя. И еще, желательно как-то проверять, что сервер с которого Вы получили картинку на экран - это не подстава. Решение о необходимости использования этих советов, а также способы реализации оставлю за вами, уважаемые rодеры. Для себя выберу первые два пункта(мой и первый пункт @avp). Дополняйте меня)

CultureInfo.InvariantCulture и с чем его едят

Здравствуйте, уважаемые! Возник такой вопрос, как использовать CultureInfo.InvariantCulture при конверте строк в дату и в случае с денежными величинами в double. С датами вроде всё понятно. Как я понимаю CultureInfo.InvariantCulture говорит о том, что формат в полученной строке соответствует формату, указанному в языковых настройках твоего компьютера. С датой я в этом убедился. Однако в случае с денежной величиной возникает вопрос, почему вот это: double.Parse("2135.45", CultureInfo.InvariantCulture); нормально конвертится и не вызывает исключений. Ведь денежный формат России указывается через запятую.


Ответ

Не правильно понимаете. Как сказано тут, это как раз не зависимая от языка локаль.

Язык программирования для написания высокопроизводительных Web-приложений [закрыт]

Помогите с выбором языка, который бы обеспечивал наибольшую производительность Web-приложений. Стоит сказать, что С/C++ наверное не очень для этого подходят. Суть в том что я хочу найти ЯП очень хорошо подходящий для веб но значительно превосходящий по производительности PHP,Python, Ruby и т д.


Ответ

Честно говоря, вы дали мало информации по вашей проблеме, поэтому сложно сразу дать какое-то абсолютно правильное решение. Но вообще генерация большого количества изображений по какому-то алгоритму - задача сама по себе достаточно ресурсоемкая (к этому можно еще добавить то, что если алгоритм этой генерации реализован через ж..эммм..не лучшим образом, то она может стать на n порядков более требовательной в плане ресурсов) Вполне возможно, что для этих задач имеет смысл задействовать GPU, используя OpenGL или DirectX - один только процессор с такими проблемами справляется неважно. Что касается языков, то из используемых в вебе ЯП вполне приличная производительность у C# - как показывает практика, в некоторых аспектах он даже обгоняет C++. (впрочем, не уверен, что в работе с изображениями это будет иметь весомое значение) Еще добавлю, что, наверное, стоит рассмотреть вариант с написанием библиотеки на C/C++, которая будет выполнять работу с изображениями, и подключать ее из вашег оприложения. Понятия не имею, как там с этим в Питоне (не знаком с ним вовсе), но в том же Шарпе это вполне себе возможно

Задачка на алгоритм для ниндзя

Уже полторы недели небольшими набегами думаем, как её решить. Может быть, тут кто-то сможет :) Даны два массива натуральных чисел: x и y (оба массива неубывающие), и натуральное число Q. Найти такие числа из этих массивов, что x[i] * y[j] максимально близко к Q Сложность не должна превышать O(n+m), где n и m — размеры массивов.


Ответ

Просматриваем один массив с головы, другой с хвоста. Передвигаемся по второму массиву из хвоста в голову, сохраняя два значения- текущее произведение и предыдущее когда текущее произведение меньше Q, то находим какое произведение ближе к искомому- текущее, предыдущее или ранее сохраненное как наиближайшее сдвигаем первый массив из головы в хвост на одну позицию и повторяем движение по второму массиву, пока опять текущее произведение не станет меньше Q Когда первый массив будет весь пройден то наиближайшее будет найдено при сложности i+j UPD Реализация на JavaScript http://jsfiddle.net/ReinRaus/nK5Nz/ UPD2 Исправил ошибки и недочеты кода

Javascript свойства обьектов

Комментариями помечена проблема var obj = {a:2}; obj.b = 3; var obj2 = { y: obj.b + obj.a, d: y //не могу свойству d присвоить значение свойства y }; //obj2.d = obj2.y; //а вот так могу console.log(obj2.y); console.log(obj2.d); Не могу свойству d объекта obj2 присвоить значение свойства y этого же объекта.


Ответ

Смотрите в чем ошибка: 1)this указывает на контекст исполнения, т.е когда вы делаете var obj2={ d:this.y } то, this указывает на объект window. 2) когда пишете так var obj2={ y: 'ололололо', d:y } то в цепочке областей видимости(Scope chain) переменной "y" нет, однако, если вы сделаете так: var y = '2' var obj2={ y: 'ололололо', d:y } то получите свойство "d" со значением 2. Новое звено в цепочке видимости происходит при вступление в новый контекст исполнения... Можете использовать конструктор, тогда this будет указывать на новоявленный объект: function Foo(){ this.x = 'lol', this.y = this.x } b = new Foo(); console.log(b.y)

Как установить плагин для RoR в RubyMine?

Точнее, как выполнить эту строку из руководства? $ script/plugin install git://github.com/technoweenie/restful-authentication.git Или как это можно сделать не в IDE, если так будет удобнее?


Ответ

Добавьте в Gemfile: gem "restful-authentication" И RubyMine сама выполнит bundle install

Как определить значение АЦП на языке C?

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


Ответ

Для определния значения напряжения у МК должен быть встроенный АЦП, но по моему в прошлом вопросе Вы говорили что используете AtMega32, так вот у него аж 8 каналов. Ниже приведу программу для определения значения напряжения, но прежде попытаюсь разъеснить что к чему на Вашем конкретном МК. Каналов, как я сказал, восемь. АЦП 10 разрядный, но можно в настройках установить 8 разрядов. Точность измерения АЦП вплоть до младшего значения, то есть если мы берем 10 разрядный АЦП, то у него 1023 младшие единицы, а значит при опорном напряжении 5В точность будет 5000 мВ/1023 т.е. приблизительно 4мВ. В настройках необходимо будет указать частоту дискретизации. Так значит перейдем к ПО. Описывать особо не буду, всю информацию сможете подчеркнуть в комментариях.
#include #include #include
//Определим название канала с которого мы и будем считывать значение АЦП #define ADC_0 0
// функция read_adc() и будет нам возвращать значение АЦП unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); //Задержка необходимая для стабилизации значения АЦП delay_us(10); // Преобразование значения ADCSRA|=0x40; // Ожидаем окончания обработки while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; //Возвращаем значение АЦП return ADCH; }
int adc; //Переменная которая будет хранить в себе текущее значение АЦП
void main(void) { //Настраиваем МК PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x0C; PORTC=0x00; DDRC=0xC3; PORTD=0x00; DDRD=0x88; TCCR0=0x6B; TCNT0=0x00; OCR0=0x5F; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x5F; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; ACSR=0x80; SFIOR=0x00;
// Инициализация АЦП // Частота преобразования: 125,000 kHz // Ножка на которую будет подаваться опорное напряжение: AVCC pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0xA7; SFIOR&=0x1F;
while (1) { //Присваиваем текущее значение АЦП переменной adc adc = read_adc(ADC_0); //Отправляем на ПК полученное значение, которое на нем вы сможете преобразовать в напряжение по формуле (adc/1023)*Vref, где Vref - опорное напряжение МК printf("%d

ADC= ", adc); //Устанавливаем задержку после каждой отправки delay_ms(1000); } }
Как принимать и отправлять я отвечал Вам в предыдущем вопросе: Как на Си передать информацию от микроконтроллера на COM- порт?

Библиотека для работы с JSON для iOS

Нашел следующие библиотеки: SBJSON JSON kit Touch JSON (как я понял устарел и не поддерживается) хочется поинтересоваться что пользуется бОльшим успехом и какие особенности этих библиотек. И возможно какая лучше.


Ответ

Советую выбирать Вам между NSJSONSerialization и JSONKit. Про разницу между ними ничего особенного не скажу, обе библиотеки делают свое дело.
Что касается их производительности, то разница у них незначительная (JSONKit быстрее, но не намного) и к тому же редко когда вы столкнетесь с тем, что именно производительность разбора JSON будет для вас bottleneck. Смотрите на эту тему очень поучительный комментарий автора библиотеки RestKit.
Единственный довод за NSJSONSerialization - это отсутствие лишней зависимости от сторонней библиотеки (я имею в виду зависимость от JSONKit в случае, если вы выберете её), хотя, если вы пользуетесь Cocoa pods, этот довод становится совсем еле заметным.
Довод против NSJSONSerialization и в пользу JSONKit - это что JSONKit удобнее в использовании - я пользуюсь JSONKit главным образом из-за того, что она добавляет удобные категории к классам NSArray, NSDictionary, NSString. И вместо того, чтобы писать каждый раз заново строки NSJSONSerialization типа
NSJSONSerialization *yourResponse = [NSJSONSerialization JSONObjectWithData:yourData options:0 error:&jsonError]; NSArray *yourObjects = (NSArray *)yourResponse;
При использовании JSONKit Вам достаточно будет написать
NSArray *yourObjects = yourData.objectFromJSONData;
На мой взгляд это удобно и незаметно. Настолько незаметно, что я даже не сразу вспомнил какой JSON-библиотекой я пользуюсь, когда прочитал Ваш вопрос.
ОБНОВЛЕНО ПОЗЖЕ
Мой взгляд на этот вопрос изменился с тех пор, как я отвечал на него полтора месяца назад. Сейчас я бы советовал использовать исключительно родной NSJSONSerialization.
Вот несколько причин:
JSONKit, похоже, накрепко заброшен автором. Xcode 5 выдаёт очень много Warning'ов по поводу JSONKit, как он есть, и автор никак не реагирует на соответствующие репорты (если интересно, см. многочисленные issues вроде #121 в его репозитории на Github). Вот эти Тесты производительности на SO показывают, что NSJSONSerialization работает быстрее или как минимум наравне с JSONKit (начиная с iOS 6). Если вы используете для работы с сетью AFNetworking, то он за кулисами разбирает JSON с помощью NSJSONSerialization, и вам вообще не нужно думать о том, какой JSON парсер выбирать и использовать, так как за вас всё уже сделано и вы получаете готовые свои ответы уже завернутые из JSON в NSDictionary/NSArray.
Кратко: используйте NSJSONSerialization!

Программное изменение settings.py (django)

Вопрос в следующем, у меня есть development сервер и production. Некоторый функционал завязан на переменную PRODUCTION из settings.py. Как мне при помощи самого питона или через bash изменять эту переменную, например, перед выгрузкой на production?


Ответ

Создайте файл local_settings.py, в нём прописывайте конфиг для девелоп-сервера и импортируйте его в конце settings.py, чтобы перезаписать нужные переменные. А на продакшн просто не выкладывайте этот файл (например, можно не включать его в репозиторий).

Какая разница между 32-х битной программой и 64-х?

Какая разница между 32-х битной программой и 64-х ? Если я пишу код в 64-х битной ОС на С++ это будет 64-х битной программой ? Как написать 64-х битную программу ?


Ответ

Размер типов long и указателей (64 и 32 бит). В принципе 64-бит программа может непосредственно обращаться к данным в адресном пространстве большем 4 гигабайта, а 32-бит - не может. Иногда 32-бит программы работают быстрее (в основном из-за более экономного использования кэша CPU). 64-бит программы не могут исполняться на 32-бит машинах, а наоборот можно (но не всегда). Если компилятор 64-битный, то да. Используйте 64-бит ОС и 64-бит компилятор.

Алгоритм сортировки используя нейросеть

Подскажите, пожалуйста, хорошие статьи на тему "Сортировка на нейросети". Базу про нейросети почитал. Что такое "однослойный перцептрон" представляю. Почему именно сортировка? Просто разбирают задание, в котором требуется написать алгоритм сортировки чисел, используя нейросеть. При этом весовые коэффиценты должны быть "аналитически" настраиваемыми. Если вы можете что-то посоветовать по поводу конкретно этого задания, то буду благодарен.


Ответ

Проблема сортировки на нейронной сети неоднократно изучалась; к примеру см. Lin, Hsu (1997) и Tamburatzis (1999)

Java: конкатенация строк и Integer.getInteger

Здравствуйте! Столкнулся с проблемой парснига int, объясните, пожалуйста, как думает компилятор в этот момент и почему он не хочет выдавать мне правильное значение. String s = "task_123"; String[] paths = s.split("_"); int type = 1; int i = Integer.getInteger(Integer.toString(type) + paths[1], 0); int j = Integer.getInteger(type + paths[1], 0); System.out.println(i); System.out.println(j); Выводится 0, 0, а должен 1123, 1123 Как так? Код на ideone.com


Ответ

Компилятор здесь не при чем. Вы используете не тот метод (см. javadoc Integer.getInteger). Вы пытаетесь получить значение типа Integer, которое соответствует имени системного свойства. Т.к. это свойство не определено, то возвращается значение по умолчанию 0, которое вы сами и указали в вызове метода getIneteger Замените вызов getInteger на parseInt

Intellij IDEA: создать GUI приложение

Как в этой замечательной среде создать GUI приложение? Я что-то не могу найти там кнопки/ползунка и т.д. как это есть в том же Xcode/Visual Studio. Или IDEA не даёт такой возможности?


Ответ

В проекте на пакете нажимаете правой кнопкой миши "New" -> "GUI Form"

Как быстро удалить индексы в таблице MySQL?

Возможно ли быстро удалить мои 7 индексов из таблицы в MySQL? Как-то например в один запрос прописать удаление всех индексов? Потому что в базе 400к записей и один индекс удаляется по 15 минут. Очень долго :(


Ответ

alter table `имя таблицы` drop index `имя 1 индекса`; alter table `имя таблицы` drop index `имя 2 индекса`; alter table `имя таблицы` drop index `имя 3 индекса`; alter table `имя таблицы` drop index `имя 4 индекса`; alter table `имя таблицы` drop index `имя 5 индекса`; alter table `имя таблицы` drop index `имя 6 индекса`; alter table `имя таблицы` drop index `имя 7 индекса`;
Иного способа избавиться от индекса нет, то есть одной пулей 7 зайцев вы убить не сможете.

Структура папок сайта. Как грамотней?

В общем, планируется несложный сайт-визитка с небольшим количеством PHP, для вывода из базы данных товаров. Встал такой вопрос - как грамотно организовать структуру папок сайта, что к чему подключать и как разделять код? Можно коротко, думаю, я пойму общую идею. Пока что есть такой вариант:
/css /js /images /includes index.php page1.php page2.php page3.php
PHP-файлы просто связаны между собой ссылками (в меню сайта), в нужные места этих файлов подключаются файлы из папки includes, которые выводят какие-то данные из базы. Как вариант - создать папку template для шаблонов, тогда туда буду передаваться данные из файлов папки includes и уже в главные файлы будут делаться не php-вставки, а вставляться шаблоны. То есть, получается, что index.php, page1.php, page2.php, page3.php это просто файлы с html-разметкой и php-вставками (или шаблонами). Есть еще какие-то, более грамотные варианты разделения?


Ответ

В идеале любой сайт должен иметь такую структуру: app (корневая папка) --core --components --models --other code-related stuff --templates --public - именно эта папка смотрит "наружу" ----assets ----images ----js ----css ----index.php --logs Здесь главное - не названия папок, а то, что наружу смотрит всего одна папка и один исполняемый файл, в результате сайт у вас оказывается наименее уязвимым. И не забывайте применять intval() и подобные операции к приходящим айдишникам. update: Еще одна вещь, которую необходимо отметить - если заливаются какие-то файлы, то надо их хранить вне публичной директории, либо (если, например, это пользовательские изображения, которые должны показываться) фильтровать их по расширению и быть уверенным, что сервер не может исполнять файлы с таким расширением. Буквально на этой неделе сталкивался с тем, что так сломали самопис (а в свое время так уронили тысячи сайтов на вордпрессе).

Android - как ещё можно ускорить вставку в базу SQLite?

Здравствуйте! По совету из прошлого вопроса я не стал записывать нулевые ячейки в базу, теперь объём записываемых данных уменьшился с 25 165 824 до 6 881 280. Вопрос: можно ли ещё как-нибудь ускорить сохранение (сейчас оно занимает 140 секунд, хотелось бы сократить это время хотя бы до минуты) этих данных в базу? Вот мой код сохранения: void save() { final SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(path, null); String sql_w_table = "CREATE TABLE w_data (" + "a LONG," + "b LONG," + "type LONG" + ");"; database.execSQL(sql_w_table);
String query = "INSERT INTO w_data VALUES (?,?,?);"; SQLiteStatement st = database.compileStatement(query);
database.beginTransaction();
for (int i = 0; i <= 32767; i++) { for (int n=0; n <= 255; n++) { int b = map[i][n];
if (b != 0) { st.bindLong(1, i); st.bindLong(2, n); st.bindLong(3, b); st.executeInsert(); st.clearBindings(); } } }
database.setTransactionSuccessful(); database.endTransaction(); database.close(); }


Ответ

Предлагаю самый наивный способ - не сохранять "поячеечно", а "построчно". Попробую на коленке переписать (!!).
void save() { final SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(path, null); String sql_w_table = "CREATE TABLE w_data (" + "a LONG," + "type TEXT" + ");"; database.execSQL(sql_w_table);
String query = "INSERT INTO w_data VALUES (?,?);"; SQLiteStatement st = database.compileStatement(query);
database.beginTransaction();
for (int i = 0; i <= 32767; i++) { String s = ''; for (int n=0; n <= 255; n++) { s += map[i][n] + " "; } st.bindLong(1, i); st.bindLong(2, s); st.executeInsert(); st.clearBindings(); }
database.setTransactionSuccessful(); database.endTransaction(); database.close(); }
суть - в базу сохраняем сразу по строке. Когда нужно будет распаковывать, то используем обычный метод split у строки.
Можно пойти дальше и использовать blob и сохранять строку в один подход. Андроидовская обвязка для blob умеет сохранять массив byte. Класс java.nio.IntBuffer и java.nio.ByteBuffer позволяют завернуть массив int в массив byte. Вот пример как сохраняют картинку в базу.
Но я верю, что сохранение в файл будет как минимум не медленнее (если только не сохранять поэлементно).

Как с помощью регулярных выражений осуществить замену цифр

Нужно заменить название, состоящее из буквы и цифры на другое, также состоящее из буквы и цифры. Как с помощью регулярных выражений осуществить замену названия, состоящего из буквы и числа на другое, также состоящее из буквы и числа так, чтобы, одна цифра заменялась на саму себя с нулем перед ней, а двузначное число - само на себя? Например, П3->SV03, П12->SV12


Ответ

PHP: $string = "П3, П14"; $pattern = array('/П(\d{2,})/u', '/П(\d{1})/u'); $replacement = array('SV$1', 'SV0$1'); $result = preg_replace($pattern, $replacement, $string); // echo $result; JavaScript: var str = "П3, П14"; var onlyOneDigit = /П(\d{1})/g; var twoAndMoreDigits = /П(\d{2,})/g;
str = str.replace(twoAndMoreDigits, "SV$1") .replace(onlyOneDigit, "SV0$1"); //console.log(str); Выведет: SV03, SV14

Отличия сред разработки под android. [закрыт]

Всем доброго времени суток! Пишу под андроид на Java в Eclipse+ADT. Какие ещё среды разработки стоит использовать и почему? Видел обзор на Android Studio - вроде всё круто, но стоит ли переходить на неё? Или есть что-то ещё? P.S. В частности в упомянутом обзоре порадовала заявленная фича соединения линиями блоков кода. В Eclipse этого не хватает.


Ответ

Я уже отвечал по поводу Eclipse vs IDEA.
Сейчас для разработки под андроид использую Android Studio ибо она заточена сильней под это дело. Есть много готовых шаблонов(Navigation Drawer,LoginActivity,Master/Detail Flow и etc). Да, она позволяет работать с проектами только для андроид. Но мне это не мешало поставить рядом IDEA, не так уж она места много занимает.
Единственный минус(после перехода, не считаю таковым) это то, что она постоянно предлагает перевести проект на Gradle.
Я пользовался AS с самого начала, как только ее представили. С тех пор она стала гораздо стабильней. Я считаю ее лучшей IDE для разработки под андроид.

Необязательный параметр scanf

Хочу сделать в программу интерфейс. Чтобы писали например "push 982" и в массив попадало 982. Но также хочу реализовать команды: pop и break. Но считывание в бесконечном цикле я произвожу таким образом: scanf("%s %d", &cmd, &num); cmd - сама команда, num - число. И из-за этого формата человеку приходится писать "pop 0" или "break 0". Так как формат введёный в scanf требует пробел и число, иначе не воспринимает. Можно ли как-нибудь сделать ,чтобы num - был необязательным и чтобы если пишешь слово без числа, оно всё равно бы считывалось? Или это реализовывать можно только посимвольным считыванием? (тогда это не стоит того)


Ответ

scanf("%s", &cmd); if (!strcmp(cmd, "push") { scanf("%d", &num); ... } else {...} не канает?

Ошибка: 'a' was not declared in this scope

Скачал последний qt 5.3.0 c MinGW 4.8.2 и удивился. (тоже самое и с qt 5.2.0 с MinGW 4.8.0) #include
using namespace std;
template class Super{ class A{ protected: int a; }; class B : public A{ int b; B(){ b = a; } }; };
int main() { cout << "Hello World!" << endl; return 0; } Не работает. Выдаёт: C:\***\main.cpp:14: ошибка: 'a' was not declared in this scope b = a; ^ Хотя, убрать строку template , то всё работает. Причём приведённый выше код без изменений работает, например, в Visual Studio 2008. Это баг MinGW или же это так и надо/допустимо? Кстати, нормально работает с MinGW и если писать this->a


Ответ

Кажется, я понял. Вот тут обсуждают похожую проблему.
В вашем случае ситуация такова. b является зависимым именем. Компилятор должен понять значение этого зависимого имени до подстановки T. (Посмотрите детали и обсуждение в этом вопросе). Поскольку он не может, разработчики стандарта решили убрать зависимые имена из области видимости внутри шаблона. Поэтому вам приходится указывать явно, что именно вам нужно.
Таким образом, баг в старом Visual Studio, их реализация не вполне соответствовала стандартам. (В новом Visual Studio уже соответствует.)
Я считаю, что язык C++ неоправданно избыточно сложен. Вы натолкнулись на одно из таких мест.

Не запускаются JAR файлы.

Ребят, помогите плз. Создал программку, собрал Jar файл, делаю по нему двойной клик а он не запускается. Особенность в том что если запускать в ручную через cmd то все нормально. Если собирать wrapper-ом в exe. Как сделать так чтобы JAR сам по себе открывался по двойному клику?


Ответ

Процитирую ответ с SO
For Windows 7: Start "Control Panel" Click "Default Programs" Click "Associate a file type or protocol with a specific program" Double click .jar Browse C:\Program Files\Java\jre7\bin\javaw.exe Click the button Open Click the button OK

SSH доступ по ключу

Система Ubuntu 11.10, подключаюсь к серверу на FreeBSD 8.0.
На своей машине выполнил ssh-keygen | ssh-copy-id username@hostname
При попытке подключения ssh username@hostname запрашивает пароль. Лог:
OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 Sep 2011 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug1: Connecting to 10.10.10.10 [10.10.10.10] port 22. debug1: Connection established. debug1: identity file /home/usernam/.ssh/id_rsa type 1 debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048 debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048 debug1: identity file /home/username/.ssh/id_rsa-cert type -1 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.2p1 FreeBSD-20090522 debug1: match: OpenSSH_5.2p1 FreeBSD-20090522 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-md5 none debug1: kex: client->server aes128-ctr hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server host key: RSA ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee:ee debug1: Host '10.10.10.10' is known and matches the RSA host key. debug1: Found key in /home/username/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/username/.ssh/id_rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: keyboard-interactive
Пробовал так же вручную копировать. Права стоят 700/600.


Ответ

Испытывал ровно такую же проблему: ssh-copy-id, на удалённом хосте права на ~/.ssh и ~/.ssh/* стоят правильные, но ключ не принимается. Проблема оказалась в правах на домашнюю папку пользователя на удалённой машине, в которой находится ~/.ssh (собственно в ~).
Смущает ssh-keygen | ssh-copy-id username@hostname - зачем здесь пайп? ssh-keygen создаёт ключ и кладёт его в ~/.ssh, а ssh-copy-id берёт ключ из ~/.ssh и складывает его на username@hostname. Между командами ничего не передаётся, пайп не нужен.
Правильным вариантом кажется всё-таки ssh-keygen && ssh-copy-id username@hostname
Так что автору надо проверить 2 вещи - положилась ли вообще публичная часть сгенерированного ключа на удалённый сервер и правильные permissions на весь путь до ~/.ssh на удалённом сервере (включая ~ и всё, что выше).

Как создать линк на /var/www и дать права на запись пользователю?

На Ubuntu установлен Apache с папкой для документов /var/wwwdrwxr-xr-x 2 root root 4096 окт. 21 23:15 wwwКак видно писать в нее может только root. Мне было бы удобно создать символическую ссылку у себя в домашней папке ~/www и дать своему пользователю права на запись в эту папку. Как это сделать на bash-e?


Ответ

# ln -s /var/www/username /home/username/dirname # chown -c username /home/username/dirname

Какого цвета больше на картинке.

Допустим есть несколько изображений. Нужно для них сгенерировать фон. Для первой картинки очевидно что он должен быть оранжевым, для второго темно-серым, для третьего не понятно)
Как програмно узнать (желательно imagemagick) какого цвета больше на картинке?


Ответ

Конвертнуть в indexed color формат, уменьшив число цветов до 256 или ещё меньше. imagemagick convert в histogram сосчитает кол-во упоминаний этих цветов, возьмите оттуда максимум.
Вот командная строка, которой я получил цвета для ваших примеров:
convert image.jpg -format %c -depth 8 histogram:info:histogram_image.txt && sort -n histogram_image.txt | tail -1
Для ваших трёх изображений (вырезал из примера), «победили» следующие цвета:

Вот так выглядит 10-пиксельная рамка соотв. цветов с исходными изображениями:

Как контроллеры MVC вызывают несколько разных сущностей (компонентов, элементов, модулей)?

Не первый год программирую, но не могу понять одну простую вещь: как контроллеры MVC формируют многофункциональные страницы. Например, на странице на этом сайте есть верхний тулбар, меню справа, меню футреа, основной контент и т.д. Мне гораздо легче дается понимание HMVC, то есть компонентного подхода. Там все просто: в шаблоне вызываем нужный компонент, и он уже работает как замкнутая система со своим внутренним MVC. Буду признателен, если кто-то сможет втолковать идею. Сколько статей не прочитал, так и не понял этого.


Ответ

Класическое mvc это когда представление по событию модели берет из неё положенное интерфейсом, диспатчит контроллеру, а контроллер меняет модель. Стоит заострить внимание, что контроллер не меняет представление вообще ( хотя в классике это ДОПУСКАЕТСЯ ), а модель меняет так, что решение меняться или нет остается за моделью. И такая модель называется "активной" и при ней контроллер "тонким", что является единственно верным вариантом. ВСЁ! Остальное это неправильно и ложно. Но чья-то глупость распространилась так, что даже гуру не верят в первоисточник, хотя wiki и "gof" об это говорят прямо (и причиной такой mvc-ериси, как я считаю, стало опускание из контекста статьи контроллера). Обновление Контроллер служит связующим звеном между представлением и модель. Но дело в том, что в wiki и всяких статейках приводятся (если и правильные реализации) минимальные примеры, которые в жизни не существуют. И ещё уясните одну маленькую и ускользающую от всех деталь - представление не имеет ссылку на модель, представление имеет ссылку на реализацию интерфейса. То есть, по ооп, структура строится на интерфейсах, модель это абстракция, а не живой объект. И когда все слюнями плюются и говорят, что представление имея ссылку на модель, нарушает концепцию о разделении логики от отображения, то просто говорящие не углублялись в mvc сильно, а используют навязываемые фраймворки, которые делают люди, но их концепцию обожествляют и выставляют эталоном.

Поток с наименьшим приоритетом вызывается большее количество раз

В следующем коде 5 потоков с разными приоритетами конкурируют за доступ к ЦП с 8 ядрами. Каждый поток увеличивает свой счетчик. using System; using System.Threading;
class PriorityTesting { static long[] counts; static bool finish;
static void ThreadFunc(object iThread) { while(true) { if(finish) break; counts[(int)iThread]++; } }
static void Main() { counts = new long[5]; Thread[] t = new Thread[5]; for(int i=0; i // Даём потокам возможность поработать 10 c Thread.Sleep(10000);
// Сигнал о завершении finish = true;
// Ожидаем завершения всех потоков for(int i=0; i

Ответ

Thread with the lowest priority is invoked more times

Как описать контекстные меню для нескольких view в одной Activity?

Во всех найденных мною примерах создается меню для одного view. Как создать контекстные меню для нескольких элементов в одной Activity?


Ответ

Так, по идее, можно сделать. Весь код пишем в активити. 1) Находим нужные нам вьюхи и регистрируем их для получения события вызова контестного меню: TextView tV = (TextView) findViewById(R.id.yours_text_view_id); registerForContextMenu(tV);
ImageView iV = (ImageView ) findViewById(R.id.yours_image_view_id); registerForContextMenu(iV); 2) Переопределяем методы активити: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { switch (v.getId()) { case R.id.yours_text_view_id: menu.add(0, 0, 0, "Получить тест статьи"); menu.add(0, 1, 0, "Комментарии"); menu.add(0, 2, 0, "Открыть в браузере"); break; case R.id.yours_image_view_id: menu.add(0, 3, 0, "Ещё кнопка0"); menu.add(0, 4, 0, "Ещё кнопка1"); menu.add(0, 5, 0, "Ещё кнопка2"); break; } }
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 0: //что-то делаем break; case 1: //что-то делаем break; case 2: //что-то делаем break; case 3: //что-то делаем break; case 4: //что-то делаем break; case 5: //что-то делаем break; case 6: //что-то делаем break; } return super.onContextItemSelected(item); }

Обобщенный интерфейс, ковариантность

Господа, подскажите, пожалуйста, по коду. Вот ради эксперимента набросал код, но не пойму, почему метод GetNameObj возвращает объект типа a1, если ему как через конструктор, так и через параметр типа передают a2. Вот код: using System; interface a { T GetNameObj(); } class b : a { T t; public b(T o) { t = o; } public T GetNameObj() { Console.WriteLine(typeof(T).Name); return t; } } class a1 { } class a2 : a1 { } class c { static void Main() { a A = new b(new a2()); a2 A2 =(a2) A.GetNameObj(); //вот этот метод почему-то возвращает тип a1
} } Мне кажется, что единственным объяснением такого поведения является то, что методу без разницы, что я там передаю за тип данных в конструктор или параметр типа, ему главное, что в интерфейсной ссылке указан параметр типа a1. Но в таком случае приоритет выше у параметра типа интерфейса, чем у типа объекта? Или я что-то не правильно понял? Подскажите, пожалуйста.


Ответ

Вы встретились с различием между заявленным (compile-time) и реальным (run-time) типом. Объект, создаваемый конструктором new b(new a2()), имеет реальный тип b. Поскольку b является разновидностью (то есть, подтипом) a для любого T, то b есть разновидность a. Далее, a2 есть подтип a1, поэтому, вследствие ковариантности a<>, a есть подтип a. Поэтому возможно присвоить переменной A типа a ссылку на объект типа b Далее, рассмотрим объект, возвращаемый A.GetNameObj(). Поскольку A имеет заявленный тип a, возвращённый объект имеет заявленный тип a1. Реальный же тип этого объекта — a2, т. к. реальный тип A — b При компиляции для присвоения переменной A2 существенен лишь заявленный тип (компилятор в общем случае не знает, как будет реальный тип), поэтому код без приведения типов не скомпилируется. Тем не менее, приведение типов может привести объект к его реальному типу (но выяснится это лишь во время выполнения), поэтому код с приведением типов работает без выброса исключения. По вашему вопросу: ...методу без разницы что я там передаю за тип данных в конструктор или параметр типа, ему главное что в интерфейсной ссылке указан параметр типа a1. Но в таком случае приоритет выше у параметра типа интерфейса чем у типа объекта ? Для компилируемости кода важен лишь заявленный тип. В вашем случае важен заявленный тип переменной A, а не реальный тип объекта, который будет в эту переменную записан. Если бы вы заявили более сильный тип для переменной A, то приведение типов не понадобилось бы: a A = new b(new a2()); a2 A2 = A.GetNameObj();

Разделение класса в заголовочный файл и в файл с кодом

Вроде всегда так класс разделял в h-хедерные файлы и cpp-файлы с кодом, но в этот раз что-то пошло не так :( Пишет Unresolved external blablabla.obj Main Header CPP Подскажите, пожалуйста, где я в этот раз ошибся?


Ответ

Проблема в шаблонах. Шаблоны надо размещать полностью в header'е. Дело в том, что шаблонный класс не есть класс, и не генерирует вовсе никакого кода. Код будет сгенерирован «задним числом» в момент инстанциации шаблона, то есть, в тот момент, когда вы объявляете шаблон с конкретным параметром! (В вашем случае это main.) Если выгрузить имплементацию шаблона в .cpp, она будет в этой точке компиляции недоступна, и приведёт к ошибке компоновки. Есть, правда, ещё один путь: если вы точно знаете все типы, с которыми будет когда-либо инстанциироваться шаблон, вы можете оставить имплементацию в .cpp, и добавить туда список для явной инстанциации: template class Stack; Но это сработает только лишь если вы контролируете все места, где ваш шаблон будет использован. Если вы пишете библиотеку общего пользования, вы не можете знать наперёд, с какими типами её будут использовать клиенты, то есть этот трюк не пройдёт, и вам таки придётся писать всё в header'е. (Так работает вся STL, например.) Дополнительное чтение по теме: [C++ FAQ/Templates/linker errors]

/*# sourceMappingURL=modal.css.map */ - что значит?

В modal.css прописана строчка в конце файла /*# sourceMappingURL=modal.css.map */. В консоле пишет: GET http://landinco.ru/wp-content/themes/Divi/albanza/css/modal.css.map 404 (Not Found). Что это означает и где взять ее? В скрипте такого файла нет...


Ответ

Это значит, что данный CSS код был сгенерирован с помощью какого-то CSS-препроцессора с использованием Карты Кода(Source Map). Если в этом файле тебе всё понятно(или разбираться в нём не нужно) и работает он корректно, то эту строку можно смело удалить. Прочитать про карты кода можно тут http://habrahabr.ru/post/148098/

Как можно переименовать package?

Имя пакета com.example.level.namis. Мне нужно теперь поменять example. В студио выбираю Refactor -> Rename, но она позволяет переименовать только level на другое имя, а нужно поменять example. Не переименовывать же каждый файл и папку тоже вручную.


Ответ


Ставишь галочку Compact Empty Middle Packeges и рефакторишь пакет. Вообще можно еще менять packageId в build.gradle.

В чём разница между CFDictionary и CFMutableDictionary?

Здравствуйте, участники форума. Мой вопрос отражён в заголовке. Можно ли выполнить какое-либо приведение типа, чтобы свести CFMutableDictionary к CFDictionary. Заранее спасибо за помощь!)))


Ответ

Не совсем приведение, но может CFDictionaryCreateCopy подойдет : @function CFDictionaryCreateCopy Creates a new immutable dictionary with the key-value pairs from the given dictionary. Пример: CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); ... CFDictionaryRef copy = CFDictionaryCreateCopy(NULL, dict); CFRelease(dict);

IPhone Developer Account в Украине

Доброго времени суток всем. Я решил приобрести сертификат iOS разработчика и столкнулся со множеством проблем, вообще не понимаю, как я буду получать деньги с продаж, какую карту привязать к аккаунту, какие законы я нарушаю и все такое... Кто занимается разработкой в Украине - поделитесь опытом, пожалуйста, расскажите, как все сделать правильно. Спасибо.


Ответ

Привет! Распишу подробнее как дело обстояло у меня. Я сходил в ближайшее отделение приват банка, узнал у сотрудника возможность получить валютную карту. Для регистрации в iOS Developer Program нужна именно валютная карта. Ждал я карту 10 дней. Ее делают "на заказ". На карте была фотография, имя держателя карты, срок действия, а также CVV код. Как зарегистрироваться? Тут все стандартно. Получили нашу валютную карту, пополнили ее на 100$. Я просто перевел деньги с гривневой карты на валютную. При переводе UAH конвертируется в USD по текущему курсу. Далее идем на developer.apple.com и регистрируемся. Регистрация в Apple Developer Program простой процесс. Там заполняем нужные поля: имя, фамилия, город и прочее. Внимательно проверяем номер карты, который ввели, а также имя держателя карты. Какую карту потом привязываем к учетной записи? Привязываем нашу валютную карту, вводим имя держателя карты и МФО. Как я буду получать деньги с продаж? Выплаты производятся ежемесячно, если сумма превышает 150$. Если к примеру пришла сумма 140$, то она автоматически переносится на следующий месяц. Когда деньги попадают на карту, приходит SMS. Какие законы я нарушаю? Да вроде бы ничего не нарушаешь Если остались вопросы - спрашивай :)

Вопрос по поводу иконок для Android. [закрыт]

Я уже полдня ищу качественные иконки для лаунчера 512x512, PNG, но для большинства из найденных требуется лицензия, подскажите, кто где берёт иконки для своих приложений?


Ответ

Есть 3 варианта: Купить - сайтов таких полно. Заказать у дизайнера на какой-нибудь фриланс-бирже, правда, при этом надо озаботиться отчуждением авторских прав в вашу пользу, иначе потом дизайнер вам может "выкатить" - уже были прецеденты. Скачать со свободной лицензией, например, на WikiMedia Commons Нарисовать самому не катит: каждый должен заниматься своим делом.

Анализ трафика приложения для Android

Здравствуйте. Мне хотелось бы перехватить интернет-трафик от приложения под Android. Хочется узнать заголовки, содержимое запросов и куда все это отправляется. Все, что нашел в play маркете, либо выдает не то, что нужно, либо не работает. Есть ли способ перехватить запросы?


Ответ

@metalurgus прав, нужен прокси. Если хотите немного облегчить(?) себе задачу, то на вашем аппарате должны быть root-привелегии. Из маркета ставьте SandroProxy, нажимаете на вторую кнопочку и сворачиваете программу. Далее отсылайте необходимые запросы, затем снова откройте SandroProxy (там, кстати, есть веб-морда - можно зайти с ПК и смотреть запросы он-лайн), нажмите на "паузу" и "обновление". Всё, пакеты готовы для анализа. Если есть 2 устройства и они подключены к одной Wifi-сети, то на второе устройство можно установить Wi.Cap PRO (ищите на 4пда) и перехватывать абсолютно весь вайфай-трафик там.

Организация GIT для небольшой команды разработчиков.

Доброго дня всем! В Сети много ссылок на настройку GIT, как локально, так и с онлайн-хранилищами. Но я нигде не нашёл рекомендаций по правильной организации такого хранилища. Итак, имеем небольшую (3-5 человек) команду разработчиков (на C++/Qt). На компьютерах настроена переменная окружения (например, prog_root), внутри которой есть: Папки разработчиков (bill,bob,john), внутри которых каждый разработчик хранит свои программы (папка разработчика является корневой для проектов Qt Creator). Папка include, в которой хранятся заголовочные файлы (и .cpp) для совместно используемых программных модулей. Внутри неё тоже есть папки (common, math, exceptions etc.), в которых хранятся <библиотеки>, относящиеся к соответствующей предметной области. Папка lib, в которую складываются сгенерированные статические библиотеки. Папка build, в которой генерятся исполняемые файлы. Папка doc, в которой хранится документация Прочее. Каждый разработчик пишет как отдельные программы (обменивающиеся информацией по TCP/IP, через разделяемую память, через перенаправление потоков ввода-вывода или ещё как), так и библиотеки, используемые другими программистами. Исходники библиотек хранятся в include и могут включаться в несколько проектов сразу. В настоящее время обмен свежими версиями происходит так: выпустив важное изменение и отладив на своей машине, разработчик говорит остальным: "заберите у меня такой-то файл", те забирают и копируют на свои машины. Иногда, когда отладка возможна только на специфических данных или оборудовании, доступных только на объекте, разработчик едет на объект, отлаживается и привозит обратно отлаженную версию, которую раскидывает себе и предлагает забрать другим разработчикам. Синхронизация версий, например, на рабочем компе и на ноутбуке (поработать на дому) осуществляется собственными силами, нецентрализованно. Разработка кросплатформенная, поэтому у некоторых разработчиков есть копии prog_root под Windows, Linux и QNX. Соответственно, есть желание настроить GIT для того, чтобы свести "размазанную по компьютерам разработчиков" актуальную версию в единое хранилище. Что включать в проект GIT? Если делать по отдельному проекту на программу, библиотеки будут дублироваться, и при переключении на другой проект можно "засосать" устаревшую версию, выложенную при очередном коммите другим разработчиком. Если по проекту GIT на смысловую единицу, то в одну программу будет входить несколько GIT-проектов. Это правильно? Или надо вообще объединить всё в единой единице GIT? Если такая тема где-то уже поднималась, буду рад ссылочке. Если нет - рекомендациям по организации хранилища.


Ответ

Как обычно делают. На каждый проект делается свой проект. Для библиотек - свой. Потом библиотеки подключаются как подмодули к основным проектам. Почему так? Очень часто бывает, что один разработчик пилит библиотеку, а другой использует. И вот разработчик библиотки запилил новый, красивый интерфейс, но сильно не совместимый с старым (это может быть по разному, к примеру, использовалась библиотека не совсем правильно, недокументировано, а в новой версии это прикрыли). Или другой случай, новая библиотека вышла, проекты подтянули для них и через месяц забыли. А потом оказалось, что нужно посмотреть старый-старый код. И что, гадать, какие версии библиотек использовались? Подмодули позволяют коммитить в основной проект версию вложенных проектов и все будет красиво. Более того, разные разработчики могут использовать разные версии (коммиты) библиотеки. В Вашем случае наверное вначале можно сделать просто один подпроект - библиотека, а потом, по мере надобности разделять. Теперь дальше. Для удобной работы с кодом, лучше завести github или bitbucket. Последний хорош тем, что позволяет делать приватные репозитории для небольших групп бесплатно. Если код очень сильно секретный и выложить во внешний мир никак нельзя - поставьте себе личный сервер в офис с установленным gitlab. В интернете гуглиться много готовых инструкций, вот к примеру для ubuntu + gitlab Что хранить в репозиториях. Тут ответ очень прост. Новый разработчик (или старый, который потерял свой комп) должен установить инструменты (компиляторы, ide, git), потом слить репозиторий и начать работать. Отсюда вывод - в репозитории не нужно хранить всякие *.o, *.bak или другие бинарники, которые и так можно сгенерировать. Если наличие некоторых бинарников жизненно важно для начала работы и они могут быть скомпилированы - просто добавьте батник/bash файл/perl/python файл который все сам соберет. Также многие не рекомендуют включать в репозиторий конфиги среды разработки. Они у каждого свои. Но можно добавить "дефолтные" и обновлять их только по общему согласию.

Почему margin-top элемента выпадает из родительского блока?

Добрый день. Подскажите, почему margin-top сдвигает элемент относительно body, а не родительского блока? Живой пример тут


Ответ

@metamorfoza, почитайте вот эту статью: "Схлопывающиеся отступы". После прочтения все должно встать на свои места. Несмотря на загадочность, схлопывание несёт в себе сугубо практическое значение и в первую очередь предназначено для корректного отображения текста. Расстояние между абзацами (тег

) без схлопывания увеличится в два раза, тогда как верхний отступ первого абзаца и нижний отступ последнего абзаца останутся неизменными. Схлопывание гарантирует, что расстояние в абзацах везде будет одинаковым. Чтобы избежать такого поведения, назначьте родительскому блоку свойство overflow: auto Вот ваш исправленный пример

С#: сравнение файла на веб-ресурсе и локальный файл

Есть веб-сайт, на нем ссылка для скачивая файла "А". Есть локальная версия файла А. Как можно их сравнить, чтобы не скачивать файл с интернета?
Есть идея сравнивать контрольные суммы, но для этого файл с инета придется скачать.
Как-то это можно реализовать?


Ответ

Может это поможет? Сравнивать даты. Наткнулся на просторах Интернета. http://www.cyberforum.ru/windows-forms/thread1346241.html