Проблема подобного решения: а что если, сайт\блог закрыли? Искать в веб архивах? Насколько я понимаю Evernote хранит копию, и делает полнотекстовый поиск по контенту.
QNetworkAccessManager — высокоуровневая обертка над сокетами. Я думаю, что в большинстве случаев, будет достаточно этого класса, в котором многие вещи уже сделаны за нас, например, уведомление о прогрессе. Я понимаю, что можно сделать самому, но гораздо проще связать прогресс бар с этим сигналом и забыть. То же касается многих вещей по мелочи, вроде авторизации, куков и т.п.
Пример из статьи переписанный с QNetworkAccessManager, так как считаю, что пример из статьи стоит убрать из-за неактуальности. Было бы отлично, если бы Вы переписали этот пример с сокетами, для полноты картины :-).
А в чем проблема? QNetworkReply является QIODevice, т.е. нет никакой проблемы скормить его тому же QJson. Конечно, пример выше сильно упрощен и на реальном проекте скорей всего понадобятся подписки на сигналы QNetworkReply для того чтобы, например, читать данные как только они готовы, следить за процессом и т.п.
Теперь на днях я решил прикрутить этот код к юзабельному интерфейсу, с PyQt4, мой первый опыт работы с написанием графики…
self.labelFilename.move(10, 5)
Изучите как работает QLayout в Qt, который позволит избежать ручного размещения компонентов по координатам и добавит опциональную «резиновость» интерфейсу.
И заодно можно посмотреть QDesigner, чтобы понять как работает каждый из видов Layout, да и в целом я советую разрабатывать UI там, чтобы скрыть сотни строк шаблонного кода.
// отсоединяемся от сигнала, на время установки элементам флажков
disconnect(standartModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(slotModelItemChanged(QStandardItem*)));
У QObject есть метод blockSignals, придуманный как раз для этого. Удобного создать «умную структуру-глушилку» — в конструкторе блокируем сигналы, в деструкторе разблокируем.
// присоединяемся к сигналу
disconnect(standartModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(slotModelItemChanged(QStandardItem*)));
Тут, наверное, имелось ввиду — connect. Знаю опечатка, но в данном контексте думаю уместно указать.
(void)parent;
(void)start;
(void)end;
Возможно, вопрос стиля, но в Qt для этого есть макрос Q_UNUSED.
У QComboBox есть метод setModel(), думаю стоило написать свою модель и не подписываться на событие rowsInserted, так как в этом случае список выбранных элементов хранился бы на уровне модели, где ему и место.
Полностью согласен с написанным в статье, и хочу добавить, если только начинаете попробуйте StrongLifts 5x5(не имею ничего общего с этим проектом). Отзанимался 12 недель по программе и набрал порядка 8 килограмм мяса при соответствующем питании. Общая идея — не стоит сильно заморачиваться на изолированных упражнениях, а нужно тупо делать базу: присед, становая тяга, жим лежа.
Также подтверждаю, что самое сложное — это умять такое количество еды.
Все относительно.
Конечно есть и шаблоны — много ли их? — встречаются, да и сам иногда пишу небольшие.
Вопрос в другом — в какую сторону смотреть, чтобы ситуацию улучшить, вот раньше упоминали модульность, которой как таковой в проекте сейчас немного, может есть у кого опыт постепенного обновления архитектуры проекта?
Только недавно интересовался подобной информацией относительно больших C++ проектов, но к сожалению информации не так много.
Было бы интересно узнать о той оптимизации кода, которую провели на начальном этапе.
На данный момент работаем над проектом, архитектура которого не самая удачная и требует реорганизации, но из-за размеров (более 300 проектов в солюшене) провести мгновенную оптимизацию невозможно. На текущий момент, пересборка проекта, с IncrediBuild занимает порядка 1.5 часа, иногда больше.
Может быть есть у кого подобный опыт, чтобы подсказать в какую сторону копать, и как постепенно привести проект к более лучшей организации, и как результат уменьшить время сборки?
P.S проект написан на C++, платформа Windows.
mejedi осмелюсь предположить, что Вы, наверное, использовали код вроде этого(взял пример из HIDRAW API):
/* Linux */
#include <linux/types.h>
#include <linux/input.h>
#include <linux/hidraw.h>
/* Unix */
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
/* C */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
const char *bus_str(int bus);
int main(int argc, char **argv)
{
int fd;
int i, res, desc_size = 0;
char buf[256];
/* Open the Device with blocking reads.*/
fd = open("/dev/hidraw0", O_RDONLY);
if (fd < 0) {
perror("Unable to open device");
return 1;
}
memset(buf, 0x0, sizeof(buf));
/* Read data from the device */
while (1)
{
res = read(fd, buf, 16);
if (res < 0) {
perror("read");
break;
} else {
printf("read() read %d bytes:\n\t", res);
for (i = 0; i < res; i++)
printf("%hhx ", buf[i]);
puts("\n");
}
}
close(fd);
return 0;
}
Я же говорю о коде автора, который не использует HIDRAW API и читает напрямую файловым потоком C++, отсюда и загрузка процессора.
Поэтому прошу tsymbaliuk обратить внимание на этот код, и использовать его, предварительно поправив тело цикла свою т.к. данный код просто читает полученные данные и выводит их.
P.S я не системный программист, но было бы очень интересно узнать, почему код, который я привел, производит только чтение, но все равно требует прав рута для открытия устройства?
Хм, либо я что-то недопонимаю, либо все таки чтение происходит постоянно, а иначе как мы еще можем получить уведомления, что что-то изменилось?
P.S собрал, запустил — 100% загрузка ядра.
Решение конечно работает, но такие бесконечные циклы могут намертво повесить систему, вот и сейчас, если запустить Вашу программу, то на 2-х ядерном процессоре, 1 ядро будет загруженно на 100%
Соглашусь, так как если ничего не разрабатывается, то и шумихи никакой не будет.
Но с другой стороны, лично мне ничего неизвестно, что там в той же военке, ведь Россия достаточно много тратит денег на нее, хотя нет никаких гарантий того, что эти деньги не уходят в пустую.
Еще мне кажется стоит отметить, что вся эта шумиха вокруг заморского космоса существует благодаря какой не какой, а открытости разработок той же NASA. У нас же все так или иначе государственное относят к военке, а там все закрыто.
Например, марсоход Curiosity: помимо фотографий, разработчики также рассказали о том, что код программы написан на Си и для какого микропроцессора, казалось бы — мелочь, а ведь сколько ретвитов и репостов было об этом, да и самому было интересно узнать о том, как, даже очень абстрактно, ведется разработка таких проектов.
Это я все к чему — я точно не знаю, но мне кажется даже сейчас ведутся какие-нибудь разработки наших ученых, но все это под завесой тайны, вот было бы здорово, если бы они имели блоги, сайты, которые бы хоть иногда обновлялись и пополнялись новыми данными, тогда бы и о нас заговорили.
Пример из статьи переписанный с QNetworkAccessManager, так как считаю, что пример из статьи стоит убрать из-за неактуальности. Было бы отлично, если бы Вы переписали этот пример с сокетами, для полноты картины :-).
QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
Или, тут когда-то давно писал про POST.
Изучите как работает QLayout в Qt, который позволит избежать ручного размещения компонентов по координатам и добавит опциональную «резиновость» интерфейсу.
И заодно можно посмотреть QDesigner, чтобы понять как работает каждый из видов Layout, да и в целом я советую разрабатывать UI там, чтобы скрыть сотни строк шаблонного кода.
У QObject есть метод blockSignals, придуманный как раз для этого. Удобного создать «умную структуру-глушилку» — в конструкторе блокируем сигналы, в деструкторе разблокируем.
Тут, наверное, имелось ввиду — connect. Знаю опечатка, но в данном контексте думаю уместно указать.
Возможно, вопрос стиля, но в Qt для этого есть макрос Q_UNUSED.
У QComboBox есть метод setModel(), думаю стоило написать свою модель и не подписываться на событие rowsInserted, так как в этом случае список выбранных элементов хранился бы на уровне модели, где ему и место.
Также подтверждаю, что самое сложное — это умять такое количество еды.
Конечно есть и шаблоны — много ли их? — встречаются, да и сам иногда пишу небольшие.
Вопрос в другом — в какую сторону смотреть, чтобы ситуацию улучшить, вот раньше упоминали модульность, которой как таковой в проекте сейчас немного, может есть у кого опыт постепенного обновления архитектуры проекта?
Было бы интересно узнать о той оптимизации кода, которую провели на начальном этапе.
На данный момент работаем над проектом, архитектура которого не самая удачная и требует реорганизации, но из-за размеров (более 300 проектов в солюшене) провести мгновенную оптимизацию невозможно. На текущий момент, пересборка проекта, с IncrediBuild занимает порядка 1.5 часа, иногда больше.
Может быть есть у кого подобный опыт, чтобы подсказать в какую сторону копать, и как постепенно привести проект к более лучшей организации, и как результат уменьшить время сборки?
P.S проект написан на C++, платформа Windows.
Я же говорю о коде автора, который не использует HIDRAW API и читает напрямую файловым потоком C++, отсюда и загрузка процессора.
Поэтому прошу tsymbaliuk обратить внимание на этот код, и использовать его, предварительно поправив тело цикла свою т.к. данный код просто читает полученные данные и выводит их.
P.S я не системный программист, но было бы очень интересно узнать, почему код, который я привел, производит только чтение, но все равно требует прав рута для открытия устройства?
P.S собрал, запустил — 100% загрузка ядра.
Но с другой стороны, лично мне ничего неизвестно, что там в той же военке, ведь Россия достаточно много тратит денег на нее, хотя нет никаких гарантий того, что эти деньги не уходят в пустую.
Например, марсоход Curiosity: помимо фотографий, разработчики также рассказали о том, что код программы написан на Си и для какого микропроцессора, казалось бы — мелочь, а ведь сколько ретвитов и репостов было об этом, да и самому было интересно узнать о том, как, даже очень абстрактно, ведется разработка таких проектов.
Это я все к чему — я точно не знаю, но мне кажется даже сейчас ведутся какие-нибудь разработки наших ученых, но все это под завесой тайны, вот было бы здорово, если бы они имели блоги, сайты, которые бы хоть иногда обновлялись и пополнялись новыми данными, тогда бы и о нас заговорили.