• Как разнести класс по файлам?

    @Mercury13
    Программист на «си с крестами» и не только
    Принцип прост. В .h можно ставить только то, что не производит кода. Как только в проекте появится второй CPP и задействует этот хедер, код будет произведён дважды, и компоновщик (cl/ld/ilink) будет ругаться, что переменная или функция в двух экземплярах. Что именно не производит кода…
    • Определения макросов. Они в принципе кода не производят.
    • Объявление любого типа. Оно лишь говорит об устройстве этого самого типа; код же производят те, кто этим типом пользуются.
    • Шаблоны. Код производит не сам шаблон, а факт расшаблонивания. Разумеется, шаблон может расшаблониться в двух единицах компиляции, но с этим автоматически бороться научились.
    • inline—  код производит не сам inline, а факт включения. inline бывает как явный ключевым словом, так и неявный — в теле класса.
    • Прототипы и extern — они говорят: код есть, но где-то не здесь.
    • Constexpr C++11. Они подставляют значение.
    • Некоторые const в зависимости от компилятора. Например, на Borland const double производит код, а const int — нет.

    Производят код и в хедерах запрещены.
    • Переменная без extern, даже const.
    • Функция, которая не inline.
    • Полностью специализированный шаблон, в котором не осталось шаблонных параметров (template<>).

    Не производят кода, но и лучше закинуть в CPP.
    • Некоторые скрытые (private) inline и шаблоны, если они не используются из хедера.
    Ответ написан
    3 комментария
  • Я устал от зоопарка?). Или на чем поднять радиус?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    1) Дешевые устройства в подавляющем случае не поддерживают ни RADIUS, ни удаленный syslog. Но можно прошить wrt. Но наверно проще запилить скрипт для настройки через веб-интерфейс.
    2) Первый вопрос вообще не понятен... Учетных записей для чего? Для доступа в интернет по вай-фай по пользовательской учетной записи? А как сейчас это делается? Или для доступа в админку устройств?
    3) Второй вопрос - freeradius можно интегрировать с LDAP, радиус на виндоус интергирован в LDAP сразу.
    4) Третий вопрос решается скриптами (под линукс скрипт в кронтаб)
    5) Сислог вообще никак с радиусом не связан. Совершенно отдельная служба, есть и на вин, и на никс.

    Или на чем поднять радиус

    Если я правильно понимаю цели, то проще на Linux freeradius, так как он более кастомизируемый.

    Чтоб запилить на малинке к примеру

    Это не комплекс для минипк. Замучаетесь искать сборки для ARM, делать обновления.
    Ответ написан
    9 комментариев
  • Есть ли бесплатные площадки крутых макетов?

    Chipr
    @Chipr
    UX/UI designer
    Бесплатно и круто — понятия совершенно несовместимые.
    Ответ написан
    3 комментария
  • Как удержать статус Rising Star на Upwork?

    kumaxim
    @kumaxim
    Web-программист
    Для того, чтобы быть Rising Talent необходимо:
    1. Постоянно поддерживать обратную связь и историю работ с клиентами
    2. Отправлять вменяемые предложения(proposal), а не copy-past из проекта в проект
    3. Иметь полностью заполненный профиль
    4. Держать в актуальном состоянии "Статус доступности"
    5. Не иметь недавних блокировок аккаунта

    Замечания:
    • Не уверен что первый пункт перевел корректно. В оригинале: "Consistent strong feedback and work history with your clients"
    • Про статус доступности читаем по этой ссылке
    • О недавних блокировках можно почитать вот здесь
    Ответ написан
    Комментировать
  • Насколько выгодно размещать рекламу в ВК? Или лучше в других сервисах?

    @Just_Andrew
    Для начало определите свою целевую аудиторию! К примеру рекламировать плинтус в вк не имеет смысла!
    Ответ написан
    2 комментария
  • Можно ли заработать в мире Unix-like, unix-way?

    @Z-r
    Мне известно четыре основных способа заработка, напрямую связанных со свободными программами:

    — Первый, самый прямой, но от того почему-то всем не менее неочевидный — брать и продавать копии свободных программ. Аудитория: любые конечные пользователи. Примеры: Parted Magic, ряд программок для «Андроида», ну например, «Conversations». Высокоморальность: в полном порядке.

    — Второй — это уже известная вами продажа поддержки. А фактически иногда и просто своего имени, когда какая-то реальная поддержка начинается с сумм несколько больших, чем базовый контракт. Аудитория: те, для кого ваша программа есть орудие производства, то есть компании и предприниматели. Пример: уже озвученный вами Canonical. Высокоморальность: в полном порядке.

    — Третий — это продажа исключений из авторского лева. Аудиторией будут разработчики несвободных программ, а программа ваша должна быть библиотекой под (как нетрудно догадаться) авторским левом, причем чаще сильным. Суть в том, что для добрых людей ваш продукт свободен на условиях, скажем, GNU GPL или GNU AGPL, а проприетарщики пусть платят за возможность использовать его в своих шкурных интересах. Примеры: GhostScript, MySQL. Высокоморльность: прихрамывает маленько.

    — Четвертый — это то, о чем помянул тов. CityCat4 — т. н. free crippleware, то есть полноценная ваша программа несвободна и платна, но у нее есть свободный урезанный вариант. Причем урезано может быть как что-то существенное, так и сущая ерунда. Аудитория: кто угодно. Примеры: Odoo, GitLab, ProcessMaker. Высокоморальность: от невысокой до никакой, смотря сколько отрезано.

    И разумеется, все вышеперечисленно можно комбинировать: Qt, к примеру, и поддержку (обучение) предоставляет, и исключения из авторского лева (причем слабого!) продает, и совсем ерундовую несвободную часть имеет. А упомянутый вами Red Hat — продает копии и предоставляет поддержку. А иногда и такое бывает: программка для «Андроида» под названием OsmAnd полностью свободна, но поставляется в Гуглоплэе в двух вариантах: полном за копеечку и урезанном бесплатно. Еще раз: обе версии свободны, то есть никакой моральной проблемы здесь нет.

    ――

    P. S. Я перечислил только способы заработка на программах как таковых, полагая, что схемы, где свободные программы участвуют косвенно, и без того очевидны, но в комментариях только о них и говорят, так что надо, наверное, упомянуть, что да, конечно, свободная программа также может быть:
    — Частью продаваемой услуги — чаще всего услуги специфического хостинга, как ставимый здесь в пример Openshift или (если ближе к народу) Feedly.
    — Частью продаваемого устройства, причем само устройство может быть как свободным, так и нет. Тысячи их.
    — И наконец, просто частью приносящего прибыль техпроцесса. То есть компания пишет (заказывает) программу себе для внутреннего использования и могла бы ее вообще не распространять, но, не считая ее своим «ноу-хау», ведет себя благородно и просто свободно делится ею со всеми. Известнейший пример — Reddit (хотя в последнее время они подскурвились).

    ――

    И не могу все-таки не отметить, что unix-way отношение к свободе имеет такое же, как мелкое к горячему.
    Ответ написан
    2 комментария
  • Какой максимально эффективный способ защиты от скачивания изображений с сайта вы знаете?

    Adamos
    @Adamos
    Максимально эффективный способ - это иметь на сайте изображения, которые никто не будет скачивать.
    Например, водяные знаки или надпись с названием сайта на каждом фото позволяют приблизиться к этому идеалу.
    Ответ написан
    8 комментариев
  • Веб разработка vs 1c?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Перешел в 1С из .NET разработки (ASP.NET MVC) - ни разу не пожалел.
    Ответ написан
    6 комментариев
  • Востановить права chmod?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    sudo /lib/ld-linux.so /bin/chmod 755 /bin/chmod

    Или:
    sudo /lib64/ld-linux-x86-64.so.2 /bin/chmod 755 /bin/chmod

    Или:
    sudo /lib/x86_64-linux-gnu/ld-2.19.so /bin/chmod 755 /bin/chmod

    Путь в разных дистрибутивах и разрядности может отличаться.
    Ответ написан
  • Большой проект на С. Как строить работу чтобы не завалило кодом?

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

    Это потянет за собой новые проблемы и необходимость содержать системного архитектора, но рано или поздно все равно потребуется при таком объеме кода.
    Ответ написан
    Комментировать
  • Большой проект на С. Как строить работу чтобы не завалило кодом?

    @koronabora
    Человек
    1) Разбиваем по категориям, каждую категорию - в свою папку. Если надо - еще подпапки.
    2) Общий или старый код вынести в библиотеку, подключать только .h + .lib
    3) Использовать систему контроля версий.
    4) Ввести лимит по количеству строк на файл, перераспределять код таким образом, чтобы в одном .c файле было не больше 1000 строк (имхо даже 500 на с уже много. )
    Ответ написан
    Комментировать
  • Нужен ли настрольный справочник по Python?

    aRegius
    @aRegius
    Python Enthusiast
    И да, и нет. Все зависит от цели. Постараюсь объяснить.

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

    Пример:
    я начинал с Доусона. Проработав капитально, взялся за Лутца. После - Fluent Python, Python Cookbook и иже с ними... (HTML, Django, CSS, работа над собственным проектом - это я все опускаю, как не относящиеся к сути вопроса детали. Говорим только про Python и книги.)

    Так вот, к Доусону я больше не возвращался, к Лутцу - иногда возвращаюсь, а "иже с ними" я перечитываю по кругу и каждый раз открываю для себя что-то новое. Это, скорее всего, связано с тем, что всякий раз ты возвращаешься на исходную позицию с уже более прокачанными знаниями/пониманием, отстутствие которых не позволяет охватить все и сразу с первой попытки; плюс, каждый автор преподносит один и тот же материал с другой стороны (другими примерами), что дополнительно углубляет твое понимание пройденого.

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

    Замечу, что все вышеописанное базируется на предположении, что вы стремитесь к максимальному развитию в рамках своей технологии. На мой взгляд, нельзя объять необъятное и хвататься за все сразу; step-by-step, как я говорил. Должна быть, по меньшей мере одна крепкая база + сопутствующее. Но эта база должна быть отшлифована до блеска, как птичьи плоды одного из небезызвестного персонажа из бронзы, расположеного на севере парка Боулинг-Грин в Финансовом квартале Нью-Йорка, в двух кварталах южнее Нью-Йоркской фондовой биржи.

    Для меня такой базой, в настоящее время, является Python. Ему я и уделяю большую часть времени, распределяя оставшееся на Прочее. А вот когда я абсолютно и полностью исчерпаю Python - буду искать следующую Приоритетную цель на его место. И так далее. Процесс, фактически, бесконечен.

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

    Ну а если все вышенаписанное не про вас, Python так, мимо проходил, тогда, может быть, да. Вот очень неплохой вариант.

    P.S. Про литературу в целом можете посмотреть ТУТ.
    Ответ написан
    2 комментария
  • Как заказать планшет своей сборки из Китая?

    saboteur_kiev
    @saboteur_kiev Куратор тега Организация работы
    software engineer
    2 комментария
  • У сайта avito.ru есть своё API для разработчиков?

    ktulu
    @ktulu
    Пишу на python
    насчет api - Не знаю, но я писал бота-постера обновлений по недвижимости. Проработал он не долго, аккаунты начали блочить очень быстро. У них в правилах пользования написано что нельзя пользоваться подобным софтом без их разрешения. Ну и судя по той информации, которую я находил в интернете по этой теме - всех ботов блочат сейчас.
    Ответ написан
    Комментировать
  • Как включить в ядре linux поддержку pppoe (debian jessie или archlinux)?

    Smithson
    @Smithson
    20+ лет админю
    Пересборка ядра описана тут: www.unix-lab.org/posts/debian-kernel

    Для подобного дела нужно сначала подготовиться. А именно заняться установкой следующих пакетов:

    $ sudo aptitude install  build-essential kernel-package fakeroot initrd-tools pkg-config libncurses5-dev ( и `linux-source`
    - для тех, кто перекомпилирует имеющееся ядро)

    Если вы решили ставить новое ядро, то идём на kernel.org или зеркало yandex — mirror.yandex.ru/kernel.org/linux/kernel/ — и скачиваем необходимую версию ядра. У нас это linux-3.0.4.tar.bz2.

    Смотрим есть ли пакет linux-source в каталоге /usr/src. В случае с перекомпиляцией он будет, если вы скачали новое ядро, то переместите его туда.

    $ ls /usr/src/
    linux-source-3.0.4.tar.bz2


    Переходим в каталог и распаковываем архив:

    $ cd /usr/src
    $ sudo tar xjf linux-source-3.0.4.tar.bz2


    Идём в созданную после разархивирования директорию:

    $ cd linux-source-3.0.4/

    Теперь можно заняться конфигурированием ядра. Автором это было сделано в консоли с остановленным X-Window. В таком случае пишем от рута:

    # make menuconfig

    Если желаете конфигурировать в графическом терминале, вам послужит команда

    # make xconfig

    Но понадобится установить дополнительные пакеты/библиотеки, в общем ну её….

    С конфигурацией закончили?

    Тогда собираем наше новенькое ядрышко:

    #
    fakeroot make-kpkg --initrd --revision=debian.3.0.4 kernel_image

    Ответ написан
    1 комментарий
  • Код ревью или что не так с моим тестовым заданием?

    @dmitryKovalskiy
    программист средней руки
    Лично у меня код вида
    setupList();
    showListProgress(true);
    getTaskList();

    ассоциируется с процедурным программированием. Java это насколько я знаю ООП. А тут ни паттернов, ничего. Покрыть тестами такой код я не знаю как. Наверняка внутри идет обращение к параметрам окружения или глобальным переменным, мокировать которые просто праздник.
    Разделения логики на слои я тут не вижу и внутри методов есть и получение данных и настройки отображения, однако на мой взгляд это проблема не сколько программиста, сколько человека, поставившего задачу за 5 часов написать целое приложение. На мой взгляд лучше бы или дал сутки или дал конкретные задачи на алгоритмы.

    Поскольку сам работаю на шарпе, комментировать стиль написания не могу. Может какие-то приемы это классика
    Ответ написан
    Комментировать
  • Сервис для подсчета самых часто встречающихся слов в тексте?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Не точно то, что вы просите, но работает подобно lingvist.io Он сам уже анализировал большое количество книг, и подсчитал самые часто встречаемые слова, после чего он дает их изучать в порядке убывания популярности.
    Ответ написан
    1 комментарий
  • Почему фрилансеры готовы общаться только в чате?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    потому что большинство заказчиков идиоты и фрилансеры просто не хотят тратить время еще и общаясь с ними. из личного опыта знаю как один "особый" заказчик любил звонить. среди дня и ночи. по любому вопросу. даже просто уточнить что то. после этого больше с заказчиками на связь не выхожу.
    p.s. а еще это трата времени. порой, когда я общаюсь с заказчиками - параллельно я делаю другой проект. и мне легче общаться по средством чата и не отвлекаться от работы.
    p.p.s а еще мне нужно чтобы заказчик написал тз, ну или хотя бы описал словами что он хочет в текстовом виде. нежели будет придумывать на ходу при общении, а потом мне это еще вспомнимать чтоли? или на диктофон записывать?
    Ответ написан
    13 комментариев
  • Есть ли ляпы в коде?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Одна логическая ошибка в коде точно есть. Объясню ее на примере.

    function setHandler(el){
    
       var obj = new MyController(el);
    
      $(el).on("click", function hand(){
          alert(obj.name);
      });
    
    }
    
    setHandler(element1);
    setHandler(element2);


    После выполнения данного кода в память браузера попадают:
    • Функция setHandler
    • Два объекта типа MyController
    • Две функции hand - обработчики события onclick.


    Да-да, для каждого вызова setHandler создается своя функция hand. Две (три, десять или даже миллион) разные функции с одинаковым телом. Все, что их отличает - область видимости, в которой они объявлены (к примеру, внутри каждой из них доступен свой obj).

    Но, спрашивается, как мы можем оптимизировать потребление памяти в данной ситуации? А вот так:

    function hand(){
    
      var obj = $(this).data("obj");
    
      alert(obj.name);
    
    }
    
    function setHandler(el){
    
       var obj = new MyController(el);
    
      $(el)
        .data("obj", obj) //Как вариант
        .on("click", hand)
      ;
    
    }
    
    setHandler(element1);
    setHandler(element2);

    Вынесем hand в более высокую область видимости.

    Теперь в памяти сохранены:
    • Функция setHandler
    • Функция hand
    • Два объекта MyController
    Ответ написан
    7 комментариев