Страницы

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

вторник, 16 июля 2019 г.

Интеграция facebook формы приглашения друзей на сайте

При статическом вызове - отображается нужная форма, но при загрузке через jQuery.load() в консоль пишется requires the "fbml" attribute. Документация от facebook изучена уже вдоль и поперек. Как заставить работать этот скрипт при динамическом отображении на странице???




Ответ

В результате решением стало Fb:serverFbml on Canvas Iframe. Очень неоднозначно, но работает. Если у кого-то есть желание поделится опытом о работе с facebook и его APIs, буду очень рад.

Zoom страницы

В браузерах есть функция Ctrl+колёсико мыши, которая увеличивает или уменьшает страницу, но не все пользователи знают о такой функции. Как с помощью javascript управлять параметрами этого объекта браузера, нажимая на определённый объект на странице?


Ответ

Насколько я знаю, из javascript управлять зумом нельзя, только отслеживать. Как вариант - сделать несколько css файлов и менять их параметр disabled по клику по определенному объекту.

ARM ассемблер - вызов функции

В одном ассемблерном листинге под ядро ARM926EJ-S обнаружил несколько странных для меня вызовов. Весь код отображается по большим адресам: 0x44000000, например. Оперативная память и периферия тоже вся высоко сидит. Но в коде неоднократно встречаются такие команды: LDR R3, =0xE4D BX R3 То есть переход по адресу очень маленькому. Вряд ли это какая-то ошибка или самодурство компилятора. Что же сие может означать? Даташита нема, а опыт общения с армами у меня ещё не настолько велик.


Ответ

LDR имеет различное значение в зависимости от присваиваемых величин. The LDR pseudo-instruction is used for two main purposes: to generate literal constants when an immediate value cannot be moved into a register because it is out of range of the MOV and MVN instructions. to load a program-relative or external address into a register. The address remains valid regardless of where the linker places the AOF area containing the LDR. Список всех команд

Правильная работа с SQLite-базой в Android

Есть готовая БД, лежащая в assets, которая копируется в папку приложения (ну, как обычно, в /data/data/app_name/databases). Создание и копирование происходит во внешнем (обычном new Thread()) потоке при старте приложения. За идею взята эта статья: линк У многих пользователей появляются разные ошибки при старте приложения, а у других все работает. Сдается мне, что описанный подход распространения готовой БД ошибочен, либо содержит неточности, которые нужно знать. Как вариант, есть мысль хранить данные не в базе, а в файле, который при возникновении ошибок снова парсится и заполняется база в методе onCreate() SQLiteOpenHelper Как вы решаете перенос готовой базы в приложение? Как работаете со своей БД? Есть куча туториалов и все как один создают структуру БД в onCreate(), делают апдейт в onUpgrade(), но готовая база распространяется в основном, как описано по ссылке. Ошибки, возникающие при таком подходе (из статьи по ссылке): No such table android_metadata. Правда автор статьи это исправил созданием этой таблице в готовой БД, но подход сомнителен, ибо система сама создает эту таблицу в каждой базе. Теперь вот поймал ошибку такую: Issues На некоторых девайсах было, что при открытом коннекте после вызова getReadableDataBase() валится приложение (например, на HTC Desire).


Ответ

Правильная работа с БД в Android - это наследование SQLiteOpenHelper и переопределение методов onCreate и onUpgrade. В первом мы создаем базу данных. Например, можем распарсить данные и создать бд. Во втором мы обновляем базу, удаляя ею старую версию. Когда мы получаем объект БД и в дальнейшем вызываем getReadableDatabase()/ getWritableDatabase() вызывается наш метод onCreate() и если база не создана, она будет создана вновь. Можно также переопределить и эти методы. Но обычно так не делается. Все выше изложенное из моей практики.

Вход в систему с помощью OpenID в Android-приложении

Я могу зайти в приложение по Google Open ID (на сервере поддержка реализована, работоспособна). Клиент работает на платформе Android. Вход в систему происходит таким образом: спрашиваем у сервера уникальный URI, по которому следует проследовать пользователю, и посылаем на этот URI запрос. Если пользователь в данной системе уже выполнил вход в Google Account, то открывается сессия для этого пользователя (в это время клиент проверяет появление текущей сессии). Иначе пользователю предоставляется страница входа в Google Account. Я пытаюсь реализовать это с помощью WebView таким образом: WebView web = new WebView(context); web.loadUrl(uniqUrlFromServer); В итоге происходит что-то непонятное. На эмуляторе WebView открывает нужную страницу, но когда я ввожу имя и пароль и нажимаю "Sign In", то входа в Google Account не происходит, вместо этого открывается браузер (отдельное приложение). На устройстве WebView не открывает первоначальный URI вообще. URI для OpenID, конечно, не простой: HTTPS, с параметрами, с редиректами.


Ответ

Я думаю, Вам нужно попробовать переопределить клиент для WebView. Примерно так:
webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { }
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { }
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { }
@Override public void onPageFinished(WebView view, String url) { }
});
И уже в этих методах реагировать при разборе URL как угодно. Дока по WebView. Ну и может поможет - StackOverflow. Также, можно попробовать либу ответом выше.

Скорость операций mysql

Известно, что если на поле, по которому часто делать SELECT повесить индекс типа INDEX, то выборка из базы будет происходить в разы быстрее. Но так же на форумах пишут, что вместе с этим увеличивается время INSERT, UPDATE запросов, т.к. необходимо обновлять индекс. Это все понятно и претензий нет. :) Вопрос в том, увеличивается ли время INSERT, UPDATE запросов, если поле, на котором установлен индекс типа INDEX, в процессе этих запросов не изменяется? P.S. Надеюсь, суть вопроса понятна :)


Ответ

Да, потому что индекс - это не одно поле, а связка полей. Если хоть что-то в связке меняется, индекс обновляется. То что в квартире 123 живет теперь не Иванов, а Петров заставит изменить кучу документов. Правда для большинства проектов разница незначительна. Проверить легко: создайте таблицу с 10к записями. И посмотрите среднее время указанных операций при одном/двум/трем индексами

Картинка вместо стандартного кружка в input radio

Гуглил долго и нудно, нашел один пример, но такой запутанный и сложный, что бросил его. Подскажите, как вместо стандартного кружка с точкой поставить свою картинку?


Ответ

Делается через , при клике заменяется src="active.gif", картинки рисовать какие хочется уже.

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

День добрый, уважаемые! Есть несколько приложений, каждое из которых обращается к веб-сервису, забирает из него данные и обрабатывает. Обращаться надо периодически (данные меняются с течением дня, представьте, что это курс валюты с сайта ЦБ). Вопрос: как синхронизовать приложения так, чтобы они не сохранили нужные данные дважды? Разрешить обращаться к сервису только одному приложению нельзя. Если бы был только один клиент, я бы сделал так: забирал бы данные, сохранял бы их в базу и кэш базы, при очередном обращении проверял нет ли уже таких данных. Но ситуация сложнее. Сохранять данные в общей БД можно, но т.к. синхронизации нет, то нет гарантии, что клиенты не запустятся одновременно и одновременно занесут в БД одно и то же значение курса (за 15:00, например). Какие я вижу варианты: Как-то залочить БД пока выполняется один из клиентов. Наподобие lock или synchronized в Джаве. Это можно сделать? Грузить все в одну таблицу запросом вида insert if unique, а потом считывать оттуда. В принципе нормальный вариант, хотя, мне кажется, более ресурсозатратный, чем первый. Сохранять в таблице индекс следующего клиента, чтобы остальные не запускались одновременно (то есть разнести их по времени). Что скажете?


Ответ

А кто мешает сделать так. Делаем одно приложение, которое знает, когда и как можно обращаться к внешнему сервису, как читать и писать. А все Ваши сервисы подключаются к этому приложению. А оно либо отдает с кеша, либо делает запрос и отдает. Эта схема решит много вопросов - синхронизацию, актуальность данных, отладку. А также, представьте, что внешний сервис поменял АПИ/адрес. При правильном подходе, все приложения даже не заметят, что внешний сервис изменился/упал/прислал заведомо неверные данные.

Массив маркеров и InfoWindow (API V3)

В документации по картам гугл описывается пример открытия одного инфоокон для одного маркера: var infowindow = new google.maps.InfoWindow({ content: contentString });
var marker = new google.maps.Marker({ position: myLatlng, map: map, title:"Uluru (Ayers Rock)" });
google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); Мне нужно завести на карту много маркеров, чтобы у каждого было свое инфоокно с данными из моего заранее подготовленного массива. Однако, простая замена переменных marker, infowindow на массивы marker[], infowindow[] в цикле - нужного результата не дала. По щелчку на любом маркере вылетает инфоокно последнего поставленного маркера. Подскажите, где искать ошибку или пример под такую задачу.


Ответ

Мой рейтинг вырос, поэтому появилась возможность ответить самому себе. Итак: var marker = new google.maps.Marker({ position: myCenter, map: map, title: 'Объект: '+devices[i][1], icon:image }); // devices[] - это заранее подготовленный массив с полной информацией по каждому объекту, i - счетчик в цикле, остальные переменные также определены изначально mArray.push(marker); mArray[i].setMap(map); // маркеры храню для выборочной обработки (необязательно) makeInfoWin(marker, html); // html - заранее подгогтовленный текст в виде хтмл-разметки, который будет выведен в текущем инфоокне } } function makeInfoWin(marker, data) { var infowindow = new google.maps.InfoWindow({ content: data }); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } API v.3

Реализация контроллера в шаблоне MVC

Могу ли я реализовать в своём контроллере событие? Где я должен буду подписать другой/другие контролеры на это событие? Противоречит ли это самому шаблону?


Ответ

Все контроллеры внутри приложения унаследовать от ControllerBase класса, внутри него создать статический dispatcher, невидимый в классах наследниках, наружу оставить видимые методы для подписки и отписки слушателей + отправка событий. пример кода, отсюда, очень советую почитать код не проверялся, используйте как набросок class ControllerBase { public delegate void AlarmEventHandler(object sender, EventArgs e); public static event AlarmEventHandler Alarm;
public void addEventListener(EventListenerClass c) { AlarmEventHandler aeh = new AlarmEventHandler(c.eventListenerMethod); saveAlarmEventHandler(aeh); // Save Alarm += aeh; }
public void removeEventListener(EventListenerClass c) { AlarmEventHandler aeh = getAlarmEventHandler(c.eventListenerMethod); // Get Alarm -= aeh; }
public void OnEvent(AlarmEventArgs e) { AlarmEventHandler handler = Alarm; if (handler != null) { // Invokes the delegates. handler(this, e); } }
} помните, если контроллер динамический, то он должен сам "чистить" слушатели при удалении и еще, то что все контроллеры "видят" глобальные события, есть очень не гуд, можно долго рассказывать, но это существенный подводный камень, как вариант делают некий глобальный контекст который сам диспетчеризует все события и дает их видеть только нужным контроллерам

Обработка исключений

var Form1: TForm1; a,b,c,x1,x2,d: real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit1.Text) ; c:=StrToFloat(Edit1.Text) ; d:=sqr(b)-4*a*c; if d>0 then begin try x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); except on EzeroDivide do MessageDLG('Ділення на 0!',mtInformation,[mbOK],0); end; ShowMessage('x1='+FloatToStr(x1)+',x2='+FloatToStr(x2)); end else if d=0 then begin try x1:=(-b)/(2*a); //здесь вылетает ошибка Invalid floating point operation
except on EzeroDivide do MessageDLG('Ділення на 0!',mtInformation,[mbOK],0); end; ShowMessage('x='+FloatToStr(x1)); end else if d<0 then begin try x1:=(-b+sqrt(abs(d)))/(2*a); x2:=(-b-sqrt(abs(d)))/(2*a); except on EzeroDivide do MessageDLG('Ділення на 0!',mtInformation,[mbOK],0); end; ShowMessage('x1='+FloatToStr(x1)+',x2='+FloatToStr(x2)); end
end; end. Так вот, подскажите, пожалуйста, что не так и как с этим бороться?


Ответ

Try ... Except Не работают под IDE то есть, если открыта Delphi то будет вылетать ошибка, а возьмите запустите программу не из Delphi и вылетать ошибка не будет.

Поворот плоскости в пространстве

Всем привет. Это сюжетное продолжение вопроса, язык также не принципиален.
Есть плоскость - проекция мира("камера"), задана точкой PP:{x,y,z} и нормалью PV:{x,y,z}. Абсолютный рандом.
Все точки(массив) - тоже P[N]:{x,y,z}. Точки заведомо принадлежат плоскости.
Ситуация: мир готов, спроецирован на камеру и ожидает показа. Нужно только выдрать с камеры 2Д-координаты относительно PP.
Суть вопроса: как повернуть плоскость(т.е. массив), чтобы PP совпала с {0,0,0}, а сама плоскость с OXY? Перетащить плоскость могу сам, квест - повернуть.
Мои мысли:
по матрицам поворота (некоммутативность поворота мне не обломает всю малину?) как-то исходя из вектора P[N]-PP (мысль бьется в голову, но не оформляется) я уверен, что есть простое решение) Я явно где-то туплю =) Хотя есть подозрение, что это очередная глобальная проблема движков.
Если задача (вытащить координаты) проще решается другим способом, я не расстроюсь)
ЗЫ: очень прошу, как можно меньше матриц


Ответ

В общем случае для камеры не хватает третьего вектора, т.к. существует бесконечное множеcтво векторов, ортогональных PV. Поэтому необходим третий вектор PU - обычно указывающий вверх относительно камеры. Поворот мира относительно камеры (вид камеры) определяется (в правосторонней системе координат, векторах-строках) как: l = PV; r = PU x l; // подразумевается векторное умножение u = PU;
// так называемая LookAt матрица
( rx, ux, lx, 0 ) ( ry, uy, ly, 0 ) v_view = v * ( rz, uz, lz, 0 ) ( -dot(r, PP), -dot(u, PP), -dot(l, PP), 1 ) где вектор v - изначальное положение точки в мире, v_view - положение точки если смотреть на неё из камеры. Подразумевается, что вектора PV и PU имеют длину, равную 1. Линейные преобразования (хотя в данном случае аффинные) удобнее всего описывать именно матрицей, т.к. это представление всегда существуют для любого такого преобразования, да и работать с ними удобно. UPD: Отвечаю на комментарий о применении матриц к векторам. Данная тема входит в курс линейной алгебры, однако можно почитать об этом отдельно: Умножение матриц Вектор в 3D обычно (но не всегда) это матрица-строка размера 1x4 вида (X, Y, Z, 1). Четвёртый компонент-единица необходим для однородности координат; это позволяет умножением на матрицу сдвигать вектор на некоторый другой. Рассмотрим пример: пусть есть вектор h = (hx, hy, hz). Тогда после умножения на указанную выше матрицу A результатом преобразования будет: h_view = h * A = (h_view_x, h_view_y, h_view_z, 1) // четвёртая компонента в данном случае не важна // и после умножения остаётся равной 1
h_view_x = hx * rx + hy * ry + hz * rz - dot(r, PP) // новый X h_view_y = hx * ux + hy * uy + hz * rz - dot(u, PP) // новый Y h_view_z = hx * lx + hy * ly + hz * lz - dot(l, PP) // новый Z

Как заставить WCF не подменять SecurityException

Столкнулся с такой проблемой. Если я на сервере, внутри метода службы бросаю SecurityException с сообщением, которое хочу отобразить пользователю на клиенте, это исключение заменяется на FaultException с сообщением "Отказано в доступе". Причём в таком виде оно доходит не только до клиента, но уже до реализации IErrorHandler, подсунутой хосту. Если бросить не SecurityException, а его наследника - результат тот же самый. Понятно, что можно бросать другой тип исключения, объявленный в контракте сбоев, но если по семантике это SecurityException, такое решение не вполне корректно.


Ответ

Чтобы объект типа SecurityException пробрасывался на сторону клиента его нужно прописать в интерфейсе контракта при помощи атрибута FaultContractAttribute
[ServiceContract] public interface IServiceContract { [OperationContract] [FaultContractAttribute(typeof(SecurityException))] void CallMethod(); }

Функция с неопределенным кол-вом аргументов-ссылок

Собственно сабж, писал тут функцию рекурсивной stripslashes, подумалось, что неплохо было бы записать ее одним вызовом. Но: если аргумент один, все нормально function a(&$link) { $link = 'a'; } Если больше, начинаются проблемы: function upcase() { $args = &func_get_args(); foreach ($args as &$arg) $arg = strtoupper($arg); } $a = $b = $c = 'lol'; upcase(&$a, $b, $c); // &$a выдаст ворнинг, в большинстве случаев allow_call_pass_time_reference выключен. Но и в обратном случае не отработает) var_dump($a, $b, $c); // 'lol', 'lol', 'lol'... Пока нашел такое решение: function upcase(&$args) { if (is_array($args)) { foreach ($args as &$arg) upcase($arg); } else $args = strtoupper($args); } upcase($a = array(&$_GET, &$_POST, &$_REQUEST)); var_dump($_GET); Но по-моему решение грязное и пошлое. Есть предложения?


Ответ

Пара часов гугления дали такой результат. Он не идеален, но работоспособен) '; /* вариант 2 - почти не хак, но чуть менее удобен и сильно более затратен в техническом плане(все копируется дважды) + абсолютно прозрачен */ function upcase2() { $result = array(); foreach (func_get_args() as $arg) $result[] = strtoupper($arg); return $result; } $a = $b = $c = 'lol'; list($a, $b, $c) = upcase2($a, $b, $c); var_dump($a, $b, $c); /* Результат работы: string(3) "LOL" string(3) "LOL" string(3) "LOL" string(3) "LOL" string(3) "LOL" string(3) "LOL"
*/ ?>

Вопросы по SEO

Приветствую. Стоит ли добавлять сайт в поисковики,каталоги и тп, если ещё сайт постоянно обновляется и иногда становится недоступным? Если можно - то как это повлияет на саму индексацию? Многие поисковики ( особенно наш Яшка и многие русские ) индексируют по огромному количеству времени. Тот же Яндекс может почти месяц индексировать сайт. Что за это время можно сделать для "укрепления позиций" и стоит ли делать это вообще? Слышал что вредно кидать сайт уже заполненный материалами и будет правильней кинуть сайт с парой страниц и потом его активно обновлять и добавлять материалы. Это так? Ещё слышал что не стоит забивать сайт материалами очень быстро (т.е. по 100 в день) а лучше периодично небольшой массой в промежутке 1-2 дней. Типа как спам поисковики воспринимают =). Это так? Значит закроем глаза и представим что есть сайт...Домен приобретён не давно...В индексацию не где ещё не падал...Делается движок и дизайн...Скиньте какую нибудь хорошую статью или сами объясните поэтапно как его можно поднять в поиске и вообще "раскрутить". Часто вижу такую фишку что сайт стоит уже 2-3 года без дела и нечего на нём не происходит...И он в топе или вообще первый. А другой сайт который также по тому же запросу каждый день обновляется находится ниже. От чего такая "несправедливость"? ps. Да искал я в интернете - только каждый своё говорит : либо противоречащие другим людям либо откровенный бред либо еще - "Кидайте ссылку на сайт куда только можно!" pps. Заранее Спасибо :DDD.


Ответ

Стоит добавлять в ограниченное количество редактируемых каталогов, типа DMOZ, Яндекс.Каталог и т.п. Лучше, конечно, подождать когда сайт будет работать стабильно, иначе есть вероятность, что редакторы посетят ресурс именно тогда, когда он будет недоступен. - Для поисковой машины не имеет значения начальное количество документов, но имеет значение частота обновления сайта (как часто появляются новые документы), поэтому есть смысл добавлять понемногу. Вполне можно не только по 100, но и по 1000 ежедневно. Типичный пример - сам форум ХэшКод. Здесь ежедневно по 50 новых тем добавляется. И все отлично индексируется и ранжируется. В конечном счете все сводится 1) к контекстной рекламе, 2) ценности информации (товаров, услуг), предлагаемой на сайте. Различные творческие методы (вирусная реклама, конкурсы и акции) по своим затратам (продумывание, разработка, осуществление) не дешевле прямой рекламы. Если информация ценна, целевой посетитель придет. Один сайт может иметь преимущество над другим, если 1) на него ссылается большее количество более авторитетных тематических ресурсов, 2) текст заголовка и содержание страницы в больше степени соответствуют запросу, 3) текст ссылок на ресурс более подходит по запросу.

Как импортировать System.Collections.Generic.IList?

Обычный non-generic IList я могу подключить так: using IList = System.Collections.IList; Вопрос: как аналогичным способом подключить generic IList?


Ответ

Судя по всему, в общем виде - никак, только с конкретными уже подставленными типами. Откуда я сделал такой вывод (MSDN)

Рекурсия и переполнение стека

занимаюсь разработкой JAVA программы в среде Eclipse, не столько ради программы, как ради опыта (хотя программу тоже нужно, так как курсовая) причиной обращения к профессионалам на форуме, есть ошибка java.lang.StackOverflowError - переполнение стека. ситуация, в которой возникает ошибка следующая: в первом класе ClInitVisualElements хендлер для кнопки btnOperationPoint.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0){ screenManagement.AddPoint(); }}); вызывает метод AddPoint(); второго класса ClScreenManagementOperations public void AddPoint() { if (!bPointIn) visualLink.AddToLastPosition("."); } AddPoint в свою очередь выполняет проверку на наличие запятой в строке и затем выполняет вызов метода первого класса (bPointIn - переменная булевого типа) AddToLastPosition(); - метод первого класса, с которого выполнялся вызов AddPoint() public void AddToLastPosition(String Text) { String StrTemp = TfDisplayOperation.getText(); TfDisplayOperation.setText(StrTemp+Text); } тут и без ошибки понятно что рекурсия присутствует, но единичная - это последовательный вызов трех методов между двумя классами, почему то возникает дофига ошибок, которые указывают на две строки кода: ClScreenManagementOperations screenManagement = new ClScreenManagementOperations(); ссылка в первом классе на второй ClInitVisualElements visualLink = new ClInitVisualElements(); ссылка во втором классе на первый подскажите пожалуйста каким образом можно решить проблему. заранее благодарен


Ответ

Надо создавать экземпляры классов отдельно, а потом из одного в другой проставлять ссылку. Или вообще снаружи, а потом обоим сообщать ссылки на обоих. Например, как-то так class ClInitVisualElements { private ClScreenManagementOperations screenManager;
public void setScreenManager(ClScreenManagementOperations manager) { screenManager = manager; }
}
class ClScreenManagementOperations { private ClInitVisualElements visualElements;
public void setVisualElement(ClInitVisualElements elements) { visualElements = elements; }
}
class Main { public static void main(String[] args) { ClInitVisualElements elements = new ClInitVisualElements(); ClScreenManagementOperations manager = new ClScreenManagementOperations();
elements.setScreenManager(manager); manager.setVisualElements(elements); }
}

Как происходит работа распределенного приложения?

Допустим есть большой и сложный проект, который будет в то же время высоконагруженным. Ненужно быть папой Карло, чтоб понять что 1 сервер его не потянет. Вопрос собственно вот в чём: как быть в такой ситуации? Попробую сам частично ответить на свой же вопрос и попрошу вас либо всё перечеркнуть, либо поправить. Приложение буду называть системой. Понятно как систему разбить на 2 части. На одной машине ставим сервер БД (в данном конкретном случае пусть это будет бесплатный MySQL Server). На другой - web-сервер (Пусть для наглядности Apache с подключенным модулем php), на котором будет исполняться сам код. Но что делать если сервер должен будет принимать по 10000 запросов каждую секунду. Понятно, что код надо оптимизировать. В БД по-хорошему работать с хранимыми процедурами, разумеется должно быть кэширование и т.д. Как быть, что делать, куда копать если нужно сделать так чтоб один исходный код выполнялся на нескольких машинах? И как быть, если сервер БД не справляется и нужно сделать так, чтобы один источник данных обрабатывало несколько серверов БД? Понимаю, что в ответ можно книгу написать и не одну, но буду безмерно благодарен хотя более-менее развернутому ответу.


Ответ

Читаем про memcache (и про его кластеризацию), GFS, кластеризация MYSQL. Так же, читаем про организацию livejournal - http://www.livejournal.com/doc/server/ Так же, можно обратить внимание на CDN технологию. Почитайте про eAccelerator и xCache (для кэша запиленного в байт-код PHP)..... Обязательно прочтите принцип работы nginx и apache (apache - backend; nginx - frontend ). Ну и , наверное, самое основное - откажитесь от прямой верстки HTML кода.

Алгоритм построения набора ломаных из набора отрезков

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


Ответ

Создаем по отрезкам матрицу смежности. В цикле по вершинам определяем к какой компоненте графа относится каждая вершина, совершая обход для каждой из ранее не пройденных вершин. Тут решение. Оптимальность здесь на ваш вкус. Можно вероятно и оптимальнее, но без обхода никак, и без поиска вершин среди других отрезков тоже. имхо, годный вариант.

Как получить путь к dll?

В dll пишу следующий код: var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config\Settings.xml"); AppDomain.CurrentDomain.BaseDirectory возврощает путь кем была загружена dll, т.е. к .exe файлу. Как можно получить путь, где лежит dll, а не путь того кто эту dll вызвал?


Ответ

Нашел Assembly.GetExecutingAssembly().Location

DirectoryServices два действующих пароля

Здравствуйте, разработчики! Пишу небольшую утилиту (web-based), которая позволяет пользователю сменить его пароль в Active Directory и еще несколько вкусностей. Пользуюсь следующим кодом, для версии .net 3.5 public static string ChPassword(string domain, string container, string userName, string oldPassword, string newPassword) { PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domain, container, "admin", "password"); UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, userName); if (user == null) throw(new Exception("User Not Found In This Domain"));
user.SetPassword(newPassword); user.Save(principalContext); return user.Name; } Собственно смена пароля работает, только после этой самой смены, работают оба пароля, и старый, и новый. Что для меня, в общем-то, странно. Может, кто-то работал с данными библиотеками? Подскажите, пожалуйста, best-practices для решения моей проблемы. Спасибо.


Ответ

Вы далеко не первый кто с этим столкнулся :-) Такое поведение связано с особенностями работы AD и Kerberos. В лучшем случае, старый пароль через некоторое время перестанет работать. Также, если пользователь входил в систему на какой-либо рабочей станции, там пароль кэшируется и в течение некоторого времени может быть использован для входа даже после изменения пароля в каталоге. Вот подробное описание, почему так происходит

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

Задача: пользователь вводит домен и ключевые слова, после чего ему выдается таблица позиций в поисковой выдаче гугла и яндекса по данным ключевым словам. Подскажите, пожалуйста, как это возможно реализовать. Код не нужен, просто схематично объясните. Готовые сервисы тоже не интересуют:)


Ответ

Можно реализовать с помощью Google Search API и Yandex XML. Примерная схема скрипта: Отправляем поисковику запрос с выбранными ключевыми словами; Парсим ответ поисковика, считая каждый сайт в выдаче; Найдя нужный сайт, выводим об этом сообщение и высчитанную позицию сайта. Есть нюанс: максимальное количество найденных Google'ом сайтов в выдаче - 64, а Yandex'ом, кажется, 500.

Как использовать языки, которые не поддерживаются официально в “windows phone”?

Доброго времени суток, Хэшкод. Насколько я понял, сейчас в WP7 язык приложения по умолчанию подстраивается под язык в настройках (регион + язык -> язык интерфейса) Статей по данной тематике довольно много, и все довольно просто. Но существует проблема. WP7 поддерживает не так уж много языков, а у меня например есть необходимость использовать языки, которые не входят в список поддерживаемых. Попробовал было установить язык напрямую: Thread.CurrentThread.CurrentCulture = new CultureInfo("ыы-ЫЫ"); // ыы-ЫЫ - аббревиатура никому не известного языка Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; Однако так сделать не получилось, т.к. на неизвестные языки программа ругается. С известными все проходит. Как можно использовать такие языки? Есть у кого идеи? [обновлено 10.09.2012] Так, более актуальный вопрос: Я тут внезапно заметил, что после смены языка требуется перезагрузка ОС. Это вообще нормально? И можно ли как-то эту фигню обойти?


Ответ

Вариант решения описан здесь: Localization with an unsupported language На первый взгляд - работает. Как проверю свой вариант, отпишусь о результатах. Сделал, действительно работает, хотя подводных камней довольно много. Как будет время - распишу решение подробно. Итак: Возможности для выстрела в ногу (обратить внимание тем, кто сначала написал в стиле, рекомендованном Майкрософт(как я), а потом вынужден будет реализовывать новый язык. Все обращения к ресурсам придется переписывать. Это печально. Поехали): В классе LocalizedResources.cs путь к ресурс-менеджеру описывается в стиле: _rman = new global::System.Resources.ResourceManager("AppName.Folder.ResourcesApp", typeof(ResourcesApp).Assembly); для известных языков где: AppName - имя приложения Folder - папка, в которой лежат ресурсы. У меня это была папка Resources. Если в корне - соответственно ничего не пишем. ResourcesApp - то, как называются наши файлы для известных языков. В примере он один и называется Resource(для английского). Т.е. для английского это будет Resource.resx или Resource.en-US.resx или Resource.en-UK.resx, для русского Resource.ru-RU.resx и.т.п. Постфикс(а.к.а ru-RU) не имеет значения, нужный язык потом выберется через метод SwitchCulture для неизвестных соответственно используется перегруженный метод SwitchCulture public void SwitchCulture(string UnsupportedCulture) { _rman = new global::System.Resources.ResourceManager("App.Resources.XXX" + UnsupportedCulture, typeof(ResourcesApp).Assembly); } где XXX это то, как полностью называется файл с ресурсами для неизвестного языка. В примере эти файлы называются Resource_Klingon.resx и Resource_Vulcan.resx. // там должно быть подчеркивание между словами, почему-то не отображается У меня было соответственно ResourcesApp.LanguageName.resx Т.е. в примере путь выглядел, как "PhoneApp1.Resource_", в моем случае "App.Resources.ResourcesApp." Для обращения к ресурсам используется метод Get. Соответственно все обращения в стиле: Resources.resourceName придется заменить на LocalizedResources.Resources.Get("resourceName") Аналогичная ситуация со связыванием через Binding. Вместо обращений, типа: "{Binding Path=LocalizedResources.someName, Source={StaticResource LocalizedStrings}}" используются {"Binding Source={StaticResource LocalizedStrings}, Converter={StaticResource LocalizedStrings}, ConverterParameter=someName}"

Есть ли в php указатели?

Возможно ли в php реализовать указатели(ссылки) на данные? В данном случае в сессию пишется значение, а не указатель.


Ответ

Были раньше. Сейчас уже deprecated вроде; А вот по Вашему коду: function foo(&$boo){ $_SESSION['boo']=$boo; } В данном случае в сессию пишется значение, а не указатель. WAT? $_SESSION['boo']=&$boo; Разве нет? И ответ как раз будет: int 2 int 2

Где стажироваться? [закрыт]

Изучаю веб-программирование на локальной машине с сервером Apache. (js,php). Но литература более теоретическая нежели практическая. Подскажите, где можно постажироваться, пусть даже бесплатно. А то получается - знаешь дофига теории, а просматриваешь готовые сайты - офигеваешь.


Ответ

Ну если "пусть даже бесплатно" то выберите для себя какой-нибудь понравившийся сайт. За примером далеко ходить не нужно. Вот сайт hashcode.ru например. Возьмите и напишите аналог. Можно без каких либо функций. Например без рейтинга или без дизайна вообще. Зависит от того, что вы хотите прокачать. Если хотите прокачать php то не заморачивайтесь над красотой. Напишите просто функции/классы/методы, которые Вам нравятся на этом сайте. Сделайте обычный вывод на страницу с помощью echo/print и всё. Затем вы возможно захотите прокачать дизайнерские навыки или может быть навыки верстки. Пожалуйста. У Вас уже будет готов аналог hashcode вот на нем и практикуйтесь. Не нравится hashcode.ru найдите то, что Вам понравится. Либо если Вам кажется, что это сложно то найдите, что-то попроще. А потом можно и на фриланс податься. Брать простые задачки на php. У Вас уже будет небольшой опыт. Там тоже можно попрактиковаться. Причем еще и денежку срубить за это :)

Поиск кратчайшего пути в 0-1 графе

Здравствуйте. В статье про bfs сказано, что Нахождение кратчайшего пути в 0-1-графе (т.е. графе взвешенном, но с весами равными только 0 либо 1): достаточно немного модифицировать поиск в ширину: если текущее ребро нулевого веса, и происходит улучшение расстояния до какой-то вершины, то эту вершину добавляем не в конец, а в начало очереди. Как проверить улучшение расстояние до какой-то вершины за рациональную асимптотику, и как дальше с этим работать, ведь та вершина, расстояние до которой улучшилось могла быть "подожжена" чуть ли не в самом начале, а тогда придется проходить все заново. UPDATE Пытался пойти путём другой статьи. Возникает вопрос: если есть ребра из вершины 1-2(вес 1) и 1-3(вес 0) и 3-2(вес 0) и 2-1(вес 0) то алгоритм от вершины 1 поставит dist2 = 1; dist[3] = 0; а от 3 к 2 перейти не сможет, т.к. она использована. Что делать?


Ответ

В этой модификации алгоритма не нужно использовать массив used. Для каждого ребра нужно проверять не нашелся ли путь лучше, чем тот, который уже найден для конечной вершины ребра. И если новый путь лучше, добавлять вершину в начало/конец очереди в зависимости от стоимости ребра. Нетрудно показать, что в любой момент времени в очереди могут находиться только вершины, расстояние до которых равно x и, возможно, x+1. Причем все вершины с расстоянием x идут раньше всех вершин с расстоянием x+1. Из этого следует, что любая вершина попадет в очередь не более двух раз. Доказательство: если при первом попадании в очередь, в очереди не осталось вершин с меньшим расстоянием, то добавленная вершина еще раз в очередь не попадет, так как не осталось вершин, способных срелаксировать расстояние до нее. Если же в очереди еще остались вершины с расстоянием меньшим на 1, то они смогут улучшить расстояние до добавляемой только 1 раз и тогда она попадет в очередь второй раз. Таким образом сохранится асимптотика O(N + M).

Как убрать сдвиг сайта при появлении полосы прокрутки?

сабж. При появлении полосы сайт сдвигается влево на несколько пикселей. как убрать этот эффект? чтобы внезависимости от наличия/отсутствия полосы сайт был всегда на 1 месте.


Ответ

сделай полосу прокрутки видимой всегда, подругому никак. либо наоборот ее убрать визуально. читай про overflow

Вызов новой функции из подключаемого .js файла

Здравствуйте! Часть страницы админки приходится обновлять посредством ajax, в том числе бывает, что добавляются новые функции javascript при таком обновлении. Но почему-то попытки их вызвать приводят к ошибке undefined. Если эти же функции прописать сразу в код страницы, то они вызываются нормально. Но функции надо формировать динамически. Не подскажете, что можно сделать, чтобы они вызывались?


Ответ

Но почему-то попытки их вызвать приводят к ошибке undefined. Если эти же функции прописать сразу в код страницы, то они вызываются нормально. Здесь может только и только одна проблема - ОБЛАСТЬ ВИДИМОСТИ Если эти функции прописать в код - скорее всего вы прописываете их в ту же область видимость и следовательно они будут доступны оттуда на прямую. "Чтобы они вызывались", нужно прежде всего: 1) Убедится на все 100% что файл который подключается "динамически", дейтсвительно подключился и не содержит синктаксических ошибок, которые могут вызывать фатальную отсановку скрипта. Это просто, для этого, запишите что-нибудь в тот файл и вызовите ( = стэнд алон тест), например вот так: Файл: test.js alert('OK. Works'); // все остальное.... внизу Основной файл: Если после включения выведет алерт, то значит проблем с подключением скрипта не было. Если не выведет - то вы все правильно поняли - не может по каким-то причинам подключить скрипт. Но функции надо формировать динамически. Если под "формировать" вы имеете ввиду создавать, а не подключать, то это просто УЖАС. И если это все еще генерируется через серверный язык... О_о Предназначения функций/классов нужно строго разделять. Одна функция не должна делать/знать много, она должна выполнять конкретно ОДНУ поставленную задачу. Золотое правило хорошего кода Не миксуйте JavaScript с HTML Не миксуйте JavaScript c серверным языком, таким так PHP, Python итд На заметку: Подобные проблемы (с областью видимости в том числе) будут возникать и в дальшейнем, до тех пор пока вы не: Почитаете что такое SOLID принципы MVC/Dependecy Injection (P.S это также касается JS, не только PHP) В хорошо оформленном веб-приложении передача данных происходит, не "создаванием" динамически, а передачей переменных через XML/JSON посредством AJAX Возращаясь к вопросу Посколько в вопросе нет примеров/сэмлов кода, то придется отвечать аналогично - догадываясь в предположениях. 1) Протестируйте что файл действительно включается 2) Убедитесь что эти функции - они глобальные, а не приватные методы класса.

Entity Framework (many to many)

public partial class ALBUMS { public ALBUMS() { this.PHOTOS = new HashSet(); }
public int ID_ALBUM { get; set; } public string NAME { get; set; }
public virtual ICollection PHOTOS { get; set; } }
public partial class PHOTOS { public PHOTOS() { this.ALBUMS = new HashSet(); }
public int ID_PHOTO { get; set; } public string PATH { get; set; }
public virtual ICollection ALBUMS { get; set; } } Вставляю новую фотографию так но хотелось бы сразу её добавлять в альбом, как это сделать? PHOTOS photo = new PHOTOS(); photo.PATH = filename; ALBUMS album = GetAlbum(idAlbum); album.PHOTOS.Add(photo); photo.ALBUMS.Add(album); GaleryEntities.PHOTOS.Add(photo); GaleryEntities.SaveChanges(); Не удалось обновить набор EntitySet "PHOTO-ALBUM", поскольку в нем имеется запрос DefiningQuery и отсутствует элемент в элементе для поддержки текущей операции.


Ответ

В таблице связке должен был быть составной первичный ключ из id_photo и id_album.

Возможно регулировать размер кэша у карт Google в своем приложении?

Доброго времени суток! Задался вопросом, а можно ли регулировать размер кэша карт, когда они используются в приложении? Допустим пользователю не очень удобно, когда карты каждый раз загружаются. А так же возможно ли использовать карты Google оффлайн?


Ответ

Нет, нельзя. за год поисков так ничего и не нашлось.

Отображение нескольких изображений как в приложении Vk для iOS

Как расставить картинки в я ячейке NSTableView таким образом:
Есть ли уже готовая библиотека/объект/что-то иное для этого, или придётся высчитывать их положение?


Ответ

Посмотрите что больше Вам подойдет https://github.com/Lascorbe/LAAnimatedGrid https://github.com/AlvinNutbeij/DWGridController https://github.com/bryceredd/RFQuiltLayout https://github.com/aceisScope/WaterflowView https://github.com/norsez/BDDynamicGridViewController

Реализовать диалоги: показывать последние сообщения сверху

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


Ответ

После долгого сеанса воображения я понял, что имеется ввиду. SELECT messages FROM table_name ORDER BY status ASC Или DESC вместо ASC - это смотря, каким числом помечаются прочитанные сообщения. Если 0, то DESC, чтобы те, у которых 1 были сверху по списку.

Можно ли на ProgressBar'е что нибудь написать?

Есть такая задачка: ProgressBar показывает линию загрузки(статичная) и сверху него же написать его значение?


Ответ

Наследуй ProgressBar, переопределяй метод onDraw() и пиши/рисуй все что душе угодно. пример

Создание аннотации в выдаче поискового запроса при отсутствии тега description

У многих страниц при парсинге, отсутствует тег description. Здесь написано, что при отсутствии, тега description поисковые системы берут отдельный отрывок. Не до конца понятно, по-какому принципу отбирается аннотация к сайту. К примеру, если выбирать самый первый встречающийся тег

может попасться не то описание. У википедии нет тега description, хотя Google в таком случае выдает по запросу python правильный абзац. Можно ли это как-то сделать при помощи парсера или регулярок ?


Ответ

Думаю вы не дочитали описание meta-тега description: При отсутствии тега поисковые системы выдают в аннотации первую строку документа или отрывок, содержащий ключевые слова. То есть поисковик берет первый отрывок содержащий ключевое слово заданное в поиске

Wofstream при попытки записи кирилицы обрывает поток

Написал приложение на Visual C++ 2010 express. Выяснилось что в выходной файл также должны писаться и кирилица. Файл должен быть в кодировки utf-8. Заменил ofstream на owstream. И если раньше просто выходила неверная кодировка, то теперь при попытки записать строку содержащую кирилицу. Поток обрывается на начале кирилице. (Файл XML) Посоветуйте как правильно работать с кирилицей. Вот куски кода. ... wofstream xml; ... xml.open("output.xml"); ... xml << "path=\""<< fname <<"\" "; // < тут происходит обрыв потока... например строку вида "D:\backup\section один" пишет в файл как D:\backup\section и все дальше в файл ничего не попадает. ... Попробовал следующий упрощенный вариант... результат тот же, пишет только латиницу. #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { wofstream xml; wstring s0 = L"example cyrilic and latin text Кириллица и латинский текст"; xml.open("output.txt"); xml << L"example cyrilic and latin text Кириллица и латинский текст" << endl; //xml << s0 << endl; <-тут такой же результат как и выше... записывается только латиница. return 0; } Попробовал добавить setlocale(LC_ALL, "ru_RU.UTF-8");... результат прежний. Да в тестовом упрощенном видно... в полной версии.. (листинг большой и разбит на несколько файлов) проблема осталась... Вышел из положения вернувшись обратно к ofstream. И пишу строки использую cp2utf.... void cp2utf( char* str, char* res ) { static const long utf[ 256 ] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58, 59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110, 111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,1026,1027,8218, 1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217, 8220,8221,8226,8211,8212,8250,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032, 164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182, 183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047, 1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063, 1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079, 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095, 1096,1097,1098,1099,1100,1101,1102,1103 }; int cnt = strlen( str ), i = 0, j = 0; for(; i < cnt; ++i ) { long c = utf[ (unsigned char) str[ i ] ]; if( c < 0x80 ) { res[ j++ ] = c; } else if( c < 0x800 ) { res[ j++ ] = c >> 6 | 0xc0; res[ j++ ] = c & 0x3f | 0x80; } else if( c < 0x10000 ) { res[ j++ ] = c >> 12 | 0xe0; res[ j++ ] = c >> 6 & 0x3f | 0x80; res[ j++ ] = c & 0x3f | 0x80; } } res[ j ] = '\0'; } Всем спасибо за помощь. К сожалению проблему с wofstream не решил. Необходимого функционала добился способом описанным выше.


Ответ

@Сфинкс, комментарии кончились, поэтому в ответе. Вы несомненно поступили правильно. На практике я бы сделал так же (только на чистом Си, но дело не в этом.) Просто странно, что с С++ не получилось. Конечно, у меня пример из линукса (пришлось доставить ru_RU.cp1251 локаль), по умолчанию у меня en_US.UTF-8. Но в принципе, в винде д.б. utf локаль, например та же "en_US.utf-8", так что пример может пригодиться. #include #include #include
using namespace std;
int main (int ac, char *av[]) { cout << "Hi
"; wofstream os; os.open("test.ws"); os.imbue(locale(av[1] && *av[1] == 'c' ? "ru_RU.cp1251" : "en_US.utf-8")); os << "1 aa xaxa xoxo wofstream
" << L"zz рус бук
"; os.close();
cout << "End
"; return 0; } А вот результат avp@avp-xub11:~/hashcode$ g++ wofstream.cpp avp@avp-xub11:~/hashcode$ ./a.out Hi End avp@avp-xub11:~/hashcode$ cat test.ws 1 aa xaxa xoxo wofstream zz рус бук avp@avp-xub11:~/hashcode$ ./a.out cp1251 Hi End avp@avp-xub11:~/hashcode$ cat test.ws 1 aa xaxa xoxo wofstream zz ��� �� avp@avp-xub11:~/hashcode$ iconv -f cp1251 -t utf-8 test.ws 1 aa xaxa xoxo wofstream zz рус бук avp@avp-xub11:~/hashcode$ Хочу отметить, что в тексте программы русские буквы набиты в utf-8. Если убрать L перед константой, то перекодировки (если ее задавать) не будет. Также никакой перекодировки нет, если заменить wofstream на ofstream (естественно модификатор L для ofstream надо убрать).

Определить битая таблица или нет

Доброго всем времени суток, господа. repair table table - чудесная команда для восстановления таблицы, есть правда нюанс.. Вот работаете вы работаете, и раз.. таблица сдохла.. понятное дело надо восстановить.. но ведь не понятно когда она сдохнет. Можно ли каким то образом настроить, что бы таблица перед любым запросам автоматом проверялась на "не_битость" и если она "битая" - восстановить автоматом. P.s. конечно трайКэч можете посоветовать, но тогда как определить "битость" таблицы ?


Ответ

CHECK TABLE есть такой запрос: http://dev.mysql.com/doc/refman/5.1/en/check-table.html Нужно сверить Msg_type на error. А такое будет в Msg_text: Table upgrade required. Please do "REPAIR TABLE tbl_name" to fix it

Обновления приожения ios

В апсторе есть приложение которое разрабатывалось с учетом ios6, нижняя планка была ios5.Теперь я хочу сделать в пятом xcode версию для ios7 (обновленье). Но собранный мной вариант выглядит нормально в семерке,но на шестой версии оси там проблемы а автолэяутом. Гарантирует ли что что я собрал это обновление в пятом xcode что владельцам семерки придет обновление а владельцам шестерки нет(это то что мне нужно)?


Ответ

В настройках XCode можно поставить минимальную версию iOS. Тогда обновление прийдёт тем людям, у которых стоит нужная Вам iOS.

Проигрывание видео в элементе video со встроенного http-сервера на айоси

Есть приложение на obj-c, в которое встроен http-сервер (использовался вот из этого примера, вроде почти без изменений,"вроде" т.к. весь проект мне в наследство достался), к которому идут запросы из UIWebView, в отображающемся html имеется тег video который не работает. Вопрос - какими свойствами должен обладать сервер чтобы видео проигрывалось. Видео передается корректно, у него определены Content-type, content-length, Content-Range, то что это действительно так проверялось как с помощью загрузки видео NSURLConnection (заодно сохранил полученые данные в другое место и проверил что мд5 совпали), так и прямо в js с помощью XMLHttpRequest в том же месте где динамически добавлялся этот тег, в том же файле есть аудио и оно работает. Если страничку грузить из интернета то все хорошо, а вот с внутреннего сервера не хочет


Ответ

Сам отвечу на свой вопрос, приведенный сервер не умеет показывать видео, но помогает вот этот сервер, только есть одна особенность - по какой-то причине в iOs 7 видео не будет проигрываться для localhost, надо использовать 127.0.0.1
На всякий случай уточню, что потомка NSURLConnection тоже пробовал, с ним не работает по крайней мере в 6 и - это известный баг.

Как через span выбрать div? [дубликат]

На данный вопрос уже ответили: Анимация в CSS по hover 1 ответ В коде

выбрать span при некоторых ситуациях можно написав div + span а как написать наоборот, т.е. через span выбрать div? Т.е. по логике как будто бы так span - div


Ответ

Только скриптом: $('span').prev(). Либо пересматривать код html

Помогите отсортировать массив

Смотрите, есть на руби массив хешей, каждый элемент хеша - это отдельный массив неупорядоченных чисел. Нужно вернуть тот же массив хешей, но с уже с отсортированными по возростанию числами. Дано: h = { a:[4,1], b:[6,9,3], n:[] } Нужно получить: h = { a:[1,4], b:[3,6,9], n[] } Объявляется трёхдневный Конкурс, на самый короткий по длинне алгоритм!:) Победитель будет состязаться со моим решением (оно не сложное) Второй вопрос: я хочу файл, имя которого будет именем класса, а текст этого файла будет являться именем статического метода, а расширение этого файла будет аргументом этого метода. Короче говоря, если Дано файл: String.hi С текстом new то должно выполниться: String.new('hi') и на экране вывестить: => "hi" Желательно уложиться в две строчки. Удачи!!! :)))


Ответ

По первому вопросу: h.each { |k,v| v.sort!} => {:a=>[1, 4], :b=>[3, 6, 9], :n=>[]} или h.each_value { |v| v.sort! }

Flash Player и своя программа

Всем привет! Меня интересует такая вещь: Как можно взаимодействовать с Flash Player'ом, то есть воспроизвести в нем какой то Flash файл и отобразить его у себя в программе?


Ответ

1. Способ
Через компонент браузера webBrowser
webBrowser1.Navigate("http://site.com"); // страница сайта с флеш-содержимым webBrowser1.Navigate("C:\\file.swf"); // локальный флеш-файл


2. Способ
Через COM компонент Shockwave Flash Object
axShockwaveFlash1.LoadMovie(0, "http://site.com/flash.swf"); // флеш-объект в сети axShockwaveFlash1.Movie = @"C:\holdthelinegame.swf"; // локальный файл
(!) Флеш-объект в сети обязательно должен быть прямой ссылкой на .swf файл. Узнать прямую ссылку можно покопавшись в исходном тексте страницы сайта.

Горизонтальная полоска со стрелкой средствами CSS

Всем привет, возможно сделать такую картинку:

средствами CSS, которая отображалась бы так же даже при изменении ширины?


Ответ

http://jsfiddle.net/ab4Se/
body { background: #fff; } .block { border-bottom: 1px solid #f00; position: relative; background: #fff; margin-bottom: 50px; } .block::after, .block::before { content:''; position: absolute; left: 50%; bottom: -10px; margin-left: -10px; background: #fff; width: 20px; height: 20px; box-shadow: 1px 1px 0 #f00; /* Добавляем тень для уголка */ z-index: -1; /* Прячем за основным блоком */ transform: rotate(45deg); /* Поворачиваем на 45º */ -webkit-transform: rotate(45deg); } .block::before { z-index: 1; /* Накладываем поверх, чтобы скрыть следы тени */ box-shadow: none; /* Прячем тень */ } .block1 { border-bottom: 1px solid #00f; position: relative; background: #fff; } .block1::after, .block1::before { content:''; position: absolute; left: 50%; bottom: -10px; margin-left: -10px; background: #fff; width: 20px; height: 20px; box-shadow: 1px 1px 0 #00f; /* Добавляем тень для уголка */ z-index: -1; /* Прячем за основным блоком */ transform: rotate(45deg); /* Поворачиваем на 45º */ -webkit-transform: rotate(45deg); } .block1::before { z-index: 1; /* Накладываем поверх, чтобы скрыть следы тени */ box-shadow: none; /* Прячем тень */ }


Что будет меньше потреблять ресурсы?

Сейчас изучаю динамические массивы. Дал себе задание: считать из файла данные в динамический массив структур . Как лучше выделять память? Есть 2 варианта: Посчитать количество строк в файле и дать место под массив malloc'ом. Минусы этого метода, что по файлу надо пробигаться 2 раза: первый это подсчёт количества строк, второй заполнение массива. При считывании из файла расширять выделяемую память realloc'ом. Минусы этого метода, что realloc - ресурсозатратное средство. Но можно немного обойти этот минус и выделять раз в 3 итерации сразу память для трёх элементов. Итак, что же использовать лучше? Или возможно всё зависит от размера файла? UPD: 1. OC - Windows 2. Формат данных в фалйе: Название(char)|количество(int)
И структура из двух элементов name(char[255]) и count(int). Кол-во данных не фиксированное, может быть как 100 элементов так и 1000. Или всё-таки ввести максимум и выделять максимум памяти вначале, а потом сокращать? Или узнать сколько весит 1 эелемент этой структуры, проверить размер файла, разделить его на вес 1го элемента и так мы получим кол-во элементов, для которых надо выделять память?


Ответ

а с чего вы взяли что "количество строк" == "размер файла" ? яркий пример 2 файла в одном 2 строки в каждой 10 символов и втором 2 строки и в каждой 1000 символов... у любого файла есть мета информация о размере, времени создания, времени чтения, etc... узнаём размер файла узнаём размер памяти узнаём сколько свободно памяти используем полученную инфу...

Яндекс карты: менять в зависимости от размеров экрана

Здравствуйте! Подскажите, пожалуйста, как можно сделать яндекс карту, что бы менялась в зависимости от размеров экрана.? Я знаю, что это можно сделать, а вот как?? Может вы знаете:)


Ответ

может поможет, кому то... нашла ответ... нужно просто задать ширину в % и высоту фиксированную(родительскому контейнеру карты), что бы можно было отсчитывать %.. А для того что бы изменялась высота нужно через js вычислять....

Ориентиры в определении сроков разработки и рефакторинга веб-проектов

Встала задача поддерживать сайт, который писался много лет и представляет собой лютый говнокод. Ни документации, ни комментариев нет. О форматировании автор не слышал. Зато есть острое желание владельцев сайта понаделать заплаток там, где - на их взгляд - самые проблемные места. В ближайшее время предстоит разговор о сроках работы и мне хотелось бы отталкиваться не от компромиссов (типа такого: я думаю, что у меня уйдет полгода только на минимально необходимую ревизию кода, заказчик думает, что надо все сделать за неделю => договорились на три месяца), а от объективных ориентиров Пример для затравки (цифры условные). Общий объем кода - 50 тыс. строк кода. В день я могу написать 50 строк нормального, покрытого тестами и документированного кода. Отсюда имеем 50000/50 = 1000 трудодней = 200 недель = 3 года 10 месяцев работы одного программиста (без учета отпусков и праздников). Примерно такие объективные ориентиры в оценке времени анализа/рефакторинга/создания веб-приложения хотелось бы услышать. Ну и логика оценки тоже будет крайне интересна.


Ответ

Если ответ интересен чисто теоретически, есть такая метрика как цикломатическая сложность, которую вполне можно измерить. Вполне вероятно есть еще какие-то.
Еще видел статью на хабре с размышлениями на эту тему

Можно ли узнать включен ли звук нажатия клавиш на клавиатуре?

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


Ответ

Непосредственно из настроек андроида производится настройка любой клавиатуры. В настройках андроида содержится список всех приложений клавиатуры, и при выборе настройки определенной клавиатуры запускается Activity с настройкой из этого приложения клавиатуры. Как именно хранятся настройки в каждом приложении ни кто не знает (кроме самого разработчика). Максимум, что можно узнать - громкость канала звука, на котором воспроизводится звук клавиатуры (как правило, это системный канал звука). Сделать это можно так: AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE); int volume_level= am.getStreamVolume(AudioManager.STREAM_SYSTEM); Где AudioManager.STREAM_SYSTEM - строковая константа, определяющая канал звука.

Область действия пространства имен php

Где заканчивается область действия пространства имен в php, объявленного вот так namespace Mynamespace; //код Продолжается ли она в файле include 'myfile.php'; Чем отличается от namespace Mynamespace { //код }


Ответ

В документации разбирается ваш вопрос: "Импортируемые имена не могут конфликтовать с классами, определенными в том же файле" Upd. Насчёт синтаксиса с фигурными скобками: Описание нескольких пространств имен в одном файле

Автоматическое обновление параметров сети

Есть сервер, с ОС Centos 6.4. У провайдера иногда пропадает интернет, и сервер не обновляет параметры сети, не получает IP и т.д, и поэтому его приходится постоянно перезагружать. Может быть, есть какой-нибудь скрипт, который будет при появлении интернета, обновлять параметры? Так как не обновляется сеть при повторном появлении интернета.
Имеются 2 сетевые карты, объединённые в BOND-инг (3)
ifcfg-eth0
DEVICE=eth0 TYPE=Ethernet UUID=0aa4aba2-e45c-4d1d-ba90-ca93cbaf071a ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" HWADDR=00:15:17:44:FF:48 PEERDNS=yes PEERROUTES=yes USERCTL=no MASTER=bond0 SLAVE=yes
ifcfg-eth1
DEVICE=eth1 TYPE=Ethernet UUID=e427aa5a-7e1c-44c0-8a2e-d5d7856e7142 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth1" HWADDR=00:15:17:44:FF:49 PEERDNS=yes PEERROUTES=yes USERCTL=no MASTER=bond0 SLAVE=yes
ifcfg-bond0
DEVICE=bond0 ONBOOT=yes BOOTPROTO=dhcp USERCTL=no BONDING_MASTER="yes" BONDING_OPTS="miimon=100 mode=3 updelay=100 downdelay=100 use_carrier=1" TYPE=Bonding NOZEROCONF=yes


Ответ

судя по содержимому приведённого лога, проблема, скорее, не у вас, а у dhcp-сервера провайдера (или у сети провайдера): время аренды, вероятно, что-то около двадцати минут, и когда, спустя примерно половину этого времени ваш dhclient начинает посылать запросы на обновление аренды, ответ приходит спустя огромный промежуток времени — минимум три минуты.
вероятно, время от времени этот промежуток превышает примерно десять минут, время аренды истекает, ответа нет, и dhclient, в полном соответствии с rfc2131 обязан освободить используемый адрес.
помимо первого приходящего в голову совета сменить провайдера, можно попробовать ещё несколько путей (приведены в порядке уменьшения реалистичности):
прописать статическую конфигурацию сети запрашивать бо́льшее значение времени аренды адреса (send dhcp-lease-time секунды в /etc/dhcp/dhclient.conf) заменить время аренды адреса (supersede dhcp-lease-time секунды в /etc/dhcp/dhclient.conf)

Как запустить новую активность из фрагмента?

Здравствуйте. Главная активность содержит ViewPager, в котором 3 фрагмента, их можно пролистать. Мне из фрагмента нужно запустить новую активность, а как сделать не знаю. Создавал intent в Main и контекст (Context c = this;), через функцию (отдельно написал) передавал во фрагмент, а там запускал новую активность при нажатии на кнопку, но приложение закрывается.


Ответ

startActivity(new Intent(getActivity(), NewActivity.class));

Инструменты анализа и фильтрации текста

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


Ответ

Посмотрите phpMorphy. Так же есть mystem и томита-парсер от яндекса, но они не на php.

.htaccess редирект средствами mod_rewrite

На сайте использую ЧПУ. Пример:
RewriteRule ^index$ index.php RewriteRule ^index/$ index.php
В итоге, в адресную строку можно легко вводить такой адрес http://site.ru/index. Но вот незадача. Как теперь сделать так, чтобы ссылка типа http://site.ru/index.php стала недоступной, а доступ ко странице index.php мог бы осуществлять только по адресу http://site.ru/index?


Ответ

Ваши два правила легко можно объединить в одно, взяв слеш в квадратные скобки и написав после них знак вопроса - это сделает его "необязательным" символом, который может быть, а может не быть.
По сути вопроса - например, так:
RewriteRule ^index[/]?$ index.php [L,E=ACCESS_ALLOWED:1] RewriteCond %{REQUEST_URI} ^/index.php$ RewriteCond %{ENV:REDIRECT_ACCESS_ALLOWED} ^$ RewriteRule ^index.php$ - [F]
Что тут происходит: первая строчка дублирует Ваши правила из вопроса, с той разницей, что при перенаправлении с index на index.php устанавливает переменную окружения ACCESS_ALLOWED со значением 1. Имя переменной можно выбрать произвольно - она не имеет значения для Apache, и нужна нам только в этих правилах.
Во второй и тертьей строчке задаются два условия: "запрошен URI index.php" и "значение переменной окружения ACCESS_ALLOWED пусто". В последней строчке запрещается доступ к index.php
Как это работает: при запросе index или index/ происходит перенаправление на index.php с установкой переменной ACCESS_ALLOWED, равной 1. Условие о пустой переменной ACCESS_ALLOWED, соответственно, не срабатывает, и обусловленное этим правило о запрете доступа к index.php не выполняется. При запросе же index.php напрямую переменная ACCESS_ALLOWED оказывается не установленной, условие о её пустоте срабатывает, и обусловленное им правило о запрете доступа к index.php выполняется. В итоге по запросу index попасть на index.php можно, а по "прямому" запросу index.php - нет.
Можно, на самом деле, поступить ещё изящнее: вместо запрета доступа "напрямую" к index.php просто перебрасывать такие запросы HTTP-редиректом на "рекомендуемый" index/, сделать это можно вот так:
RewriteRule ^index[/]?$ index.php [L,E=ACCESS_ALLOWED:1] RewriteCond %{REQUEST_URI} ^/index.php$ RewriteCond %{ENV:REDIRECT_ACCESS_ALLOWED} ^$ RewriteRule ^index.php$ index/ [L,R=301]
Такая схема с 301-м редиректом полезна, когда у вас на сайте изменились адреса страниц, и есть задача "обучить" новым адресам поисковые системы, но не хочется терять трафик, идущий со старых ссылок на старые адреса.

Импорт проекта из Eclipse в Android Studio

Здравствуйте!
Есть проект на Eclipse, который нужно импортировать в Android Studio, пользуясь этой инструкцией. Получаю вот такую ошибку:

Build.gradle:
apply plugin: 'android'
dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':appcompat_v7') }
android { compileSdkVersion 16 buildToolsVersion "19.0.3"
sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] }
instrumentTest.setRoot('tests')
debug.setRoot('build-types/debug') release.setRoot('build-types/release') } }


Ответ

Вопрос решился сам собой. Создал проект в Eclipse, после этого открыл Android Studio>File>Import И все заработало.

Разбить элементы списка

Как сделать из длинного списка (li) списки (ul) по 10 элементов li. К примеру, есть один список, в котором 30 элементов:

  • ...

На выходе нужно получить 3 списка по 10 элементов вместо одного большого:
  • ...

  • ...

  • ...

Я было нашёл функцию, которая это делает:
$('.list').each(function() { var group; while((group = $(this).find('li:lt(10)').remove()).length) { $(this).append($('
    ').append(group)); } });
    Да, обязательно, классов list будет несколько, поэтому для каждого нужно сделать обработку, и тут проблема - попадаем в рекурсию. Если написать:
    $('body').append($('
      ').append(group));
      то всё нормально, но ведь нужно "переделать" исходный список, а не вставлять его в body. Подскажите, как это сделать?


      Ответ

      Может, попробуешь http://neolot.com/narabotki/autocolumnlist-jquery-plugin-dlya-razdeleniya-spiskov-na-kolonki

Как правильно называть классы?

Меня интересует не столько название, сколько расположение дополнительного слова, указывающего принадлежность к некому типу. Для примера, если я создаю потомка класса Model, Test, то как будет правильно: TestModel? ModelTest?


Ответ

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

Как равномерно раскидать N чисел по K контейнерам?

Что-то не соображу, как оптимально решается такая задача: Есть "случайный" набор N чисел от 0 до M. Распределение примерно экспоненциальное: мелких больше. Их надо раскидать среди K контейнеров так, чтобы минимизировать разброс сумм чисел в контейнерах Думал, надо найти среднее, к которому стремиться; отсортировать набор и брать с краёв. Но не понятно, на чём останавливаться, когда набираю сумму в очередной контейнер. Вот, недобрал до "золотой середины" 5%, это хорошо, или ещё постараться? Явно неоптимально так наугад брать. Upd. наверное, задача не самая простая. Похоже на одномерную «задачу об упаковке» + комбинаторику.


Ответ

Что сразу приходит в голову (но он вроде не такой хороший). Начать распределять с больших чисел и раскидывать в наименьшую ячейку. Более мелкие значения будут обтесывать неравенство. Обновление Не понимаю, зачем жестко брать самое большое + самое маленькое? Сортируем по убыванию, к примеру получили [5 4 3 3 2 2 1 1 1]. И надо разбить на 3 контейнера: 5 = 4 = 3 // взяли 3 самых больших: 5,4,3 5 = 4 = 6 // число 3 5 = 6 = 6 // число 2 7 = 6 = 6 // число 2 7 = 7 = 7 // два числа 1, 1 8 = 7 = 7 // последнее число 1 Данный метод считаю наиболее простым, но, к сожалению, есть случаи, когда разброс будет неидеальным.

Ошибка при создании screen

Здравствуйте. Есть скрипт на PHP ,который выполняет команду screen -S test337 через SSH ,вот он: /* Соединение */ $connect = ssh2_connect($rows1['ip'], $rows1['sshport']); ssh2_auth_password($connect, $rows1['login'], base64_decode($rows1['password'])); $shell = ssh2_shell($connect);
/* Выполнение команды */ fwrite($shell, 'screen -S test337'.PHP_EOL);
/* Получение ответа */ $text = ''; while($buf = fread($shell,4096)) {$text .= $buf;}; echo '
'.$text;
/* Закрытие соединения */ fclose($shell); В переменой $rows1 хранятся данные от SSH. Но сервер выдаёт ошибку: Cannot find terminfo entry for 'vanilla' Если даже отправить просто команду screen ,он вернёт точно такую же ошибку. На сервере стоит CentOS 6.* Подскажите пожалуйста как это можно исправить? И из-за чего это вообще может происходить?


Ответ

исправить ошибку можно, установив переменной окружения TERM какое-нибудь более распространённое (а значит, с большей вероятностью присутствующее в целевой системе) значение. например, xterm, или даже vt100
дополните вызов программы screen таким присвоением значения переменной TERM:
TERM=xterm screen ...
или таким:
TERM=vt100 screen ...

Как убрать скроллбар из TableView QML?

Добрый день! Собственно, вопрос из темы: Как убрать скроллбар из TableView? Я новичок и документация с гуглом мне не помогли.


Ответ

verticalScrollBarPolicy отвечает за политику отображения http://doc.qt.io/qt-5/qml-qtquick-controls-scrollview.html#verticalScrollBarPolicy-prop
TableView { verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff }

Как выстроить нужную логику переходов между activity и нажатия на кнопку back?

Здравствуйте! Как говорится:
"Повторение — мать учения!"
В сотый раз возникает вот такой вопрос. Есть несколько активити (заменить на фрагменты не предлагать), нужно организовать переходы между ними.
Т.е. либо мы заходим после авторизации сразу на главный экран закрытой части (MainActivtiy), либо идем создавать код доступа (который позволяет не вводить каждый раз логин и пароль). НО мы уже авторизовались!
Я знаю несколько способов решения подобной задачи:
android:parentActivityName в манифесте
startActivityForResult() с последующим onActivityResult()
Ну и onBackPressed()
Только постоянно получается путаница - какая-то активити сохраняется или переходы нажатием кнопки назад закольцовываются... finish() вызываю всегда, когда обрабатываю нажатие назад или когда setResult(RESULT_CANCELLED);
Картинка:

Синий и зеленый идеальный сценарий, интересует сценарий красными стрелками сделаный. Проще говоря, когда мы прошли авторизацию и перехотели делать код доступа, мы должны перейти на экран MainActivity.
Сценарий:
Начало, переходим к авторизации.
Авторизовались. Пошли создавать код доступа codeEnter.
Перешли на следующий экран preConf.
Вернулись на codeEnter.
Вернулись на LoginActivity.
Вернулись на StartActivity.
Важно, чтобы один и тот же сценарий выполнялся по нажатию на кнопку назад (принципиально), actionBar забудем на время.


Ответ

Если я Вас, @Garf1eld, правильно понял, то Вам нужен способ верного перехода на MainActivity, если пользователь авторизовался. Я могу предложить только проверку: онлайн -> послать запрос на сервак и сверить ответ локально. оффлайн (не знаю назначение оффлайн авторизации на смартфоне, но все же) -> после успешной авторизации сохранить в SharedPreferences значение ключа boolean enter = true. Если не авторизован, то enter = false, если выходит из аккаунта, то присвоить enter = false Проверка на успешную авторизацию. Если "да", то на MainActivity // код для **офлайн** версии. if (enter == true) { // авторизован, переходим к приложению startActivity(new Intent(StartActivity.this, MainActivity.class); } else { // не авторизован, переходим к активности авторизации startActivity(new Intent(StartActivity.this, AutorizationActivity.class) } UPD Можно попробовать кастомизировать onBackPressed(); @Override public void onBackPressed() { startActivity(new Intent(ТЕКУЩАЯ_АКТИВНОСТЬ.this, ППВСА.class)); // ППВСА - ПРЕДЫДУЩАЯ ПО ВАШЕЙ СТРУКТУРЕ АКТИВНОСТЬ // задать кастомизацию в каждом классе }

Задача на теорию игр [закрыт]

В начальный момент времени Снарк находится в точке прямой с целой неотрицательной координатой X. За ход он может оказаться в любой точке с целой координатой Y при условии, что |X-Y| <= S. Кроме того, Снарк не любит булочки, поэтому он никогда не прыгнет в клетку, где одна из этих противных штук лежит. Булочник не хочет, чтобы Снарк попал домой. После каждого хода Снарка Булочник может положить булочку в любую точку прямой при условии, что это не начало координат (дом Снарка) и в этой клетке нет Снарка. Определите, сможет ли Булочник помешать Снарку оказаться дома. Изначально в некоторых клетках лежат булочки. Входные данные В первой строке задаются целые числа 0 <= X < 10000, 0 < S <= 100 и 0 <= N < max(X-1, 0) - количество булочек, которые уже лежат на прямой. Далее идут N различных чисел 0 < bi < X - координаты точек, где лежит гадость. Выходные данные Выведите "YES", если Булочник сможет реализовать свои грязные планы, "NO" - если при любых действиях врага Снарк сможет припрыгать домой.
Ясно, что задача по теории игр. Подскажите идею решения (готовая программа мне не нужна, так как хочу сам написать).


Ответ

Снарк хочет сделать минимальное число шагов, чтобы добраться до цели. В каждом состоянии можно посчитать, какие конкретно шаги при такой стратегии он сделает. И через сколько шагов он окажется там или сям. Это число шагов — число булок, которые успеет расставить Булочник. Двигая «рамку» длиной в S от 1 до Снарка, для каждого ее положения можно посчитать недостающее число ходов для закрытия (построения сплошной преграды). Сопоставляя недостающее число ходов с тем, как скоро там окажется Снарк, можно найти, или не найти решение. Вряд ли тут стоит усложнять стратегию до «замедления» Снарка где-то загодя.. Эти же ходы лучше потратить непосредственно на строительство преграды, как мне поверхностно кажется.

Как в исходящих смс различать, с какой сим-карты они уходили?

Добрый день! Прошу помочь с таким вопросом, мне надо выгрузить все исходящие смс и отметить, с какой сим-карты они уходили. Делаю так: Uri uri = Uri.parse("content://sms/sent/"); final Cursor cursor = getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); String type = cursor.getString(cursor.getColumnIndex("type")); while (cursor.moveToNext()) { tvsim1.setText(tvsim1.getText()+"
"+cursor.getString(cursor.getColumnIndex("body"))+" "+cursor.getInt(cursor.getColumnIndex("address"))); } Но как можно получить с курсора, с какой сим была отправка? Спасибо!


Ответ

Официально Android не поддерживает больше одной симки. Прошивки для аппаратов с 2 и более симками допилены производителем таким образом, что они могут работать с неск. симками. Но как именно они допилены - одному Богу (и еще этим производителям) известно. Если вы даже и сможете выяснить, как они это сделали, то вам придется писать разную реализацию для каждого производителя (а возможно и каждого устройства) отдельно. Если все же хотите лично в этом разочароваться, то вот что я смог найти:
https://www.google.com.ua/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#safe=off&q=android+get+sms+list+dual+sim https://stackoverflow.com/questions/27878785/how-to-send-sms-from-dual-sim-phone https://stackoverflow.com/questions/19728178/how-to-make-submissions-sms-with-sim2-or-dual-sim https://stackoverflow.com/questions/5255147/dual-sim-card-android https://stackoverflow.com/questions/14517338/android-check-whether-the-phone-is-dual-sim/17499889#17499889

Динамическая подгрузка и обновление классов в Java

Возможно ли в Java реализовать динамическое обновление класса? К примеру, в приложение подгружается класс, но через какое-то время нужно его обновить на более новую модификацию, не перезапуская все приложение целиком.


Ответ

Да какие проблемы то? ClassLoader classLoader = MyClass.class.getClassLoader(); Class myNewClass = classLoader.loadClass("mydomain.MyNewClass"); Предполагается, что объектник MyNewClass лежит в CLASSPATH, хотя можно и без этого. Можно даже скомпилировать MyNewClass из исходников :) Далее имея переменную myNewClass с помощью рефлексии уже можно перенумеровать новые методы и вызвать какой нужно. Update: Простенькие примеры рефлексии: Method[] methods=myNewClass.getMethods(); //список публичных методов класса Method method=myNewClass.getDeclaredMethod("getMyMethod", String.class); //получаем метод getMyMethod(String ) Constructor[] constructors=myNewClass.getConstructors(); //список конструкторов //ну и т.п. Далее уже надеюсь понятно? Есть конструктор, есть методы: создаем объект, вызываем его методы ну и т.д.

Enum : type { }; Какой тип стоит по умолчанию?

В с++ 11 появилась такая возможность, как: enum AnyEnum : int8_t { a = -1, b = 0, c = 1, }; Какой тип устанавливается по умолчанию, не учитывая различных оптимизаторов? Раньше, если не ошибаюсь, устанавливался int; Т.е. что поставится на этапе компиляции, если не указать тип?


Ответ

Документация по std::underlying_type утверждает, что:
The underlying type of an enum declared with enum class is int unless a different type is specified on declaration.
В переводе:
Базовым типом перечисления, объявленного как enum class, является int, пока в объявлении не указан иной тип.

Создание приложения интернет-магазина Вконтакте на основе готового сайта

Здравствуйте. Требуется сделать приложение Вконтакте, которое, по сути, будет интернет-магазином на основе уже готового интернет-магазина. Собственно, есть стандартный серверный набор: php, mysql,apache + opencart CMS. Магазин хорошо работает. Нужно теперь сделать приложение ВКонтакте, которое будет предоставлять пользователям ВКонтакте стандартный набор функций интернет-магазина. То есть пользователь установил приложение, подтвердил доступ к своим данным и автоматически зарегистрировался в базе. При следующем запуске приложения пользователь уже без всяких запросов, автоматически попадает приложение уже залогиненым. ТО есть обычная практика приложений ВКонтакте. Вопрос вот в чем. Я до этого особо не имел дела с такими вещами. Вот хочу попросить совета у более опытных людей в данном деле, дабы следовать стандартным общепринятым шаблонам создания таких приложений, а также не создавать своих велосипедов. Насколько я понял, есть два основных способа создания приложения ВКонтакте: IFrame. Тут все понятно JS, PHP.... Flash. Собственно вопрос: какой способ лучше для данных нужд. Либо делать это через IFrame, использую, к примеру, одностраничное приложение, написанное на JS и других библиотеках, написанных на нем. То есть приложение будет предоставлять собой одну страницу, которая с помощью AJAX будет делать, к примеру, REST запросы на сервер. Или же лучше делать приложение через Flash. RESTful API будет в любом случае, так как требуется еще доступ с мобильного клиента. Собственно, хотелось бы услышать мнения и советы знающих в этой сфере людей, как лучше сделать, что использовать, может, есть какое-то эталонное приложение для реализации таких целей. Спасибо всем заранее. Буду благодарен за любую помощь.


Ответ

Flash - умирает, и делать на нем что-либо не перспективно. Раз у Вас есть готовый сайт, используйте iframe, просто прикрутите шаблон, адаптированный под размеры фрэйма и все. Зачем писать отдельное одностраничное приложение на js? У Вас в распоряжении готовая cms, нужно лишь найти\написать плагин, который будет обрабатывать запросы через фрэйм и все. Поясню, если у Вас сайт живет не только в рамках приложения для вк (что скорее всего), будет логично сделать отдельную точку входа для пользователей из приложения, на которой будет проверяться, есть ли пользователь, который зашел на сайт в базе, если такого пользователя нет, будет его мгновенно регистрировать и отправлять на нужную страницу на сайте (приложении), возможно, попутно цепляя параметр к url, который будет говорить, что сайт запущен через приложение, и нужно отобразить шаблон приложения. Т.е. делать в данном случае SPA нецелесообразно. P.S. Насколько я знаю, когда пользователь открывает сайт через приложение вк, первая страница сайта открывается с параметрами, которые позволяют идентифицировать пользователя через соц. сеть (id пользователя, токен), что и позволит проверять наличие данного пользователя в общей базе пользователей магазина.

Visual Studio. Конфигурация сборки проекта

Я написал две программы. Одну на Java, вторую на C# с абсолютно одинаковым содержимым, чтобы просто сравнить производительность. Результаты были удивительными. После этого я обратился к преподавателю, чтобы выяснить, в чем дело (шарповский код выполнялся в 8 (!!!) раз дольше). На его машине (VS 2008) он переключил с Debug на Release в студии, после чего время выполнения программы сократилось в 3 раза. Я пришел домой и тот же трюк не сработал (VS 2013).
В общем, ищу совета по профилям в Visual Studio. Как "включить оптимизацию"?
Код шарпа:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace BoxingTest { public abstract class BoxedVal { public abstract BoxedVal Add(BoxedVal other); public abstract bool LessThan(BoxedVal other); public abstract bool GreaterThan(BoxedVal other); }
public class BoxedInt : BoxedVal { public int Value;
public BoxedInt(int value) { Value = value; }
public override BoxedVal Add(BoxedVal other) { BoxedInt i = other as BoxedInt; return new BoxedInt(Value + i.Value); }
public override bool LessThan(BoxedVal other) { BoxedInt i = other as BoxedInt; return Value < i.Value; }
public override bool GreaterThan(BoxedVal other) { BoxedInt i = other as BoxedInt; return Value > i.Value; } }
class Program { private static int Fib(int nn) { BoxedVal one = new BoxedInt(1);
BoxedVal a = one; BoxedVal b = one;
BoxedVal n = new BoxedInt(nn);
BoxedVal thousand = new BoxedInt(1000);
for (BoxedVal i = new BoxedInt(2); i.LessThan(n); i = i.Add(one)) { BoxedVal c = a.Add(b); a = b; b = c;
if (b.GreaterThan(thousand)) { a = one; b = one; } } return (b as BoxedInt).Value; }
static void Main(string[] args) { int times = 5; int n = 20000000;
int total = 0;
for (int i = 0; i < times; i++) { var start = DateTime.Now; int val = Fib(n);
int dt = (DateTime.Now - start).Milliseconds; total += dt; Console.WriteLine(val); Console.WriteLine("Elapsed: {0} ms", dt); }
Console.WriteLine("Average: {0} ms", total / times);
Console.ReadLine();
} } }
Код на Java:
abstract class BoxedVal { public abstract BoxedVal Add(BoxedVal other); public abstract boolean LessThan(BoxedVal other); public abstract boolean GreaterThan(BoxedVal other); }
class BoxedInt extends BoxedVal { public int Value;
public BoxedInt(int value) { Value = value; }
@Override public BoxedVal Add(BoxedVal other) { BoxedInt i = (BoxedInt)other; return new BoxedInt(Value + i.Value); }
@Override public boolean LessThan(BoxedVal other) { BoxedInt i = (BoxedInt)other; return Value < i.Value; }
@Override public boolean GreaterThan(BoxedVal other) { BoxedInt i = (BoxedInt)other; return Value > i.Value; } }
public class BoxingTest {
private static int Fib(int nn) { BoxedVal one = new BoxedInt(1);
BoxedVal a = one; BoxedVal b = one;
BoxedVal n = new BoxedInt(nn);
BoxedVal thousand = new BoxedInt(1000);
for (BoxedVal i = new BoxedInt(2); i.LessThan(n); i = i.Add(one)) { BoxedVal c = a.Add(b); a = b; b = c;
if (b.GreaterThan(thousand)) { a = one; b = one; } } return ((BoxedInt)b).Value; }
public static void main(String[] args) {
int times = 5; int n = 20000000;
long total = 0;
for (int i = 0; i int val = Fib(n); long dt = System.currentTimeMillis() - start; total+= dt; System.out.println(val); System.out.println("Elapsed: "+dt+" ms"); }
System.out.println("Average: "+(total/times)+" ms");
} }


Ответ

Скорее всего, Вы запускаете Ваше приложение кнопкой F5 - Start Debugging, а Ваш преподаватель Ctrl + F5 - Start Without Debugging. У меня C#-код выполняется следующее время Debug, с отладчиком: 756ms Debug, без отладчика: 989ms Release, с отладчиком: 844ms Release, без отладчика: 388ms Java-код выполняется Release (Run): 159ms Debug: 174ms UPDATE: Забавно, увеличил константу до 200 000 000 (в 10 раз). Теперь C# "обгоняет": Average: 863 ms Java: Average: 1296 ms