Страницы

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

вторник, 17 марта 2020 г.

Вопрос про UITableView и UITableViewCell в iOS

#ios #uitableview


Доброе время суток коллеги!
Столкнулся с такой задачей. Необходимо выводить информацию в UITableView в два кастомных
UITableViewCell. верхний как бы заголовок, нижний текст с произвольной высотой. Если
кликать на заголовок необходимо попадать на профиль пользователя, если кликать на текст
попадать на полный текст статьи. Пример реализации которая мне нужна хорошо выполнен
в приложении ВКонтакте для iphone, в разделе группы. У меня не получается вывести данные
в два UITableViewCell по очереди. 
https://www.dropbox.com/s/g1g6btk4zudrhr1/screen.pdf
В приложенном файле я нарисовал прототип того как должен выглядеть табличный вид
на мобильном телефоне. 
Если кто сталкивался или знает как это можно реализовать прощу помочь.    


Ответы

Ответ 1



После обсуждения этого вопроса с его автором в скайпе мы совместно выяснили, что оба вида ячеек на самом деле относятся к одной сущности (пользователю и контенту, связанному с ним) и решили, что нужно, чтобы был создан только один тип ячейки, в которую контент нынешних двух типов ячейки войдет в виде двух subviews - один subview для заголовка ячейки (информация о пользователе), другой - для контента (сообщение пользователя). Главная же проблема скрывалась в том, что из-за наличия двух видов ячеек, автор, полагаясь на строку вида EXHeaderTableCell *headerCell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier forIndexPath:indexPath]; получал неправильное обращение к индексу в массиве Reusable cells, так как indexPath в большинстве случаев указывал на ячейку противоположного типа.

Ответ 2



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellPersonIdentifier = @"CellPersonIdentifier"; static NSString *CellDataIdentifier = @"CellDataIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:(indexPath.row % 2 == 0 ? CellPersonIdentifier : CellDataIdentifier)]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:(indexPath.row % 2 == 0 ? @"CellPerson" : @"CellData") owner:self options:nil]; cell = [nib objectAtIndex:0]; } // далее заполняешь ячейки данными }

Позиционирование элемента CSS

#позиционирование #css


Есть изображение. Как спозиционировать крестик (Х) в правый верхний угол изображения?
Пропорции картинки могут быть разными.    


Ответы

Ответ 1



Просто через абсолютное позиционирование относительно родителя картинки. img { width: 100%; } .img-wrapper { width: 400px; position: relative; } .img-wrapper .close-link { position: absolute; top: 10px; right: 10px; padding: 3px 5px; background: rgba(255,255,255,.5); color: rgba(0,0,0,.5); text-decoration: none; border-radius: 5px; } .img-wrapper .close-link:hover { background: rgba(255,255,255,.85); color: rgba(0,0,0,.85); }
×


Ответ 2



for(var i=0; i < document.getElementsByClassName('image').length; i++) { document.getElementsByClassName('del')[i].style.marginLeft = document.getElementsByClassName('image')[i].offsetWidth-16 + 'px'; } x x x

Ответ 3



Вот так

Ответ 4



float:right; vertical-align:top;

Малая точность формата float

#float #cpp


Имеется следующий код:

namespace type{
    float a0 = 0.0f;
    float a1 = 0.1f;

    // ...

    float a7 = 0.7f;

    //...
};


В дальнейшем я использую ai для извлечения их дробной части и использую эту часть
как индекс элемента массива.

Но вот возникла такая штука: a7 оказалось равным 0.699999 после такой операции a7
= 0.7;. Почему? Почему так не точно? Я попробовал вывести значение на экран: оно равно
0.7.  В режиме отладки выяснил, что там все же не 0.7, а 0.69999. Значения переменных
аi должны быть float, так как они фигурирует в коде именно в таком виде.

Как быть? 
    


Ответы

Ответ 1



Я бы предложил написать клас, в котором будет отдельно содержатся целая часть и дробная: число a.bc представить в класе тремя переменными int a, b, c; и реальзовать все необходимые операции. Таким образом можно получить необходимую точность.

Ответ 2



Из комментария пользователя @KoVadim: Почитайте, к примеру, хотя бы это: «Что нужно знать про арифметику с плавающей запятой» и запомните как прописную истину. И больше не используйте вещественные числа для точных расчетов.

ASP.NET MVC или Python Django

#c_sharp #aspnet #mvc #python #django


Добрый вечер. Я собираюсь создать веб приложение с повышенной нагрузкой. И сейчас
у меня стоит выбор инструмента, но определиться я не как не могу. Обе технологии я
знаю на должном уровне, и обе отлично подходят под мою задачу. Скрипт приложения будет
стоять на разных сайтах, получая код из моего скрипта из бд. В качестве базы данных
я буду использовать Postgresql(даже в случае ASP.NET), так как Sql server по началу
в финансах не потяну (но хотелось бы и по этому поводу что-нибудь услышать). В качестве
серверной ОС скорее всего будет использоваться Windows Server 2008 R2(даже в случае
с Python Django), возможно и линукс подобные, пока не решил точно. Подскажите пожалуйста
плюсы и минусы. Спасибо.     


Ответы

Ответ 1



Есть несколько "сравнений", типа этого: http://www.pythondiary.com/blog/Apr.11,2012/comparing-django-aspnet-mvc.html, но конкретики в них мало, да и сравнивать совершенно разные платформы сложно. Точно можно сказать, что windows выйдет дороже. Дороже лицензия, дороже саппорт (Вы же не собираетесь нагруженный проект поддерживать сами вручную?). Абсолютно точно деплой python на винде будет неудобным и глючным (а деплоя asp на линуксе вообще не будет). В остальном - берите то, что лучше знаете, что больше нравится, и для чего лучше представляете себе могущие возникнуть сложности. Хуже нет на большом проекте, чем упереться в неочевидный косяк технологии, которая выбрана маркетологами из-за "низкого ТСО".

Ответ 2



Предложение: python + django (вместе с gunicorn), ngnix, postgresql. ОС - можно хоть убунту взять на первом этапе (несложная настройка). Если опишете задачу подробнее - можно порекомендовать какие-нибудь NoSQL БД (как правило, под конкретную задачу можно выбрать удачное решение).

Ответ 3



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

Вывод double числа

#c_sharp #числа #double


Рассчитываю pi
3.141592653589794 - это я вижу в отладчике
3.14159265358979  - это, когда вывожу 
Как мне вывести число полностью?    


Ответы

Ответ 1



Советую ознакомиться с вариантами форматирования вещественных чисел. Для вашего случая подходит описатель формата "R", который гарантирует идентичное число при обратном преобразовании (double.Parse()) Console.WriteLine(pi.ToString("R"));

Чтение файла построчно

#cpp #файлы


Нужно открыть файл и прочитать его построчно, то есть взять первую строку занести
её в переменную, проделать с ней определённые операции, потом брать вторую и т.д.
    


Ответы

Ответ 1



ifstream file(fileName);//создаем объект потока istream по имени file // который инициализируется именем fileName, //вызывается функция file.open(); string str; //переменная стринг для строки while(getline(file,str)) //getline(istream & is, string &s,char c='\n'),читает из потока is, в строку s пока { //не встретит символ c (без этого символа до новой строки) // возвращает свой объект istream, в условии проверяется состояние iostate флагa, значение этого флага будет ложным, если достигнет конца файла, или будет ошибка ввода или читаемого типа fncn(str); // вызываем нужною функцию для полученной строки }

Ответ 2



вот код не вырванный из контекста #include #include // подключаем строки #include // подключаем файлы using namespace std; // используем стандартное пространство имен int main(){ string s; // сюда будем класть считанные строки ifstream file("C:\\PriceList.dat"); // файл из которого читаем (для линукс путь будет выглядеть по другому) while(getline(file, s)){ // пока не достигнут конец файла класть очередную строку в переменную (s) cout << s << endl; // выводим на экран s += "+"; // что нибудь делаем со строкой например я добавляю плюсик в конце каждой строки cout << s << endl; // и снова вывожу на экран но уже модифицированную строку (без записи ее в файл) } file.close(); // обязательно закрываем файл что бы не повредить его return 0; }

Android: Как на кнопке одновременно задействовать два сушателя

#java #android #android_on_click #ontouchlistener


Возникла следующая проблема:

Имеется кнопка у которой необходимо обрабатывать два слушателя. Первый это onTouchListener,
второй onClickListener. Код слушателя onTouchListener() ниже:

OnTouchListener dragt = new OnTouchListener()
     {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            FrameLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
            switch(v.getId())
            {
                case R.id.button1:

                {
                    switch(event.getAction())
                    {
                        case MotionEvent.ACTION_MOVE:
                        {
                            par.topMargin = (int)event.getRawY() - (v.getHeight());
                            par.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                            par.bottomMargin = (int)event.getRawX() - (v.getWidth()/2);
                            par.rightMargin = (int)event.getRawX() - (v.getWidth()/2);
                            v.setLayoutParams(par);
                            break;
                        }
                        case MotionEvent.ACTION_UP:
                        {
                            par.height = 120;
                            par.width = 120;
                            par.topMargin = (int)event.getRawY() - (v.getHeight());
                            par.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                            par.bottomMargin = (int)event.getRawX() - (v.getWidth()/2);
                            par.rightMargin = (int)event.getRawX() - (v.getWidth()/2);
                            v.setLayoutParams(par);
                            break;
                        }
                        case MotionEvent.ACTION_DOWN:
                        {
                            par.height = 150;
                            par.width = 150;
                            v.setLayoutParams(par);
                            break;
                        }
                    }
                    break;
                }
            }
            return true;
        }
     };


Мне же необходимо чтобы при обычном клике срабатывал onClick(). Назначал слушателя
onClickListener - не работает(то есть онтач срабатывает, а онклик нет), назначал кнопке
свойство 
    android:onClick="knopka"

Далее вызывал в активити:

public void knopka(View v) {
       System.out.println("Работай же!!!");
    }


Все равно не работает. Как еще сделать не представляю!
    


Ответы

Ответ 1



Как обычно, читаем документацию: Returns True if the listener has consumed the event, false otherwise. Таким образом, как нетрудно догадаться, вам нужно возвращать из OnTouchListener.onTouch false, а не true.

Автодополнение в Intellij Idea

#java #intellij_idea


Подскажите как в Intellij Idea реализовать такую фичу:

печатаю четыре буквы "psvm" получаю вот такое предложение

public static void main(String[] args){}


на автодополнение?
    


Ответы

Ответ 1



File->Settings->Live Templates: other там собственно psvm а вообще всё тоже самое psvm+TAB ну или меняем кнопку в настройках выше p.s. собственно там полезно покопаться и сделать свои шаблоны, ну или отредактировать существующие

Service или asynctask

#android


Здравствуйте. Нужен совет. У меня в приложении регулярно нужно получать данные с
сервера. И я думаю как это сделать более рационально по ресурсам и по производительности.
Сейчас используется вариант, я получаю асинктаском данные с сервера загоняю их в hashMap
и с ними потом работаю. Второй способ: создать сервис который будет с сервера загонять
данные в базу sqlite, а потом уже с этой базой работать. Какой способ более правильный
по ресурсам, быстродействию?(если надо приведу исходники)
Подробнее теперь. В базе на сервере будет где-то сотни записей, по 20 атрибутов каждая
запись. и каждые секунд 10 нужно будет делать такой запрос на получение всех полей
и всех атрибутов  в виде json массива (почти все эти значения могут изменяться, поэтому
приходится постоянно подгружать все). Потом этот массив я перевожу в удобный для меня
HashMap и пользуюсь им как мне угодно. Я так подумал: сервис скорее всего толще чем
асинктаск, да и обращение к базе будет медленнее чем напрямую к hashMap, поэтому наверно
пока оставлю асинктаски.
хотя я видел довольно похожее приложение как у меня и там было реализовано сервисом.
Маркеры на карте появлялись постепенно, при этом карта была активна. При асинктаске,
нужно ждать пока выполнится задание. Но я не думаю, что это плюс. Например, если зайти
в то приложение, то карта пустая и глупый юзер может не дождаться и просто выключить,
а к асинктаску можно присобачить прогрес диалог и юзер будет ждать пока выполнится
задача.(можно конечно присобачить и к сервису прогресс дайлог но это уже извращение)    


Ответы

Ответ 1



Асинк таски уже использовать не рекомендуется. В крупных банковских приложениях от низ уже ушли. Технология Сервис + Контент провайдер много лучше. Прогресс бар - что мешает прикрутить его к сервису?? У вас должен быть ServiceHelper шлющий коллбэки, по ним и стоит обновлять прогресс бар. Вот официальная спецификация Google для реализации RestAPI при помощи сервисов По быстродействию и ресурсам, даже если вы что то и потеряете, то выиграете в надежности приложения. Потому что даже при критической ошибке сервиса, ваше приложение останется работать. По материалам: Реализация колбэков и прогресс бара, а также самой модели Service + ContentProvider + Activity - Организация архитектуры взаимодействия Activity и Service Еще один пример на эту тему - Написание простого приложения для работы с RESTful API под Android От себя совет, переводите ваши апы на Service + ContentProvider + Activity за этим будущее. На Google IO был доклад на эту тему: Developing Android REST client applications. Кстати там использовалась похожая структура. P.S. Как то проходил собеседование в один крупный банк как Android разработчик, так там как услышали про возможность AsyncTask, чуть не закидали яйцами за само предложение :) :)

SharedPreferences - запретить удаление

#android #защита


При первом запуске, приложение создает определенные SharedPreferences. Вместе с этим,
пользователю выдаётся некий бонус. Если удалить данные приложения в настройках самого
устройства - приложение будет считать что его только что установили, и выдаст бонусы
как для первого посещения. Как можно защититься от этого? Можно ли как-то запретить
пользователю удалять их?
И еще такой вопрос - можно ли как-то "узнать" приложению было ли оно установлено
ранее, чтобы при установке\удалении\установке - приложение понимало, что пользователь
уже устанавливал его и бонус он не получит? )    


Ответы

Ответ 1



Может сделать что-то типа бесплатного In App Purchase? А в Google Play проверять, был ли он куплен хоть когда-нибудь. Я бы копал в эту сторону.

Ответ 2



Регистрируйте юзера на своем вебсервисе. При любом запуске - приложение проверяет, зареган ли юзер, если нет - то регает и дает бонус. Других способов обойти то, о чем вы говорите нет.

Получение идентификатора в iOS 7 (UDID, OpenUDID, UUID, и т.п)

#xcode #ios #objective_c


В приложении требуется получение идентификатора, но так как UDID запретили использовать
еще в iOS 6, я вынужден спрашивать вас :C. Что может заменить UDID? 
Пробовал NSUUID
NSString *uuid = [[NSUUID UUID]
UUIDString];

Меняется после переустановки приложения.
Пробовал "IDFV" Identifier for Vendor:
NSString *idfv = [[[UIDevice
currentDevice] identifierForVendor]
UUIDString];

Но он тоже меняется (и не понятно почему, он бывает снова возвращает старый идентификатор).
Так же хотел попробовать Advertiser Identifier, но ASIdentifierManager и advertisingIdentifier
не распознается xCode. Программа уже готова для обновления в xCode и в iTunesConnect,
уже перед заливкой в iTunes заметил что идентификатор менялся. Пожалуйста подскажите
уже готовым решением, до 18:00 планирую залить в iTunes. Заранее большое спасибо).    


Ответы

Ответ 1



Дак это UIID на то и UIID - он должен быть разным каждую долю сикунды во всем мире один такой. Если вы хотите не изменяемый UIID, то раньше, да использовали идентификатор устройства. В связи с чем рекламщики злоупотребляли сбором данной информации. И теперь эта функция контралируется пользователем. На сегодняший день мы вышли из данной ситуации зпросом MAC адреса GSM/Wi-Fi подулей, после хеша md5-подобной функции мы получили UID. Вот пример реализации: @implementation TCMacAddress + (NSString *)getMacAddress { int mgmtInfoBase[6]; char *msgBuffer = NULL; size_t length; unsigned char macAddress[6]; struct if_msghdr *interfaceMsgStruct; struct sockaddr_dl *socketStruct; NSString *errorFlag = NULL; // Setup the management Information Base (mib) mgmtInfoBase[0] = CTL_NET; // Request network subsystem mgmtInfoBase[1] = AF_ROUTE; // Routing table info mgmtInfoBase[2] = 0; mgmtInfoBase[3] = AF_LINK; // Request link layer information mgmtInfoBase[4] = NET_RT_IFLIST; // Request all configured interfaces // With all configured interfaces requested, get handle index if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0) errorFlag = @"if_nametoindex failure"; else { // Get the size of the data available (store in len) if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) errorFlag = @"sysctl mgmtInfoBase failure"; else { // Alloc memory based on above call if ((msgBuffer = malloc(length)) == NULL) errorFlag = @"buffer allocation failure"; else { // Get system information, store in buffer if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0) errorFlag = @"sysctl msgBuffer failure"; } } } // Befor going any further... if (errorFlag != NULL) { NSLog(@"Error: %@", errorFlag); return errorFlag; } // Map msgbuffer to interface message structure interfaceMsgStruct = (struct if_msghdr *) msgBuffer; // Map to link-level socket structure socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1); // Copy link layer address data in socket structure to an array memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6); // Read from char array into a string object, into traditional Mac address format NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]]; //NSLog(@"Mac Address: %@", macAddressString); // Release the buffer memory free(msgBuffer); return macAddressString; } @end

Ответ 2



Отслеживать устройства запрещено apple. Можете отслеживать пользователей например по их логину но для этого в вашем приложении это должно как-то быть реализовано. Отлеживать сами устройства у вас не получится.

Возможность перевести GC в режим реального времени

#c_sharp #сборщик_мусора #производительность


Недавно увидел что на хабре промелькнула информация о том, что

..в C# есть возможность перевести GC в
режим реального времени (возможность
гарантировать выполнение кода
последовательно без перерыва на сборку
мусора).

может поподробней кто нибудь пожалуйста объяснить как это сделать?    


Ответы

Ответ 1



В пространстве имен System.Runtime имеется статический класс GCSettings, у которого есть свойство LatencyMode, определяющее уровень вмешательства сборщика в работу вашего приложения при выполнении сборки мусора. Подробнее о режимах, регулируемых этим свойством, можно прочитать в этой статье

Android. Проверка на регистрацию реального человека(девайса)

#android #безопасность


Есть клиент серверное приложение с регистрацией. Необходимо, чтобы регистрировался
реальный человек(девайс), а не скрипт посылал пост запросы на регистрацию. Как можно
в этом удостовериться? Вроде, есть у девайса аккаунты. И наверняка возможно проверить
как то (например с помощью гугл апи), что девайс и аккаунт соответствуют. Но как это
сделать?
P.S. конкретнее надо сделать так, что бы злодей не смог зарегистрировать много(100+)
аккаунтов.    


Ответы

Ответ 1



Используйте Oauth 2.0 для андроид. Суть: достаем с девайса аккаунт, генерим для него AccessToken для получения информации о email. И передаем на сервер этот AccessToken и email аккаунта. На сервера по AccessToken запрашиваем у гугла email, и если совпадает с тем, что прислал юзер - можно выдавать свой token, с которым и работать дальше. Авторизация Сама библиотека Блогозапись, которая может помочь При возникновении других вопросов - просто гуглите: информации достаточно.

Ответ 2



Доброй ночи! Можно привязаться к аккаунту Google Play. Таким образом проверять реальность аккаунта перед запросом на регистрацию. Минусом такого подхода - установка только через гугл плей. Второй вариант: перед разрешением любых запросов проводить идентификацию устройства. Самый простой способ, сгенерировать ХЭШ ключ (передав его на сервер вместе с инфой о девайсе единственным разрешенным без него методом АПИ), и сохранить его в SharedPreferences софта, передавать в дальнейшем при каждом запросе к серваку. Это самые простые два варианта, которые на вскидку приходят в голову

Ответ 3



Мне кажется тут нет способа, основанного на специфики девайса. Но, на мой взгляд, схема обезопасить себя от массового создания аккаунтов такая: На момент авторизации ограничить время выполнения запроса (например не чаще 10 секунд на запрос с одного айпишника) Провести взаимо-обмен информацией клиента с сервером на основе набора каких-то случайных правил (и сделать цепочку множественной) например: Клиент отправляет серверу свой уникальный номер (любой, IMEI или всё что угодно) Сервер прибавляет к этому например 10. У сервера и клиента есть параметризованое дерево вопросов и ответов по которому они обмениваются верными ответами и вопросами N раз. Если всё верно - то высока вероятность что клиент - это мобильное приложение. Можно ещё придумать вариантов в этом же духе. Тут главное что должна работать связка сервера с клиентом, решая вопрос только на одной стороне не получится. Можно ещё почитать про приватные и публичные ключи и ssl аутентификацию. Не в плане применения технологий, а в плане использовании аналогичных принципов.

Битовые операции - алгоритм

#битовые_операции #алгоритм #javascript


Доброго времени суток. 
Встала одна интересная задача.
Есть модели данных. Каждая модель имеет свой битовый идентификатор. Например:
User: 0x1
Organization: 0x2
Points: 0x4
.....

У любой модели есть список параметров и есть функция getData(flag), которая которая
возвращает параметры по битовой маске.
Пример:
Model User {
   TYPE: items.TYPE.USER; // 0x1
   getFlags: function() {
      Id: 0x1,
      Name: 0x2,
      Owner: 0x4....
   }
   getData(flag) {
      var dl = this.getFlags();
      var a = {};
      for(var i in dl) {
         var tf = dl[i];
         if(fl & flag) {
            a[i] = this['get' + i]();
         }
      }
      return a;
   }
}

Model Organization { ... }

Задача - реализовать функцию, которая по 2-м параметрам (битовым маскам) будет возвращать
items-ы с необходимой информацией.
Пример:
/**
 * flag - битовая маска модулей
 * info битовая маска информативности по модулям
*/
getItems(flag, info) { ...; return items; };

Например, задача выцепить пользователей, но чтобы мне вернулись только их ID и выцепить
организации, но только чтобы вернулись имена.
Вопрос - как грамотно составить маску info?
flag = User.TYPE + Organization.TYPE
info - ?

И встаёт дополнительный вопрос - как в JavaScript можно оперировать большими битовыми
флагами ? Большие числа будут сокращаться же :-( 
<< 100000000000000000111
>> 100000000000000000000
    


Ответы

Ответ 1



Если я правильно понял задачу, то flag = User.TYPE | Organization.TYPE; // не +. Сейчас разницы нет, но на будущее info = {}; info[User.TYPE] = User.getFlags().Id | User.getFlags().Name; info[Organization.TYPE] = Organization.getFlags().Name; Почему так: внезапно в JS нельзя инициализировать объект с переменными в названиях свойств (в кратком формате). Я только что это узнал %) Объект формата type => mask выбрал потому, что, судя по всему, вы собираетесь работать с большими масками. В другом случае это может быть простой массив масок ((User.TYPE << 16) | User.getFlags().Id) с разбором в функции. По второй части вопроса - динамическая типизация JS + разноразрядность осей съест вам голову. Для работы с "большими масками" лучше использовать массивы, а при проверке передавать еще смещения Т.е. маска в 64 бита - это массив 2 х int32 var mask64 = [ 0x00020000, 0x00200080 ]; , а проверка 62-го бита - это test(0x00000002 /*30-й бит*/ , 1/* смещение в 32 бит */) Как-то так вроде.

Дизассемблирование програмики

#c_sharp #дизассемблирование #reverse_engineering


Доброго времени суток.
Возникла у меня потребность, получить исходный код программки на шарпе, в универе
дали задание написать прогу, и дали пример (.exe). Самому писать лень. Заюзал дизассемблер,
что поставляется вместе со студией, не очень понравился резуальтат. Слишком много пальце-двежений
нужно для создания проекта. Попробовал Dis#, уже лучше, выдало мне много кода и ничего
лишнего, на радостях копи-пастнул все это дело, но возникла ожидаемая проблема с Гуем.
Зато посмотрев код, понял что мне нужно то всего ничего пару значений переменных там
поменять, да кнопочки в другие места расставить. В связи с чем прошу помощи:

Как мне из .exe скомпиленным в более
   старой версии c# создать проект в c#
   2010 с возможностью мышкой потыкать
   вин форму?
    


Ответы

Ответ 1



dotPeek попробуйте

Массив из разных типов [дубликат]

#массивы #хранилище #cpp


        
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            Можно ли хранить объекты разных классов (производных
одного абстрактного класса) в одном массиве или списке?
                                
                                    (3 ответа)
                                
                        
                                Закрыт 2 года назад.
            
                    
Существует ли возможность в c++ сделать массив из разных типов? Или какое-то хранилище-переменную,
в которой можно хранить разнотиповые вещи? У меня есть несколько структур, и массив,
который будет динамически изменяться, и вот хотелось бы как-то добавлять в него значения
разных типов.    


Ответы

Ответ 1



Предложу ещё третий, более с++ способ. Какие разрообразные объекты у Вас не были бы, все равно у них есть общий предок (да, void* - это вырожденный случай и обычно говорит либо о сильной преждевременной оптимизации или просто незнания ООП). Итак, первое - нужно написать базовый класс. От него наследуются другие классы для разных данных. Даже если нужно хранить строку и число. Так как есть базовый класс, то можно написать std::vector vec; и уже есть массив объектов. Пусть нужно вывести всех их на печать. Для этого для каждого наследника нужно определить метод вида friend ostream& operator<<(ostream& os, const YourType& dt); И все, можно будет выводить на печать таким кодом for (int i = 0; i < vec.size(); i++) std::cout << vec[i] << std::endl; Очень просто. Но пусть нужно сохранять объекты и загружать с файла. Добавим в базовый тип виртуальный метод "getObjectType", "getObjectSize", "saveToStream" и "loadFromStream". Каждый наследник должен будет их определить. Теперь при сохранении где то так fstream fs; fs.write(vec.size(), sizeof(size_type)); for (int i = 0; i < vec.size(); i++) { int t = vec[i].getObjectType(); size_t s = vec[i].getObjectSize(); fs.write(t, sizeof(t)); fs.write(s, sizeof(s)); vec[i].writeToStream(fs); } красиво? А вот с загрузкой немного сложнее. Нужно будет хранить массив соответствий "тип объекта"->"ссылка на конструктор". Но при небольшом кол-ве объектов, можно и if-else или switch size_type c; fs.read(c, sizeof(c)); for (int i = 0; i < c; i++) { int t; size_t s; BaseObj* bb; fs.read(t, sizeof(t)); fs.read(s, sizeof(s)); switch (t) { case 1: bb = new IntObject(); break; case 2: bb = new StringObject(); break; //.... default: // unknown object, can skip fs.seekg (s, fs.beg); break; } bb->loadFromStream(fs, s); } upd Главное не забывать делать методы виртуальными, а также сделать виртуальным деструктор. Конечно, если классы не будут иметь общего предка, то все это работать не будет.

Ответ 2



да такое можно сделать, но если вам это понадобилось то скорее всего имеет смысл переделать архитектуру программы. реализовать это можно например в виде велосипеда над указателями Void. или гораздо лучший вариант это использовать boost boost::Any вот тут можно почитать в любом случае, лучше сначала подумать над архитектурой. UPD собственно пример изменения архитектуры привёл KoVadim...

САмостоятельное нажатие клавиши в игре

#макросы


Есть игра в которой каждые 5 - 10 секунд респауниться какой то предмет... Мне его
нужно забирать, для этого нужно нажать клавишу допустим  "F" но это нужно делать очень
и очень долго что бы собрать много и продать... Вот у меня такой вопрос, а можно запрограммировать
клавишу F на самостоятельное нажатие через каждые 5 секунд... Что бы можно было запустить
игру и пойти на работу или просто куда угодно, аоставить только игру включённой и что
бы она сама все собирала?
    


Ответы

Ответ 1



Как раз для таких вещей есть AutoIt.

Ответ 2



Вероятно вам нужен автокликер или же нечто подобное. Посмотрите "Автокликер для клавиатуры" в гугле и пользуйтесь на здоровье) Удачи на "полях сражений" ;)

Ответ 3



Можно. Напрмиер, встроенный в Windows язык VBS: Do sendkeys('f') sleep(5000) Loop Сохраните под названием fkey.vbs Создайте ярлык на этот файл и укажите в свойствах этого ярлыка быстрый запуск(например, ctrl+alt+c) Запускаете вашу игру и нажимаете указанную ранее комбинацию клавиш Profit.

Как сделать что бы Django распознавал кириллицу?

#django


Если в коде встречается кирилличные символы, или что то задокументировано в кириллице
то выдает ошибку, как это исправить глобально для всего проекта, а не только для одного
документа.    


Ответы

Ответ 1



В начале файла # -*- coding: UTF-8 -*- И использовать юникодные строки: str = u'Моя строка'

Ответ 2



Traceback: File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 114. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in wrapper 432. return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in inner 198. return view(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "C:\Python27\lib\site-packages\django\db\transaction.py" in inner 339. return func(*args, **kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in change_view 1232. change_message = self.construct_change_message(request, form, formsets) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in construct_change_message 811. 'object': force_text(added_object)}) File "C:\Python27\lib\site-packages\django\utils\encoding.py" in force_text 108. s = six.text_type(bytes(s), encoding, errors) Exception Type: UnicodeEncodeError at /admin/polls/poll/2/ Exception Value: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

Настоящий джангист [закрыт]

#python #django


        
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        
В связи с поиском работы в области Python/Django возник вопрос: что в Django должен
знать каждый соискатель? Конечно, лучше всего фреймворк изучить досконально, но он
имеет довольно большой объём и его полное изучение займёт значительное количество времени,
а кушать хочется сейчас.    


Ответы

Ответ 1



Боюсь расстроить, но для хорошей востребованности на рынке труда одним фреймворком не обойдешься. Что касательно самого фреймворка - не такой уж он и большой как может показаться на первый взгляд, со временем поймешь. Досконально знать и не нужно - важно уметь ориентироваться в документации. Т.е. если сегодня возникла задача сделать какую-то "фишку", то ты должен знать есть ли средства для этого в приделах фреймворка? Если да, то в каком разделе смотреть документацию? Если нет, то идешь искать сторонние пакеты. И только потом, если ничего не найдешь, пишешь свой велосипед ). Вообще, когда рассматриваешь веб-инструменты как средство заработка, то я бы советовал целиться сразу на конкретную вакансию(в лучшем случае), конкретную компанию или отрасль(на худой конец). Приведу пример двух кардинально отличающихся направления деятельности веб-разработчика: 1. Поподаешь в крупную команду, которая пилит уже несколько лет социальную сеть, где менеджмент внутри конторы налажен добротно и тебе дают работку по твоему уровню, сидишь там API расширяешь и никуда больше не лезешь. 2. Маленькая команда которая параллельно штампует мелкие интернет-магазины по несколько штук в месяц. Там тебе нужно будет быть универсальным солдатом: модели, формы, на фронт лезть, платежные системы прикручивать и т.д. Чувствуется разница? Вот потому конкретного ответа на твой вопрос быть не может.

Регулярка на js “не искать внутри кавычек, но все выражение в кавычках - да”

#регулярные_выражения #javascript


Всем доброго дня! В общем, нужно найти все слова (буквы и цифры), перед которыми
стоит знак минус. Трудность в том, что если это находится где-то внутри кавычек - то
искать не надо.
Примеры. 
    -словоКотороеНайдет этоеНет -этоСноваНадет
    -"этоНайдет полностью и меня и меня"
    "-аВот я ненужен" -аЯНужен
    "и я -неНужен"    


Ответы

Ответ 1



Вот что получилось: /(^|[\s\n])-(([^\s"'][^"']*?)(?=\s)|(["'])([^\s"'][^"']*?)\4)/g Это не сработает "например -"для вот такой конструкции"" "для -этого слова" Перед выражением должен бы пробел, перевод строки или начало текста, а кавычки должны стоять прямо перед и сразу после текста. Это необходимое условие,иначе выражение, оказавшееся между двумя выражениями в кавычках, тоже будет пропускаться. По этой же причине нельзя отследить второе исключение из списка выше: @eicto, да, это пропустит, вы правы. Но отслеживать кавычки обрамлённые пробелами бессмысленно, потому как такая форма проверки отсеит и текст не заключённый в кавычки, а находящийся между двумя фразами в кавычках, потому остаётся предполагать, что кавычки стоят прямо перед текстом, или сразу после него. Так же пропустит "вот -это слово", так как ни одна кавычка не стоит рядом с ним. Если же сделать проверку на наличие кавычек более дотошной, учитывающей такой вариант, то она отсеит -это "слово". Выражение проверяет как двойные, так и одинарные кавычки. Для более тщательной проверки стоит использовать несколько последовательных обработок текста, как советует @VenZell.

Ответ 2



Updated: Второй раз переписал ответ. Отказался от написания одной универсальной регулярки, написав вместо этого несколько фильтров. Посмотреть пример Array.prototype.diff = function (a) { return this.filter(function (i) { return (a.indexOf(i) > -1) ? false : true; }); }; var string = 'неа -словоКотороеНайдет этоНет -этоСноваНадет " -это не нужно ? " -"этоНайдет полностью и меня и меня" -"-аВот я нужен" -аЯНужен "и я -неНужен" vs', badQuotes = string.match(/\-?"[^"]+"/g).diff(string.match(/\-"[^"]+"/g)), temp = ''; badQuotes.forEach(function (item) { temp = temp ? temp.replace(item, '') : string.replace(item, ''); }); var raw = temp.replace(/(\s+)/g, ' ').match(/(\-([^\-"\s]+)+|"[^"]+")/g), filtered = raw.map(function (el) { return el.replace(/^[\-"\s]?|[\-"\s]?$/g, ''); }); console.log(filtered); [ "словоКотороеНайдет", "этоСноваНадет", "этоНайдет полностью и меня и меня", "-аВот я нужен", "аЯНужен" ]

Как склеить строки ?

#perl #shell #sed #linux


Вопрос в заголовке.
Только не все строки. Про tr -d '\n' мне известно.
Пример:
abc
;
fgh
;
"
qwe
rty
"
;
"
asd
"
;
end

В конвейере нужно превратить в:
abc;fgh;"qwe
rty";"asd";end\r

Другими словами, сделать нормальный CSV из вывода, где поля в отдельных строках,
разделитель полей ';' тоже в отдельной строке и поля, которые могут содержать \n, обрамлены
строками '"'. Последний \n надо заменить на \r\n
Для программы (на Си?) я бы  сформулировал задачу просто:
убрать все \n вне "...", а внутри "..." убрать первый сразу за '"'. (на Си писать
не надо, если "однострочник" не получится, то на нем сам как-нибудь напишу).
...
Пока замер на проблеме, что я никак не могу заставить работать что-нибудь типа 
s/\n;\n/;/

ни в sed, ни в perl (т.е. работать с выражением для 2-х строк)
P.S.
python 2.4 тоже подойдет.    


Ответы

Ответ 1



perl -0777 -lpe 'BEGIN{$\="\r\n"}s#\n;\n#;#gsm;s#;"\n#;"#gsm'

Правильное масштабирование фона

#css


Не могу найти правильное решение моей задачи. нужно относительно размера масштабировать
картинку фона(т.е. что бы хотя бы раз она была в полном размере).
для картинок размер которых больше экрана можно использовать
       background-size: 100% auto;

но если картинка меньше экрана, то она просто растягивается. а мне этого не нужно.
как это можно сделать средствами css?     


Ответы

Ответ 1



Попробую объяснить на пальцах. (тут можно потрогать руками рабочий пример) Если написать вот так: .demo { background-image: url(cat.png); background-position: 50% 50%; background-repeat: no-repeat; } Мы передадим такие пожелания браузеру: Вставь на фон блока с классом "demo" картинку с котиком Размести ее, по возможности, в центре этого блока Не надо использовать свойство "замостить", если фоновая картинка меньше этого блока Немного уточним пожелания: .first { background-size: 100px 100px; } Хочу, чтобы фоновое изображение было 100 на 100 пикселей; масштабировать не надо; пропорции сохранять не надо Попробуем иначе: .second { background-size: contain; } Хочу, чтобы фоновое изображение заняло максимальную область блока, при которой сохранит свои пропорции и будет видно целиком И последний вариант: .third { background-size: cover; } Хочу, чтобы фоновое изображение закрыло блок целиком, оно не обязательно должно быть видно целиком, главное, чтобы сохранились пропорции Поскольку мы в самом начале указывали расположение фонового изображения в центре блока, в первую очередь будет видна центральная часть изображения. Это можно изменить с помощью свойства background-position Что в итоге получится (первый, второй и третий примеры один под одним):

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

#oracle #sql


Есть две таблицы - А и В.
create table a (
    KEY1 number
);

create table b (
    KEY2 number,
    KEY3 number
);

Нужно проверить, что для каждой записи таблицы А нет записей в таблице B по условию
A.KEY1 = B.KEY2. Если же записи есть, то для каждой такой записи таблицы В проверить
что нет записей в таблице А по условию В.KEY3 = A.KEY1.
Реализовал так:
SELECT *
FROM A
WHERE NOT EXISTS
(SELECT *
 FROM   B 
 WHERE  A.KEY1 = B.KEY2
 AND    B.KEY3 NOT IN (SELECT KEY1 FROM   A))

Есть другие варианты выполнить этот же запрос?    


Ответы

Ответ 1



select * from A where key1 not in(select key2 from B) union all ( select * from A where key1 in(select key2 from B) intersect select * from a where key1 not in(select key3 from b) )

Ответ 2



Для такой комбинации данных: A | B key1 | key2 key3 1 | 3 2 2 | 4 7 3 | 5 8 ожидается a.Key1 1 и 2, т.е две строчки. Правильно надо так: select * from a where not exists (select 1 from b where key1=key2) union all select * from a where exists ( select 1 from b where a.key1=b.key2 and not exists (select 1 from a aa where aa.key1=b.key3) );

Темизация таксономии Drupal 6

#drupal


Как переопределить стандартный шаблон вывода таксономии в Drupal 6 (везде натыкаюсь
только на howto для 7 версии).
    


Ответы

Ответ 1



также добавлю , что шаблон node-taxonomy.tpl.php по умолчанию не определен - его надо определить в файле template.php вашей темы function ИМЯТЕМЫ_preprocess_node(&$vars) { if(arg(0) == 'taxonomy'){ $suggestions = array('node-taxonomy'); $vars['template_files'] = array_merge($vars['template_files'], $suggestions); } }

Ответ 2



чтобы темизировать материалы выводимые на странице терминов используйте шаблон node-taxonomy.tpl.php чтобы темизировать страницы терминов используйте page-taxonomy-term.tpl.php

Извлечение случайного значения из массива в Visual Basic 2010

#массивы #php #visual_basic


Начал изучать Visual Basic и столкнулся с проблемой. Нужно сделать символьный массив
и получить случайное значение из этого массива в переменную. Я только начал изучать
Visual Basic, но на php это бы выглядело как:
$mass = array("lalka", "fsdfsd546", "heyt");//массив с названием $mass
$per = array_rand($mass, 1);//Извлекаю из этого массива одно значение в переменную
echo ($per);//Вывожу сообщение

Прошу написать как этот код будет выглядеть в Visual Basic.    


Ответы

Ответ 1



Поймите: Visual Basic и VB.NET - практически одно и тоже (синтаксис очень схож), отличие в том, что VB.NET[Visual Basic .NET] работает на платформе .NET Framework. Вы просите код на "Visual Basic 2010". Ппрактически, это он и есть, этот код будет работать и в "Visual Basic 2008", "Visual Basic 2005", и даже в "VS Express 2013 for Desktop"(который содержит Visual Basic). Почитайте спецификацию и определение Visual Basic 6/VB.NET/.NET Framework. Повторюсь, лучше учите C# (тоже на платформе .NET Framework)! Сама функция: Public Function RandomWord() ' Случайное число Dim rnd As New Random() ' Ваш массив: Dim massive() As String = {"lalka", "fsdfsd546", "heyt"} ' Случайное число, ограниченное количеством строк массива Dim random As Integer = rnd.Next(massive.Length) ' Вернуть результат: Return massive(random) End Function Затем используйте функцию, функция возвращает string: Dim randomword As String = RandomWord() И делайте вывод при помощи MessageBox.Show(randomword), Console.WriteLine(randomword) или другими

Ответ 2



Вариант Sub RndStr() Dim ArrStr() Dim sStr As String ArrStr = Array("lalka", "fsdfsd546", "heyt") Randomize sStr = ArrStr(Int((UBound(ArrStr) + 1) * Rnd)) MsgBox sStr End Sub

Sockets client+server with await/async c# 5.0

#c_sharp #async_programming #async_await


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

Проблема такова. Хочу написать простое асинхронное клиент-серверное приложение с
банальной передачей байт. Удалось найти и реализовать 2 решения: колбэки и await/async
базирующиеся на tcplistener и networkStream. Но это все не то. Пытаюсь написать базируясь
на Task, Sockets и async/await без tcplistener и networkStream. Почитал некоторую литературу,
но необходимого ответа/примера не нашел. 

Знаю, что делается это базируясь на следующем:

public static Task ConnectAsync(this Socket socket, EndPoint remoteEP) {
    return Task.Factory.FromAsync(socket.BeginConnect, socket.EndConnect, remoteEP,
null);
}


но пока ничего не выходит. Даже сервер не могу "собрать" воедино. Прошу помощи.

Обновление

Удалось подключиться.А вот с передачей пока не получается.

private readonly Socket _server;
public ServerSocket(IPAddress ipAddress, int port) {
    _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    _server.Bind(new IPEndPoint(ipAddress, port));
    _server.Listen(20);
    Console.WriteLine("Wait connection");
    Accept();
}
private async void Accept() {
    for (;;) {
        var socket = await Task.Factory.FromAsync < Socket > (_server.BeginAccept,
_server.EndAccept, true);
        Console.WriteLine("Connected");
    }
}

    


Ответы

Ответ 1



Для начала, правильный путь — это именно async/await. По поводу работы с сокетами, вот есть хороший обзор. Итак, создаём серверный сокет: public ServerSocket(IPAddress ipAddress, int port) { _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _server.Bind(new IPEndPoint(ipAddress, port)); _server.Listen(20); } Здесь мы создали сокет, но основная работа у нас не мгновенна, поэтому выносим её в метод Run. Task AcceptAsync() { return Task.Factory.FromAsync( _server.BeginAccept, _server.EndAccept, null); } public async Task Run() { while (true) { var client = await AcceptAsync(); var clientServeTask = ServeClient(client); // что дальше делать с этим заданием - ваше дело // например, вы можете просто записать его в список } } ConnectAsync для сервера не нужен. В ServeClient инстанциируеем объект, представляющий клиента: async Task ServeClient(Socket client) { using (var c = new Client(client)) await c.RunAsync(); } В объект Client лежит собственно логика вашего сервера. byte[] greeting = Encoding.UTF8.GetBytes("Hi, I'm server ru.SO/2015"); public async Task RunAsync() { await SendAsync(greeting); var result = await ReceiveAsync(20); // ... } (Возможно, вам захочется вернуть результат.) Ну и вспомогательные процедуры: Task TrySendAsync(byte[] buffer, int offset, int size, SocketFlags flags) { return Task.Factory.FromAsync( _clientSocket.BeginSend, _clientSocket.EndSend, buffer, offset, size, flags, null); } Task SendAsync(byte[] buffer) { int sent = 0; int remaining = buffer.Length; while (remaining > 0) { var partSent = await TrySendAsync(data, sent, remaining, SocketFlags.None); sent += partSent; remaining -= partSent; } } Не забудьте закрыть клиентский сокет в Dispose. Да, наверняка вам захочется суметь оборвать работу сервера. Для этого вам стоит протянуть CancellationToken'ы через Task'и.

Ответ 2



Могу посоветовать пример из другого вопроса - https://ru.stackoverflow.com/a/516728/192004 . Там создается 10 клиентов, сервер поочередно принимает их и отправляет ответы. Сервер работает в одном потоке (точнее, в одной Task), клиенты могут работать в разных потоках. Всё на async/await + куча советов.

В терминале не выводится строка перед длительной операцией

#terminal #cpp #sublime_text


Работаю в Ubuntu 14.04 x86, Sublime Text 2 + терминал 

Странность высветилась во время вывода строки перед длительной операцией. Я использовал
выделение большого кол-ва памяти:

MyType* type;
long int MyNumber = 3000000;

cout << "Initialization... ";
MyType* type = new MyType[MyNumber];
cout << "Done! << endl;


По всей логике вывод терминала должен быть следующим:

Initialization...*пауза* Done!


Но по какой-то причине пауза проходит вначале, а две строки выводятся одновременно.

*пауза* Initialization... Done!


После добавления к выводу первой строки команды endl первая надпись срабатывает так,
как нужно.

Initialization...
*пауза*
Done!


Что за особенность работы терминала такая?
    


Ответы

Ответ 1



Это не особенность терминала, а свойство всех буферизированных потоков вывода. Пока не будет вызван метод flush(), или в поток не попадёт \n - данные из буфера не будут переданы на устройство.

Сложный запрос UPDATE

#запрос #sql


Необходимо обновить ячейку таблицы в БД ситуация осложняется тем что в таблице к
одному id может быть несколько записей, а нужно лишь к одно из них.
Придумал такую штуку
UPDATE ".pref."iq_history  SET  hod='поле1'  WHERE ind=(SELECT MAX(ind) FROM tests_iq_history
WHERE user_id='id_ пользователя'

но она не работает, позже прочитал что UPDATE не работает с внутренним селектом по
той же таблице, советуют делать INNER JOIN, но я что то не могу покумекать как правильно
сделать запрос..    


Ответы

Ответ 1



У вас есть возможность добавить автоинкрементный PRIMARY KEY к вашей таблице tests_iq_history? Если да, то выборка бы упростилась Если нет, то может разбить на 2 запроса? maxId = SELECT MAX(ind) FROM tests_iq_history WHERE user_id='id_ пользователя'; UPDATE ".pref."iq_history SET hod='поле1' WHERE ind=maxId Но, честно говоря, использование MAX на большом объеме данных будет крайне медленно. Вероятно, лучше переписать так: maxId = SELECT ind FROM tests_iq_history WHERE user_id='id_ пользователя' ORDER BY ind DESC LIMIT 1; Но тут надо быть осторожным, т.к. может использоваться файловая сортировка, поэтому надо экспериментировать с PRIMARY KEY/UNIQUE по нескольким полям

Ответ 2



Можно сделать вложенный внутренний подзапрос. UPDATE `".pref."iq_history` SET `hod`='поле1' WHERE `ind`=(SELECT `ind` from (SELECT MAX(`ind`) FROM `tests_iq_history` WHERE `user_id`='?')x); или UPDATE `".pref."iq_history` SET `hod`='поле1' WHERE `ind`=(SELECT `ind` from (SELECT `ind` FROM `tests_iq_history` WHERE `user_id`='?' ORDER BY `ind` DESC LIMIT 1)x); Любопытно, что в разных версиях MySQL запросы выполняются по-разному. Поэтому стоит использовать EXPLAIN и при необходимости добавлять индексы. Для второго запроса, к примеру, (user_id, ind).

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

#java #android #service #сервисы


Как остановить сервис через некоторое время после его старта. Допустим, служба проработала
минуту, теперь надо её убить.    


Ответы

Ответ 1



Попробуйте так: то, что вы напишите в "run" исполнится через количество миллисекунд, заданных числом в конце метода. final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // Сделать что-то чрез 60с = 60 000мс //Тут останавливать сервис context.stopService(new Intent(context, Service.class)); } }, 60000); Соответственно поместите этот кусок кода в метод, коий запускается при старте сервиса.

Редактирование сайта прямо с хостинга

#cms #веб_программирование #хостинг


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


Залить весь сайт и базу на комп, расшарить их на локальной машине, после изменений
заливать обратно, минусы - очень гемморно, большие объемы передавать приходится, ну
и пока сайт на локальной доработке, его оригинал могут пополнить материалами, которые
после закачки новой версии похерятся.


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


В общем, матерые веб девелоперы, как осуществлять сие действие по всем правилам этикета
=)    


Ответы

Ответ 1



Сделать копию сайта и базы в подпапке на хостинге, и дорабатывать ее. Когда все готово, глубокой ночью, перенести из старой базы измененный/добавленный за это время контент; проверить все еще раз, и поменять "сайты" местами. Если что-то пойдёт не так, ещё можно будет откатиться назад относительно безболезнено. Если же совсем всё сложно, надо объявить комендантский час, и запретить на какое-то время юзерам что-то менять в базе — read only. Заранее спланировать, сколько примерно времени понадобится, удвоить его, и торжественно объявить всем: такого-то числа с 8 до 16 отключаем горячую воду!

Ответ 2



какие есть способы облегчения жизни веб разработчика Работать в той же среде, что и хостинг. То есть - не в Windows (если, конечно, хостинг не виндовый, но люди, сознательно идущие на это, подобных вопросов не задают).

Ответ 3



Код сайта можно редактировать через различные IDE (типа NetBeans или Eclipse). Создав специальный проект подключенный к вашему сайту. Любое изменение, которые вы сделаете в среде разработки будет сохранено на сайте. Среды разработки также поддерживают синхронизацию с системами контроля версий git и svn. А с базой можно работать со стандартного клиента, который идет с субд MySql или oracle, подключившись к удаленной базе.

Конструкторы и операторы копирования

#конструктор #cpp


Могу ли я записать конструктор копирования через оператор присваивания?
Например вот так:
A::A(const A * a) {
    *this = a;
}

A &A::operator=(const A * a) {
    delete str;
    str = new char[strlen(a->str)+1];
    strcpy(str, a->str);
    return *this;

}

Еще хочется уточнить, правильно ли если я делаю A * a в примере выше, потому примеры
с разных сайтов A & a. C этого всплывает вопрос, что должен возвращать оператор присваивание:
A &A::operator=(const A * a)

или 
A * A::operator=(const A * a)

Вообщем правильный ли мой код выше?
Объект класса создается так A * a = new A();    


Ответы

Ответ 1



Конструктор копирования можно написать через оператор присваивания, не вопрос. Только то, что вы пишете — это не конструктор копирования и не оператор присваивания. Для них аргументом является экземпляр класса, а не указатель на него. Код неправильный ещё и по другой причине: вы не учитываете случай копирования объекта в себя. Сигнатура конструктора копирования обязана быть A(A& a) или A(const A& a) (есть ещё немного экзотических возможностей, вот документация), всё остальное, в частности, то, что у вас — не конструктор копирования. Сигнатура оператора копирующего присваивания (а начиная с C++11 возможен и перемещающий) обязана быть A& operator= (A a) или A& operator= (const A& a) (документация), всё остальное — не оператор копирующего присваивания. В частности, у вас просто конструктор из стороннего типа, и оператор присваивания значения стороннего типа. Указатель на A для A — сторонний тип.

Ковариантность возвращаемых типов

#java


В книге Thinking in Java (Bruce Eckel) есть такой код:
Собственно интересует место с комментарием //Covariant return. Откуда тут ковариантность
вообще?
//: interfaces/interfaceprocessor/Processor.java 
package interfaces.interfaceprocessor;

public interface Processor { 
  String name(); 
  Object process(Object input); 
} ///:~

//: interfaces/interfaceprocessor/Apply.java 
package interfaces.interfaceprocessor; 
import static net.mindview.util.Print.*;

public class Apply { 
  public static void process(Processor p, Object s) { 
    print("Using Processor " + p.name()); 
    print(p.process(s)); 
  } 
} ///:~

//: interfaces/interfaceprocessor/StringProcessor.java 
package interfaces.interfaceprocessor; 
import java.util.*;

public abstract class StringProcessor implements Processor{ 
  public String name() { 
    return getClass().getSimpleName(); 
  } 
  public abstract String process(Object input); 
  public static String s = 
    "If she weighs the same as a duck, she’s made of wood"; 
  public static void main(String[] args) { 
    Apply.process(new Upcase(), s); 
    Apply.process(new Downcase(), s); 
    Apply.process(new Splitter(), s); 
  } 
}

class Upcase extends StringProcessor { 
  public String process(Object input) { **// Covariant return** 
    return ((String)input).toUpperCase(); 
  } 
}

class Downcase extends StringProcessor { 
  public String process(Object input) { 
    return ((String)input).toLowerCase(); 
  } 
}

class Splitter extends StringProcessor { 
  public String process(Object input) { 
    return Arrays.toString(((String)input).split(" ")); 
  }  
}
    


Ответы

Ответ 1



Идея очень простая: вы имплементируете метод Object process(Object input) интерфейса Processor методом String process(Object input). Где на самом деле находится метод — в абстрактном классе StringProcessor или в его реализации Upcase — в принципе не так важно, и является скорее теоретическим вопросом. Главное тут то, что тип возвращаемого значения является подтипом требуемого интерфейсом типа.

Как разбить большой .sql-файл на несколько маленьких?

#sql #mysql


Есть .sql-файл (68 GB, 1 таблица). Нужно как-то его расчленить на несколько файлов,
чтобы запихать в БД.

Ничто его не открывает.
SQLDumpSplitter его не делит.

Как быть?    


Ответы

Ответ 1



Вариант1: mysql -h localhost -u user -p mydatabase < cat mybigfile.sql ? Вариант2: заходим в консоль mysql (mysql -u user -p) USE yourdatabase; SOURCE /path/to/the/sql/dump/mybigfile.sql; Дополнение к варианту2 со StackOverflow: mysql -u root -p set global net_buffer_length=1000000; --Set network buffer length to a large byte number set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour source file.sql --Import your sql dump file SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete! ps; если бы написали с какими ошибками вылетает было бы намного проще предложить workaround :)

Центрирование изображения в блоке меньшего размера.

#jquery #вёрстка #javascript


Имеется div заданной высоты, ширина у div в процентах. В div вставлено изображение.
При разрешении экрана более 1024 изображение центрируется. При разрешении равном или
менее 1024 оно обрезается с одного края, т.к. ширина блока становится меньше ширины
изображения. Как можно в таком случае горизонтально центрировать изображение средствами
js и обрезать его с обоих боков? 
Вариант с изменением размеров изображения не подходит, т.к. по высоте div фиксирован
и изображение должно занимать его полностью.
HTML:
CSS: .box { width: 21%; height: 70px; background: #222; float: left; text-align: center; margin: 20px 2%; overflow: hidden; }


Ответы

Ответ 1



@x01x, на моё предложение в комментарии, вы не отреагировали. Значит, могу предложить такой вариант решения вашей задачи. Только учтите, что решение не очень кроссбраузерное. .box { position: relative; display: inline-block; width: 21%; height: 70px; margin: 5px; text-align: center; border: 1px solid #999; overflow: hidden; } .box img{ position: absolute; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); } UPD Вариант с JS var box = $('.box'), img = $('img', box), imgW = img.width(); $(window).resize(function(){ img.css({ marginLeft: (box.width() - imgW) / 2 }); }).resize();

Django сохранение изображения из формы

#django


Подскажите как сохранить на сервер изображение, указанное в форме.

С формы информацию в бд сохраняю, считывая get или post запрос. Т.е. получается что
я должен принять путь к изображению, но вот как его сохранить?



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

caption = request.POST['caption']
preDescription = request.POST['preDescription']
description = request.POST['description']
image = request.POST['image']


Потом уже использовать вот это?

image = models.ImageField(upload_to='news')




Сделал:

models.py

from django.db import models

class News(models.Model):

    caption = models.CharField(max_length=30)
    preDescription = models.CharField(max_length=100)
    description = models.CharField(max_length=300)
    image = models.ImageField(upload_to='news')


forms.py

from django import forms
from anime.models import *

class NewsForm(forms.Form):

class Meta:
     model = News


views.py

def addnews_status(request):

    a = NewsForm(request.POST)
    a.save()


Пишет вот что - 'NewsForm' object has no attribute 'save'.

Ошибку я перевести могу, но я не понимаю почему его нет? Делал всё как положено.
Я хотя бы на верном пути?
    


Ответы

Ответ 1



С формы информацию в бд сохраняю, считывая get или post запрос. Неправильно делаете. Почитайте про ModelForms, там все работает абсолютно автоматически.

Ответ 2



class MyForm(ModelForm): class Meta: model=MyModel def handler_view(request): form = MyForm(request.POST, request.FILES) if form.is_valid(): form.save() читаем документацию! хотябы наискосок

Распарсить json

#json #php #синтаксический_анализ


Добрый вечер.
Так как я не очень силен в php однако пишу сейчас vk-api приложение, хотелось бы
узнать следующее: как в PHP можно распарсить json? Знаю что через json_decode, но как
именно не знаю. Хотелось бы записать строчку id в переменную.
Сам JSON:
response: [{
id: 123456,
first_name: 'First',
last_name: 'Name'
}]
    


Ответы

Ответ 1



$responseJson = "[{ id: 123456, first_name: 'First', last_name: 'Name' }]"; // ваш пример строки $response = json_decode($responseJson, true); // преобразование строки в формате json в ассоциативный массив $id = $response[0]['id']; // ваш искомый id Документация: JSON json_encode() json_decode() работа с массивами

Apple push notification - как правильно отобразить нужный контроллер?

#objective_c #ios #apple #ios7


Доброе время суток! В общем столкнулся с проблемой, приходит уведомление, скажем
"Вам пришло новое сообщение", мне необходимо открыть чат с этим пользователем, но что
бы попасть в чат, нужно прочти 3 экрана от стартового, либо же пользователь не выходит
с приложения, а заблокировал телефон на контроллере чата, подскажите пожалуйста, каким
образом нужно/можно/будет правильно открывать нужный контроллер? Если к нему нужно
добиратся через 3-9 земель? или не наоборот?
Заранее спасибо за помощь!     


Ответы

Ответ 1



Думаю здесь больше зависит от архитектуры приложения. Вот у меня, например, несколько NavigationControllers и у каждого есть переход в чат. Дак контрол чата принимает на вход модель собеседников и таким образом я могу его вызвать в любом месте через пуш, сформулировав перед этим все модели данных для чат контрола. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UINavigationController *navController = (UINavigationController *)self.window.rootViewController; NotificationViewController *notificationViewController = [[NotificationViewController alloc] init]; [navController.visibleViewController.navigationController pushViewController:notificationViewController]; } Но в этом примере я пушаюсь сразу же в чат без промежуточных экранов. Если же задача стоит именно пропушиться туда где чат пройдя по промежуточным экраном, то тут нужно придумать какой-нибудь алгоритм переходов с неким path пушей экранов с анимацией, с блоком завершения анимации и пушингом следующего контрола в path . В общем много вариантов, на самом деле, все зависит от ТЗ.

Одновременная работа и обновление ListView

#android #listview


Доброго времени суток, форумчане!
Создаю мобильное приложение в Android Studio. столкнулся с такой проблемой:
Принцип работы активности:

Отправляется POST запрос на сервер
Получаем обратно информацию в JSON формате
Обновляем полностью ListView

Нужно следующее:
Если я прокручиваю список ListView и останавливаюсь на середине списка, то при автоматическом
обновлении ListView, я так же должен остаться на середине списка.
Реализовано:
//создаем адаптер и отправляем ему ArrayList(groups, locations) а так же context(PZakazi.this)
ExpListAdapter adapter = new ExpListAdapter(getApplicationContext(), groups, locations,
PZakazi.this);
adapter.notifyDataSetChanged();

//отключаем видимый Scroll
 listView.setScrollContainer(false);

//сохраняем положение ListView
Parcelable state = listView.onSaveInstanceState();

//обновляем ListView
listView.setAdapter(adapter);

//Восстанавливаем положение ListView
listView.onRestoreInstanceState(state);

Все работает замечательно! но есть НО!
Когда происходит ошибка?
Если запустить данную активность, и начать шевелить пальцем ListView туда<->сюда,
быстро то выбивает следующую ошибку:
Ошибка:
FATAL EXCEPTION: main
 java.lang.IllegalStateException: The content of the adapter has changed but ListView
did not receive a notification. Make sure the content of your adapter is not modified
from a background thread, but only from the UI thread. [in ListView(2131230815, class
android.widget.ExpandableListView) with Adapter(class android.widget.ExpandableListConnector)]

Я приблизительно(на 80%) понимаю из-за чего это происходит, но не понимаю как именно
исправить это..
Альтернатива:
Или возможно есть альтернативный способ обновить ListView, сохранив его позицию? 
Очень нужна ваша помощь!    


Ответы

Ответ 1



@Fabien Вы создаете адаптер, потом notifyDataSetChanged, а потом устанавливаете этот адаптер ListView. Декларативно оно все верно, но вот только notifyDataSetChanged должен быть в самом конце. Данная ошибка возникает почти всегда, если кол-во элементов адаптера изменилось (по отношению к ListView. А присвоить адаптер, это почти всегда поменять кол-во элементов), а notifyDataSetChanged не был отправлен до того момента, когда ListView решил обновиться.

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

#jquery #html #javascript


Например, как на этом сайте (меню с правой стороны).    


Ответы

Ответ 1



http://jsfiddle.net/Azsv5/ CSS *{ padding: 0; margin: 0; } body{ font: 14px/20px tahoma; } nav { background-color: #f9fbfc; background-image: -moz-linear-gradient(center top , #fff, #f1f5f7); background-repeat: repeat-x; border: 1px solid #b6c9d4; border-collapse: separate; border-radius: 3px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); font-size: 14px; min-height: 40px; line-height: 38px; margin: 0 0 100px; position: fixed; top: 0; right: 0; width: 180px; } nav ul { margin: 0; } nav li { font-weight: bold; list-style: none outside none; } nav .current a, nav a:active { background: none repeat scroll 0 0 #f1f5f7; border-collapse: separate; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2) inset; } nav a { border-radius: 0; border-right: 1px solid #b6c9d4; display: block; height: 38px; margin: 0; padding: 0 20px; color: #3780aa; text-decoration: none; } nav a:hover { background: rgba(55, 128, 170, 0.149); text-decoration: none; } div{ margin-bottom: 100px; padding: 20px 10px 0; width: 350px; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; } JavaScript $(document).ready(function(){ $('a[href*=#]').bind("click", function(e){ var anchor = $(this); $('html, body').stop().animate({ scrollTop: $(anchor.attr('href')).offset().top - 0 }, 500); e.preventDefault(); }); return false; }); HTML

Раздел 1

Раздел 2

Раздел 3

Раздел 4



Ответ 2



Если вам не нужна анимация, а только прокрутка до нужного места, то значит, что вы прогуливали "первые уроки первой четверти по самым основам HTML" Обновление Сейчас нет особо времени на создание чего-то более нового, поэтому посмотрите такое старенькое решение, которое я делал для аналогичной задачи.

Восстановить содержимое файла [закрыт]

#notepad++ #восстановление #css


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Столкнулся с такой проблемой - редактировал файл style.css через Notepad++. Редактор
выдал ошибку и закрылся сам, после открытия файла - он оказался пустой, потерялся код
в 500+ строк.

Возможно ли как-то восстановить файл?

UPD: Файл восстановил, нашел кеш в папке 

C:\Users\{user_name}\AppData\Roaming\Notepad++

    


Ответы

Ответ 1



Попробуйте поискать в путях, указанных здесь Я понимаю, что вопрос совсем про другое, но рекомендую ознакомиться с замечательной системой git (ссылка на мануал), которая может спасти вас еще много раз (лично меня - не далее как вчера). Не думайте, что "не доросли" до такого уровня, или что это какие-то лишние знания, слишком сложно и пр. - проблема у вас уже появилась на этом уровне знаний. Ответ из комментария @Etki. Еще вариант ответа: Кэш Notepad++, из которого можно восстановить утерянный файл, находится по следующему пути: C:\Users{user_name}\AppData\Roaming\Notepad++.

Проверить, принадлежит ли какая-либо точка отрезка заданной (заданным) окружностям

#cpp #геометрия


Привет. Прошу помощи. В общем задача: на координатной плоскости задается отрезок
с началом в точке А и с концом в точке В. Также задаются круги (можно и 1 круг) с центрами
в точках M1,M2,M3,...M100 и с радиусами R1,R2,R3,...,R100. Нужно проверить, принадлежит
ли какая-либо точка отрезка заданной (заданным) окружностям.
В общем-то это задача из олимпиады, код компилируется на сервере. Мой код: http://ideone.com/J5MJEH 
double xA, yA, xB, yB;
int count = 0;
int n;

cin >> xA >> yA >> xB >> yB; // Координаты A и B отрезка: 
cin >> n; // Количество окружностей

double * * Arr = new double * [3]; // Задаем массив для кругов, в каждой строчке
которого будут хранится x,y,r круга
for (int i = 0; i < n; i++)
    Arr[i] = new double[3];

for (int i = 0; i < n; i++) {
    for (int j = 0; j < 3; j++) {
        cin >> Arr[i][j];
    }
}
double r12 = sqrt((xB - xA) * (xB - xA) + (yB - yA) * (yB - yA)); // Длина отрезка
от A до B
for (int i = 0; i < n; i++) {
    double r1 = sqrt((Arr[i][0] - xA) * (Arr[i][0] - xA) + (Arr[i][1] - yA) * (Arr[i][1]
- yA)); // Длина отрезка от т. M до A
    double r2 = sqrt((Arr[i][0] - xB) * (Arr[i][0] - xB) + (Arr[i][1] - yB) * (Arr[i][1]
- yB)); // Длина отрезка от т. M до B

    if (((r12 * r12 + r1 * r1) - r2 * r2) >= 0 && ((r12 * r12 + r2 * r2) - r1 * r1)
>= 0) { // Если перпендикуляр опущенный на прямую, проведенную через A u B лежит на
отрезке AB, то проверяем, равен или больше ли радиус окружности
        double d = (abs((yB - yA) * Arr[i][0] + (xB - xA) * Arr[i][1] + (xA * yB
- yA * xB))) / sqrt((yB - yA) * (yB - yA) + (xB - xA) * (xB - xA));
        if ((Arr[i][2] - d) >= 0) {
            count++;
        }
    } else { // Иначе, если перпендикуляр опущенный на прямую лежит вне отрезка,
то проверяем, равен или больше ли радиус одному из отрезков от точки М до А или В
        if ((Arr[i][2] - r1) >= 0 || (Arr[i][2] - r2) >= 0) {
            count++;
        }
    }
}
cout << count;

В комментариях кода написал, что,где, как нахожу.
То, как определить, падает ли перпендикуляр на отрезок, я взял отсюда: http://algolist.manual.ru/maths/geom/misc/perp.php,
а именно неравенства: B2 <= A2 + C2, C2 <= A2 + B2.
В общем-то программа работает, но, вероятно, не всегда правильно. Уже достаточно
много перепробовал тестовых примером, всё правильно определяет. Но, когда отправляю
решение на сервер олимпиады, сервер говорит: "Wrong Answer". Я все грешу на типы. Сможете
помочь?     


Ответы

Ответ 1



Вы не проверяете случай, когда часть отрезка лежит в одной окружности, а часть - в другой. Например, A(10, 10), B(10, 20), M1(10, 10), R1(5), M2(10, 20), R2(5). тут половина отрезка лежит в первой окружности, а половина - во второй. http://ideone.com/TdMCuz Я бы предложил следующий алгоритм. Для каждой окружности проверяем, лежит ли отрезок в ней полностью (т. е. лежат ли оба конца отрезка внутри окружности). Если да, то ответ - "да", выходим. Если оба конца отрезка вне окружности, переходим к следующей окружности. Если один конец внутри, а другой - снаружи, то обезаем отрезок, оставляя только ту его часть, что снаружи, и продолжаем проверки. Если после проверки всех окружностей остался ненулевой участок отрезка, ответ - "нет".

Ответ 2



Проверку того, что какая-либо точка отрезка принадлежит окружности, можно заменить на проверку всего лишь трёх точек: концов отрезка и проекции центра окружности на прямую, содержащую отрезок (третью точку берём только если она принадлежит отрезку). Вы же проверяете третью точку, но не проверяете края. То есть, теряете случай, когда очень короткий отрезок пересекает границу окружности. (Плюс наверное где-то ошибки реализации из-за очень «низкоуровневого» кода.) Реализация не очень сложна (но придётся вспомнить геометрию за 9-ый класс): bool GetProjection(const Segment& segment, const Point& source, Point& projection) { Vector direction = segment.end - segment.begin; double segmentLength = direction.Length(); Vector unitDirection = direction / segmentLength; Vector beginToSource = source - segment.begin; double projectionLength = scalarProduct(unitDirection, beginToSource); if (projectionLength < 0 || projectionLength > segmentLength) return false; projection = segment.begin + unitDirection * projectionLength; return true; } bool IsPointInCircle(const Point& point, const Circle& circle) { var radiusVector = point - circle.center; return radiusVector.Length() <= circle.radius; } bool AnyPointInCircle(const Segment& segment, const Circle& circle) { Point projection; return IsPointInCircle(segment.begin, circle) || IsPointInCircle(segment.end, circle) || (GetProjection(segment, circle.center, projection) && IsPointInCircle(projection, circle)); } Классы Point, Vector и прочие определяются самоочевидным образом.

Ответ 3



На рисунке изображены два случая непересечения отрезком окружности: Когда прямая не пересекает окружность. Когда прямая пересекает окружность, а отрезок не пересекает. Для каждой окружности (R,M) и отрезка AB можно применить следующий алгоритм: Вычисляем коэффициенты уравнения (A+qB)/(1+q) on (R,M), или (xa + q* xb - (1+q)* xm)2 + (ya + q* yb - (1+q)* ym)2 = (1+q)2*R2: С2q2+2C1q+C0 = 0, где C0 = (xa - xm)2 + (ya - ym)2 - R2, C1 = (xa - xm) * (xb - xm) + (ya - ym) * (yb - ym) - R2, C2 = (xb - xm)2 + (yb - ym)2 - R2. Если C0 <= 0, точка A попала в круг. Если C2 <= 0, точка B попала в круг. Если det = C12 - C0C2 <= 0, прямая АB с кругом не пересекается. Вычисляем корни уравнения q1 и q2 (если есть). Если q1 >= 0 ИЛИ q2 >= 0, то попали. Иначе не попали. Программа: function are_crossed($a, $b, $r, $m){ $rr = $r*$r; $am = array($a[0] - $m[0], $a[1] - $m[1]); // вектор AM $bm = array($b[0] - $m[0], $b[1] - $m[1]); // вектор BM $eq = array( $am[0]*$am[0] + $am[1]*$am[1] - $rr, $am[0]*$bm[0] + $am[1]*$bm[1] - $rr, $bm[0]*$bm[0] + $bm[1]*$bm[1] - $rr ); $det = $eq[1]*$eq[1] - $eq[0]*$eq[2]; if($eq[0] <= 0) return 1; // начало отрезка попало в круг if($eq[2] <= 0) return 2; // конец отрезка попал в круг if($det < 0) return -1; // линия не пересекает круг $d = sqrt($det); $root1 = ( -$eq[1] - $d) / $eq[2]; // первая точка пересечения линии и круга $root2 = (-$eq[1]+$d)/$eq[2]; // вторая точка пересечения линии и круга if(($root1>=0) return 3; // первая точка принадлежит отрезку if(($root2>=0) return 4; // вторая точка принадлежит отрезку return -2; // обе точки пересечения - вне отрезка } $a = array(5, 20); $b = array(25, 5); $m = array(5, 5); $r = 12; $result = are_crossed($a, $b, $r, $m); print "A = "; print_r($a); print "
B = "; print_r($b); print "
M = "; print_r($m); print "
R = $r"; print("
result = $result
"); print($result>0 ? "пересекаются" : "не пересекаются"); Результаты: A = Array ( [0] => 5 [1] => 20 ) B = Array ( [0] => 25 [1] => 5 ) M = Array ( [0] => 5 [1] => 5 ) R = 12 result = 3 пересекаются

Windows 7: проблема с беспроводной сетью

#windows #windows_7 #wifi #сеть


ЗдравствуйтеИмеется странная необъяснимая проблема с машиной под Windows 7. Переустановка
системы крайне нежелательна, а творятся странные вещи. Симптомы и факты:не работает
всё что связано с внешней сетью, включая DNSвнутренняя сеть работает, так я могу обратиться
к сетевому диску или роутеру;ping на внешние ресурсы не проходит, на внутренние работает;явление
непостоянное, но очень частое, возникает периодически;все другие устройства во время
таких затупов работают отлично, нагрузка на роутер обычная, расход ресурсов обычный;сначала
я подумал, что неисправен wifi-адаптер, но когда я его сменил, то с другим симптомы
такие же;при загрузке на этой машине под Linux указанная проблема не возникает, стало
быть проблема вероятно не связана с железом;все настройки в норме, пробовал пересоздавать
соединение, переключать разные флажки настроек, но ничего не помогает;по неизвестной
причине на какое-то время помогает перезагрузка wifi-роутера, однако, как я уже говорил
выше, все дургие устройства (ноутбук на Win7, ноутбук на Linux, два телефона на Android)
прекрасно работают с этим же роутером в то самое время, как на проблемной машине проявляется
проблема;простое переподключение сети, переподключение устройства, перезагрузка компьютера
не помогает, так что перезагрузка роутера является на данный момент единственным воркэраундом;проблема
затрагивает не только DNS: если я обращаюсь по внешнему точному адресу, то просто не
удаётся соединиться так будто пакеты просто теряются.Такое ощущение, будто нарушается
какая-то таблица маршрутов или что-то такое, что приводит к потерям пакетов, направленных
именно наружу, но я понятия не имею как диангостировать такие неполадки под win.Видел
описание аналогичной проблемы на форуме инфолана, но там не было ответа. Если есть
какие-то идеи, буду рад любой помощи.    


Ответы

Ответ 1



Включенный на роуторе (да и на компе) firewall объясняет то, что эффект имеет периодический характер. Вы забываете про интеллектуальные системы обнаружения вторжений. Ну а если Вы используете Avast или Nod32, то тут вообще всё понятно.

Ответ 2



Была похожая проблема на ноутбуке с WIndows 7. Проблема крылась в средствах безопасности, а ля антивирус Касперского и брандмауэр Windows. Необходимо проверить, чтобы домашняя сеть была указана в антивирусе и настройках сетевых подключений именно как "Домашняя" или "Доверенная".

Ответ 3



Я бы сделал так:посмотрел бы таблицу маршрутизации - на WindowsXP+ - netstat -rnпосмотрел бы что с ифейсами - ipconfig /allпосмотрел бы на таблицу arp - arp -aпосмотрел бы tcpdump - для винды есть утилитка соответствующая (которую надо ставить отдельно, в состав системы не входит)Думаю, что в купе эта информация покажет вам "слабое звено"

Ответ 4



Такое же было. Модем в роутере 2е 7ры днс и тп, проблемы с интернетом. На одном из компьютеров поставил 8ку, работает шикарно и без предыдущих проблем. Кстати, при 7ке и ХР тоже проблем таковых не возникало.

Церковнославянская раскладка в Ubuntu

#ubuntu #кодировка #клавиатура #локаль


Необходимо набирать текст на церковнославянском языке. Как мне это сделать?    


Ответы

Ответ 1



Церковно-славянский в LinuxКак установить церковнославянские шрифтыМетоды реализации церковно-славянского письма в компьютерных системахДля разработчиковЦерковнославянский язык в Линуксе

Не открываются ссылки на странице при подключении jQuery

#html #jquery #css #вёрстка


Верстаю простой сайт на HTML и CSS. Все работает, но при подключении скрипта: 








Все ссылки на странице перестают работать, хотя указатель мыши отображает их как
ссылки, но не открывает. Только по нажатии правой кнопкой мыши -> "открыть в новой вкладке"
В чем может быть проблема? Завтра дедлайн, уже 3 дня думаю над проблемой, надеюсь
на помощь.
    


Ответы

Ответ 1



Так вы сами preventDefault сделали... Это значит, что ссылки не будут обрабатываться обычным способом.

Ответ 2



Как уже писали, вот эта часть скрипта не дает браузеру обрабатывать ссылки $('a').on('click', function(e){ e.preventDefault(); }); Если ее убрать, то всё заработает.

Android, GridLayout для 2.3 верии системы

#android_sdk #android #java


Добрый день, подскажите, пожалуйста, вот у меня в интерфейсе используется GridLayout,
который поддерживается с API 14, а есть ли способы как-то сделать чтобы GridLayout
работал и на 10-11 API?
Мне говорили, что что-то нужно до установить, но я не понимаю, что и как.
Заранее спасибо за помощь!    


Ответы

Ответ 1



Вам нужно подключить к проекту support library v7. После этого используйте в коде и XML-layout'ах android.support.v7.widget.GridLayout вместо android.widget.GridLayout.

Как определить, нажата ли кнопка

#java #android


На некоторых наушниках есть одна кнопка, обычно она принимает/завершает звонок и
вызывает google поиск. Как можно программно определить, нажата ли кнопка?
P.S. Андроид разработка.    


Ответы

Ответ 1



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

Ответ 2



В manifest приложения можно указать приоритет. А вообще вот сюда загляните: Controlling Your App’s Volume and Playback. A good user experience is a predictable one. If your app plays media it’s important that your users can control the volume of your app using the hardware or software volume controls of their device, bluetooth headset, or headphones.

Как в Atmel Studio 6 разместить массив во flash памяти?

#c #массивы #avr_gcc #atmel_studio #flash_память


Например, есть массив:
unsigned int tabz[] = {64, 128, 256, 512, 1024, 2048, 4096};

В CodeVisionAVR, чтобы разместить этот массив во flash, надо написать так:
flash unsigned int tabz[] = {64, 128, 256, 512, 1024, 2048, 4096};

В Atmel Studio 6 так нельзя.
Как в Atmel Studio 6 разместить массив во flash памяти?    


Ответы

Ответ 1



Для flash-памяти необходимо объявлять так: const unsigned char Scena[4] PROGMEM = {1,2,3,4} Обязательно указывать const, иначе пихает в ОЗУ!

Ответ 2



Пример для AVR GNU: #include #include uint8_t string[12] PROGMEM = {"hello world!"}; int main(void) { UDR0 = pgm_read_byte(&string[10]); }

Начать воспроизведение первого byte[], как только он сформировался

#android #java


Допустим, байты приходят из какого-то источника (аудио), складываются в одинаковые
по размеру byte[], и так в цикле, причем неизвестно, сколько всего байтов придет. Как
начать воспроизведение первого byte[], как только он сформировался? По окончании массива
подавать ему следующий и так, чтобы не было разрыва в звуке. new MediaPlayer() не принимает
byte[].    


Ответы

Ответ 1



Интересный вопрос. На ум приходят 3 варианта: Организовать ContentProvider с кастомным Uri и подать плееру на вход Uri, но что-то подсказывает мне, что в этом случае будет очень больно и долго :) Покопаться в Android NDK, где-то краем уха слышал, что там можно организовать подачу потока в плеер (не уверен). Создать MemoryFile, над которым организовать ParcelFileDescriptor, который и подать на вход плееру. См. пост на стэке

Что нужно сделать с приложением перед добавлением в google play?

#android #google_play #приложение


У меня уже практически готовая версия приложения (осталось доделать маленькие штрихи),
даже зарегистрировался как разработчик, но я не знаю точно, что надо сделать с приложением.
Читал как-то статью об этом, но потерял её. Там говорилось,что нужно что-то в эклипсе
сделать, потом в ProGuard и т.п. Подскажите, пожалуйста,что нужно сделать по пунктам
или дайте ссылку на подробную статью. Заранее благодарю!    


Ответы

Ответ 1



Сгенерировать сертификат. Если приложение paid, то озаботиться защитой через License Verification Library. Подписать сгенерированным сертификатом. ProGuard необязательно. Выставить в Google Play. Чеклист, что надо сделать, здесь, и немного устаревшая статья.