LINUX.ORG.RU

Избранные сообщения b0c0813f

Push notifications, как?

Форум — Web-development

Как сейчас модно делать push нотификации? (С возможностью по-меньше лишних сущьностей.)

Background:

Пишу маленькую приблуду 4fun&profit, в частности простенький веб-интерфейс на Go к файло-помойке для добавления \ архивирования \ деархивирования проектов.

Веб-итерфейс дёргает shell-скрипт который создаёт и переносит директории. (Хотел сначала сделать всё на самом Go, но оказалось, что там всё совсем не так просто. Поэтому решил вернуться к старым mkdir и mv.) Сам процесс переноса может длиться н-ное время.

Хотелось бы как-то уведомить юзверя, что всё ок или не-ок. Показать статус, мигнуть окошком, когда копирование закончится.

И тут проблема. Как это сделать?

Открыл для себя Server-side events, попробовал сдеть. На макете всё чудесно, но на практике оказалось тоже не тривиально.

По схеме у меня идут GET(view)->POST(command)->REDIRECT->GET(view). И javascript дропает при каждом рефреше коннект к URL уведомлялки. В результате сообщения не доходят. Пробовал вставить задержки, но это мне не нравится.

В общем, просветите пожалуйста, как такое делается?

PS: про JavaScript знаю только, что есть NoScript.

 , ,

beastie
()

Жизнь структуры, которую требует системная функция

Форум — Development

Здравствуйте.

Неоднократно сталкивался с тем, что функция требует структуру в качестве аргумента. А в мануале не уточняется, понадобится ли переданная структура этой функции в будущем. Как это определять?

В качестве примера написал функцию, кторая устанавливает обработчик на сигнал:

static void set_sig_handler(int sig, void (hnd)(int signum)){
  struct sigaction sa;
  sa.sa_handler = hnd;
  sigemptyset(&sa.sa_mask);
  if(-1 == sigaction(sig, &sa, NULL)) perr_die("set_sig_handler");
}

Тут создается структура sigaction, которая, насколько я понимаю, автоматически исчезает после завершения выполнении функции. Эта структура передается в sigaction и какова ее дальнейшая судьба мне не совсем понятно

 ,

makoven
()

Самосборный СХД

Форум — Admin

Всем привет. Хочу собрать такую штуку, где гипервизоры, в колличествте 3 штук будут хранить виртуалки и работать с ними. Что посоветуете, как такое вообще организовывается. Я думаю купить на каждый гипервизор по fibre channel на 4 гбита плате и 3 таких вставить в СХД и соеденить их. На СХД соответственно raid из ssd, что скажете ? Посоветуйте, какие подводные камни и как лучше сделать. Спасибо за внимание

 ,

Ien_Shepard
()

Почему нападают?

Форум — Talks

Фильм ещё не видел, но Звягинцев не мог снять плохо. Он очень хороший режиссёр. Тарковский, Климов, Параджанов. Герман умер уже. Почему так нападают на Звягинцева? Это зависть?

 

UNiTE
()

Увидеть, какие функции вызываются

Форум — Web-development

Хочу невозможного, к сожалению.

А именно: хочу просто увидеть, какие функции JavaScript вызываются.

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

Тем не менее, это так. Никакие break-point'ы в данном случае не помогут понять, как это работает, поверьте мне на слово. Разве что ставить breakpoint по всех функциях, но с таким же успехом я могу в каждую фунцию вписать console.log()

Единственный вариант - видеть в реальном времени, какие функции вызываются. Конкретно - в консоли браузера нужно увидеть:

method objectPapa.foo called, parameters: bla,bla
method objectMama.bar called, parameters: psch,psch

Господа веб-разработчики, такие чудеса в нашем мире возможны?

 , , ,

DRVTiny
()

Решил поделиться, GNOME

Галерея — Скриншоты

Ничего особенного или нового, даже слегка дефолтно. Но мне результат очень понравился, поэтому решил поделиться. На скриншоте GNOME 3, Firefox и Sublime Text. Есть еще скриншот с обзором окон и два PNG для эстетов: [1] [2].

  • Тема GNOME Shell: поднастроенный Elegance Colors
  • Conky: подпиленный CONKY-colors. Просто для красоты.
  • Обои
  • Основной шрифт: Open Sans, шрифт в GNOME Shell и заголовках: Fira Sans и моноширный Droid Sans Mono.
  • Значки: Faience и Faenza. Все никак с них слезть не могу, другие значки совсем не вставляют.
  • Тема Sublime Text: Afterglow Blue. Совсем не вписывается, но это самая приличная.
  • Тема GTK: дефолтная Adwaita. Все остальные темы слишком кривые и не подходят для работы.

 

Black_Roland
()

Более улучшенный консольный Vim

Галерея — Скриншоты

Казалось уже дальше некуда улучшать. Собственно вот это чудо https://github.com/ryanoasis/vim-webdevicons В репозитории можно найти уже готовые шрифты.

 

shamkir
()

qmake vs CMake vs qbs

Форум — Development

Пишу некоторые программы на Qt в QtCreator. Пробовал все три системы сборки. Сейчас мне кажется, что с точки зрения удобства, qbs на голову выше всего остального. qmake малофункционален, а CMake страшен как чёрт.

Но это моя точка зрения. Хотел бы узнать аргументированное мнение других.

 ,

pathfinder
()

Жизнь-боль или администрирование

Форум — Talks

Это о том, как я решила наверстать упущенное, а именно изучить линукс. Так сложилось , что в академии я прогуляла весь курс по линукс. Все что я могла – это установить ОС. Поставив себе некую цель, я принялась за работу, не подозревая, что меня ожидает.

Скачала и установила виртуальную машину(проблем с этим не было)Долго определялась с дистрибутивом, но решив не мелочиться и выбрала Centos.Когда система была установлена, у меня возник ступор, а что же дальше делать? Мне как человеку не в теме было очень тяжело. После установки винды ты ясно знаешь, что тебе надо, а так как я решила погрузиться в администрирование, то не знала с чего начать и что вообще надо делать. В первую очередь я обратилась к моему самому лучшему и верному другу – гуглу. На глаза попалась статья в которой в первую очередь устанавливался апач,suphp, ну я решила: надо ставить! Вот только ничего не получилось…. Сколько нервов, психов и облаженных сайтов было, до того, как мне сказали о существовании «репозиториев». Репозитории – это вообще отдельная тема. Почему нельзя взять и установить что-то одно, чтобы работало все? Так мало того, их еще надо включать вручную. Я не могу понять многих вещей, но теперь это дело принципа. Нормальную литературу не могу найти.

Перемещено toney из admin

 ,

Irko
()

Закос под закос

Галерея — Скриншоты

меня очень вдохновил вот этот скриншот, и я решил закосить под него всеми доступными средствами:)

на скрине:
* дефолтная OS X 10.9.4 на Macbook Pro Retina

PNG, 4.1 Мб

 ,

snoopcat
()

Зачем форкать?

Форум — Talks

Товарищи, объясните, пожалуйста, зачем делают форки? Вот в теме про RIP CrunchBang'а на вопрос «чем он отличается от Debian» мне сказали что «там был годно настроенный openbox». Настройки openbox, на сколько мне известно, это просто xml'ка (ну может еще дополнительно какие пакеты поставить придется), это нельзя было просто залить в апстрим или вообще просто выложить эти конфиги? Зачем форкать целый дистр просто для того чтоб впилить туда иначе настроенное DE?

Или вот Ubuntu - зечем нужны всякие Kubuntu, Lubuntu, Xubuntu etc, вопрос по выбору DE нельзя было вынести в установщик и поддерживать одну какую-нибудь Megabuntu?

Или кто-то там форкает Debian чтоб выпилить из него systemd - нельзя просто на этапе установки дать выбор системы инициализации, а потом просто собирать пакеты с нужными опциями (или держать в репах две версии пакетов)? Ведь очевидно, что гораздо проще поддерживать один дистр, чем over9000 слегка отличающихся? Дело в фатальном недостатке «форкуемой» системы?

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

 ,

alozovskoy
()

Как выжить джуниору

Форум — Talks

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

Перемещено JB из general

 

gbiont
()

Заставить браузеры жрать меньше ресурсов

Форум — General

Это касается Chrome и Firefox в первую очередь. Флеш отключен по умолчанию, µBlock стоит, вкладок открыто порядка 10 штук в каждом, но они нужны, да. Экстеншны лишние не включены. Куда еще копать?

Память докупать мне не нужно рекомендовать - стоит 16GB + умножение на 1,5 за счет zram.

Можно конечно кеды выкинуть и заменить чем-то более легковесным, но менее удобным, но хотелось бы сначала с браузерами разобраться.

 , , ,

dvrts
()

gcc, задание размера структуры

Форум — Development

В STM32F103 нет EEPROM, а флеш умеет стираться только страницами по 1-2кБ. Поэтому мне нужно не только выравнять размер структуры данных, где хранятся все переменные, которые пользователь может изменять, но и ограничить ее размер двумя килобайтами, чтобы gcc не впихнул туда что-нибудь.

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

Для начала я навелосипедил так (там малость устаревший вариант, правда: еще будет поле size, чтобы при обновлении все было ОК): задал выравненный по 2048Б массив (const) размером 2кБ, далее создал указатель на структуру и приравнял его этому массиву. Эта реализация плоха тем, что каждый раз после прошивки в случае изменения размера структуры приходится еще раз перезаписывать этот кусок флеша, копируя туда данные по умолчанию.

Сейчас балуюсь на компьютере (хоть и не ARM, но выравнивает-то так же). Пытаюсь создать "терминатор" — лишний 2049-й байт, который будет выходить за границы структуры, но я не буду его использовать. В итоге вроде бы структура должна иметь размер 2049, однако, почему-то получаю 4096:

#include <stdio.h>

struct {
        int i;
        double d;
        char ch __attribute__ ((aligned(2048)));
} test __attribute__ ((aligned(2048)));

int main(){
        int i;
        unsigned char *ptr = (unsigned char*)&test;
        size_t s = sizeof(test);
        test.i = 10;
        test.d = 1.5;
        test.ch = 'a';
        for(i = 0; i < s; i++){
                printf("%d: %u\n", i,*ptr++);
        }
        printf("size: %zd\n", s);
        return 0;
}

Последние строчки:

2044: 0
2045: 0
2046: 0
2047: 0
size: 2048
Переменная ch, как и ожидалось, лежит в 2049-м байте.

Вопрос: возможно ли средствами gcc дополнить структуру нулями до 2048Б или 2049Б, чтобы она не заняла внезапно 4кБ?


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

 ,

Eddy_Em
()

Порекомендуйте книгу по верстке, PHP, HTML и Мускулу

Форум — Web-development

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

В магазине видел вот такую - http://bookvoed.ru/book?id=388804
Годная?

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

//Если это тут критично, то знания алгоритмов и программистики есть (начинал когда-то вообще с асма под пикмикро =). И вроде бы ходят слухи, что кодить на похапе может и обезьяна, так что, думаю, мои знания сишечки тоже могут пригодиться =)

 , ,

Zhbert
()

Помогите опакетить питономодуль

Форум — Development

Имеем такую структуру модуля:

proj/
    proj/
        lib.py
        lib2.py
        hide.py
        hide2.py
    setup.py
Вот как скрыть эти hide, hide2? Чтобы нельзя было делать from proj import hide? __hide.py, _hide.py - не помогает

 ,

FIL
()

Напутствие в трудной жизни.

Форум — Development

Дисклеймер. Этот пост всесторонне вдохновлен каким-то древним видео в интернете, автора которого я благополучно забыл. Если автор сейчас читает это - респект тебе и увага, бро!

Итак.

Помойму программисты сильно перегибают палку.

Засрали всю джаву мусором.

Хотите вы бин, и что-то в нем хранить тупо, сделайте все поля public! Вместо лесов геттеров-сеттеров.

Боитесь, что такой класс (с пабликами) будет не thread-safe и хомяки не смогут писать с ним хороший многопоточный код? Да побойтесь б-га, хомяки вообще не напишут хорошего многопоточного кода, всё это миф. Дайте среднестатистическому человеку треды и локи, и он напишет код в миллион раз более медленный, чем аналогичный на готовом TransferQueue. Вот и пишите свой продюсер-консумер на TransferQueue, не выпендривайтесь.

ООП, и конкретно механизм наследования, очень плохо подходит для увеличения реюзабельности кода. Глупому заказчику можно втирать рекламу ООП=реюзабельность, но мы тут все грамотные люди, линуксоиды, как минимум с 8 классами образования, мы же все понимаем как оно на самом деле. Трейты/миксины и препроцессор и то с этим лучше справляются иногда.

Но сидят сумрачные гении, и ночами напролет пишут какие-то иерархии классов, чтобы одну строчку копипасты сэкономить. Всё это фигня! В такой надуманной иерархии классов еще сложней разобраться, чем отрефакторить копипасту. И уж точно ее сложнее модифицировать. Мой совет: копипастите смело и открыто! Если коллеги будут придираться, спокойным голосом, глядя на правое ухо поциента, говорите: «вот сам и поправь», 90% что коллега посинеет от страха и сдрыснет в ужасе, в остальные 10% можно утешаться тем, что эту лажу писать пришлось хотя бы не тебе.

Никто не заставляет писать Factory которые производят Factory, которые производят Factory! Хочешь посмотреть, откуда берется объект, а там целый стектрейс на 50 этажей, можно блуждать пока не умрешь от голоду. Хотите сделать объект - ставите new и поехали. Сразу понятно - вот тут делается объект. Фактори нужно изничтожать безбожно (только если это не Spring, Spring надо пожалеть).

И вообще, дизайн паттерны - сплошной хлам. Получается говно вместо результата - давайте нафигачим дизайн паттерн! На каждую проблему есть свой дизайн паттерн! И получается, одна строчка смысла, всё остальное мусор, костыли как они есть. Это стрёмно, господа. Почитаешь какой-нибудь код, и так вымажешься в дизайн-паттернах с ног до головы, что потом по улице стыдно идти, на людей смотреть.

Никаких фреймворков! Ехал фреймворк через фреймворк, и все - говно. Каждый день кто-то еще производит новый фреймворк. Потом набигают ПМы-хипстеры и такие, а что у нас популярно? Ахххаха, гороскоп показывает, что в эту фазу луны популярен Wicket, давайте нафигачим на нем гуй для Международной Космической Станции. Потом где-то там эта чушка не распарсила XML, свалилась в корку обосравшись стектрейсами, и все космонавты сварились. Отлично! Зато фреймворк!

Особенно радуют люди, которые боятся эти фреймворки чинить. Ололо, всё работает через задницу, но трогать не будем. Потому что - потом поддерживать же свой «форк» надо! Лучше нагородим еще костылей вокруг кривого фреймворка! Мотивируется это тем, что «на дальней дистанции» хомякам проще будет писать костыли, чем фиксить фреймворк. Но это ложь, через пару лет развития проекта уже совсем в этих костылях не разобраться. Совет тут такой: не использовать фреймворков, а если использовать - то понимать как они работают, и чистой душой фиксить их, а коммиты стараться засылать в апстрим.

Это всё от другой болезни, называется «Архитектура». Ее нужно долго придумывать, и потом всех насиловать. Можно сказать, архитектура передается половым путем, как сифилис и гангрена. Кто-то из великих говорил, что архитектура - это самая стрёмная, самая зачерствевшая и неизменяемая часть кода, то что фиг изменишь. Нормальный код должен легко меняться. Но во все времена были люди, поклоняющиеся говну. И вот тут, обязательно найдутся поклонники архитектуры. Совет тут такой: шлите архитектуру в зад, пишите гибко изменяемый код, так чтобы (если такая возможность потребуется) двумя легкими движениями рефакторинга текстовый процессор превращался в графический редактор и наоборот. Софт - это не паравоз, нельзя взять три семьнадцать колес, паровой бачок, сложить их по чертежу(архитектуре) и получить паровоз. Софт - это непрерывный процесс рефакторинга.

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

Самая жуть, это всякие ынтерпрайзные сервера, портлеты, фигеты, шушпанчики. Вот притащил ты себе в проект WebLogic или еще какой-нибудь архитектурно-окаменевший кусок, и что изменилось? Кстати, вы видели чтобы на одном реальном хайлоадном сервере запускалось больше одного приложения? Обычно бывает как раз наоборот - на куче серверов запускается ОДНО приложение! А сколько бед от этой псевдофункциональности по огранизации шаред хостинга! Что ынтерпрайзные сервера лучше делают, чем Jetty запущенная прямо из функции main? Собственно в этом и совет, запускайте джетти откуда-нибудь руками, или из мавена, и не парьте мозг.

Надо писать так, чтобы код отражал СУТЬ. Чтобы деплой отражал СМЫСЛ. Посмотрел на код - и сразу понятно, что там написано. Запустил сервер - и сразу понятно, что и как он обслуживает, где скачать его исходники и пофиксить, если чо.

Если вы последовали перечисленным советам, но вас никто не понимает, скажите что stevejobs с лора разрешил.

В общем, идея понятна, теперь можно приступать к критике :)

Привет.

 

stevejobs
()

Препроцессор С

Форум — Development

Есть код вида:

//foo.h

#define FOO_MARK

void FOO_MARK fooFunction();
//foo.c
#include "foo.h"

void FOO_MARK fooFunction(){...}
Не совсем понимаю зачем помечать пустым макросом функцию, что это дает?

 

abcq
()

свой move для семантики перемещения

Форум — Development

Имеется некоторый класс A:

template <class T> class A {
     T* t;
     A(const A & a): t(0) {                    
          std::cout << "копирующий конструктор\n"; 
          // t = new .....   
     }
     A(A && a): t(0) {                    
          std::cout << "перемещающий конструктор\n";
          // t = a.t .....     
     }
};  

помогите написать MyMove аналог std::move, чтобы срабатывал перемещающий конструктор, а не копирующий:

A<int> b(25);
A<int> a(MyMove(b));

P.S. std::move устраивает, просто хочу разобраться. Мой неудачный опыт:

template <class T> 
T&& MyMove(T&& a) {    return a; }
// или
T&& Move(T&& a) { return static_cast<T&&>(a); }
с такими функциями вызывается копирующий конструктор.

 ,

linux276
()

Какие API вам больше нравятся, блокирующие или асинхронные с коллбэками?

Форум — Development

$subj

 , ,

Harald
()