• Как развиваться в программировании не привязываясь к языку?

    myjcom
    @myjcom
    Clean Code: A handbook of software craftsmanship / Чистый код: Создание, анализ и рефакторинг
    Год издания: 2013
    Автор: Robert Martin / Роберт Мартин
    ISBN: 978-5-496-00487-9

    The Clean Coder: A Code of Conduct for Professional Programmers / Идеальный программист. Как стать профессионалом разработки ПО
    Год издания: 2012
    Автор: Robert C. Martin / Роберт Мартин
    ISBN: 978-5-459-01044-2

    Алгоритмы. Справочник с примерами на C, C++, Java и Python
    Год издания: 2017
    Автор: Хайнеман Д., Поллис Г., Селков С.
    ISBN: 978-5-9908910-7-4

    Design Patterns. Elements of Reusable Object-Oriented Software/Приемы объектно-ориентированного проектирования. Паттерны проектирования
    Год издания: 2015
    Автор: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides/Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж
    ISBN: 978-5-496-00389-6

    Test-driven development by example / Экстремальное программирование. Разработка через тестирование
    Год издания: 2017
    Автор: Kent Beck / Кент Бек
    ISBN: 978-5-496-02570-6

    Грокаем Алгоритмы. Иллюстрированное пособие для программистов и любопытствущих
    Год издания: 2017
    Автор: Бхаргава А
    ISBN: 978-5-496-02541-6

    Алгоритмы. Теория и практическое применение
    Год издания: 2016
    Автор: Стивенс Род
    ISBN: 978-5-699-81729-0

    прочитать нужно все

    ну и на закуску
    C Unleashed / Искусство программирования на C. Фундаментальные алгоритмы, структуры данных и примеры приложений. Энциклопедия программиста
    Год: 2001
    Автор: Heathfield R., Kirby L. / Хэзфилд Р., Кирби Л.
    ISBN: 0-672-31896-2 / 966-7393-82-8
    Ответ написан
    9 комментариев
  • Git-метки. Чтобы повесить метку на commit, нужно сначала создать ее, потом взять хеш коммита и применить git tag? Или можно сразу во время commit?

    @Raimon
    В гите все устроено предельно просто. tag и даже branch это просто ссылка на комит, то есть на диске создается файл для tag/branch в котором указан хеш комита на который он ссылается. Отсюда вывод, чтобы создать тег нужен коммит.

    Что казается pull/fetch, это почти одно - fetch простая команда которая получает изменения из удаленного репозитория, а pull - это составная команда, которая внутри первым шагом вызывает fetch, потом например rebase.

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

    По умолчанию, команда git push не отправляет метки на удалённые серверы. Необходимо явно отправить (push) метки на общий сервер после того, как вы их создали.

    Подробнее тут.
    Ответ написан
    Комментировать
  • Как экспортировать БД с SQLEXPRESS?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    sqlcmd -E -S .\SQLEXPRESS -d master -Q "BACKUP DATABASE 'somedatabase' TO DISK = N'D:\Temp\somedatabase.bak'"
    Ответ написан
    Комментировать
  • Можно ли слинковать 32-битный .so с 64-битным?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Сделать 32-битную программу обертку и вызывать функции с помощью какой-нибудь библиотеки межпроцесного взаимодействия.
    Например
    www.boost.org/doc/libs/1_65_0/doc/html/interproces...
    doc.qt.io/qt-5/ipc.html
    Ответ написан
    Комментировать
  • Можно ли слинковать 32-битный .so с 64-битным?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Правда?

    Правда.

    может есть лазейка

    Нет. Без шансов.
    Ответ написан
    Комментировать
  • Как изменить функцию bash чтобы она выполнялась правильно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    find -maxdepth 1 -type d -not -name '.' -print0 | xargs -0 du -sh
    Ответ написан
    Комментировать
  • Ограничение доступа к диску С:\?

    @lexa4lexa
    Доступ к папкам ограничивал через "Свойства папки"/безопасность. Проблема, что для каждой папки отдельно, и каждой папке пришлось создавать пользователя. Муторно, можно ли это сделать как-нибудь по другому и более грамотно?


    Если у вас там NTFS, то доступ закрывается единожды - в корне C:, D:
    Только нужно указать, что запрет распростаняется рекурсивно.
    А затем единожды разрешается в D:/username
    Ответ написан
    Комментировать
  • Проверка разработанного программного продукта?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Профессиональное тестирование подразумевает отдельное направление.
    Тестировщик берет ТЗ и пишет тест-кейсы - то есть описание как и что нужно протестировать, чтобы убедиться, что это соответствует тех.заданию.

    Простые продукты можно потестировать на основной функционал на коленке.
    Сложные - этим занимаются аналитики с тестировщиками. Первые уточняют ТЗ, вторые создают тесты и пользуются этим.
    А вообще, почитайте базовые книжки и статьи о тестировании.
    Ответ написан
    2 комментария
  • Как связать разработку на локалке и проект на хостинге через git?

    @Sad_Bro
    На темной стороне.
    если совсем заморочились с академичностью то тогда смотрите в сторону jenkins или других инструментов для непрерывной интеграции. Если чуть подробнее то это отдельный инструмент, в котором заводятся задачи, одна из задач например как раз и деплоит код из ветки мастер (по изменению в этой ветки) на сервер.
    Ответ написан
    Комментировать
  • Почему cron не отправляет http запрос?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Скорее всего он не находит wget
    Укажите полный путь к wget
    Ответ написан
    Комментировать
  • Как распределить права доступа на папки в Ubuntu Server?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    не надо никаких кронов с чмодами. Почитайте про create mask\force create mode\directory mask\force directory mask.
    Ответ написан
    3 комментария
  • Какой порядок работы с git?

    @aol-nnov
    смартгит в стороночку откладываешь, книжечку в руки https://git-scm.com/book/ru/v2
    практика командами гита, потом понимание процесса придет, а желание пользоваться смартгитом, скорее всего - уйдет.

    можно работать!
    Ответ написан
    Комментировать
  • Стоит ли учить программировать по старинке?

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

    Мда. "Если ваша программа потребляет всего лишь на 50% больше памяти, чем ей нужно, это не так уж и плохо".

    "Мне противно, как часто программа обучения строится на посылке, что Java представляет собой хороший язык для того, чтобы начинать программировать, потому что это так "просто" и не нужно отвлекаться на эти скучные детали про строки и выделение памяти, и сразу можно изучить кульные ООП-штучки которые помогут сделать ваши большие программы так восхитительно модульными. Это педагогический провал. Поколения выпускников снисходят на нас, раскидывая алгоритмы маляра Шлемиэля налево и направо, даже не понимая этого, поскольку у них нет представления о том, что строки на нижнем уровне сложны, даже если из их перлового скрипта этого не видно. Если хочешь научить кого-то хорошо, надо начинать с основ." (с) Джоель Спольски
    Ответ написан
    Комментировать
  • Как в Docker тестировать задачи которые выполняются по cron? (как ускорить время)?

    zolt85
    @zolt85
    Программист
    Вы хотите Сron протестировать? Что он в точно заданное время стартанет? Или все таки хотите протестировать работу задачи, выполняемой по расписанию?

    Cron, думаю, в тестировании не нуждается. А вот задачу можно тестами покрыть. И не заниматься магией.
    Ответ написан
    Комментировать
  • Как реверсят протоколы клиент-серверных приложений?

    newross
    @newross
    Product owner
    тут нет единственно верного решения. Условно протоколы можно разделить на 3 группы:
    - json\soap\xml. Там уже все описано, даже мозг включать не надо;
    - текстовые протоколы без описания структуры. Придется немного подумать, но весь текст у тебя перед глазами, выявить закономерности довольно просто. Записываешь, что настраивал на клиенте, смотришь как изменился запрос и ответ сервера. На крайняк декомпилируешь клиента и смотришь разбор протокола :)
    - бинарные протоколы. Вот тут реально хардкор. Если не получиться декомпилировать код клиента, то можно зависнуть надолго. Нужно будет строить предположения о структуре данных, проводить огромное количество экспериментов. И если для простых протоколов это еще реально, то для сложных проще заплатить кому-то из разработчиков, чтобы слили структуру. Например, мы реверсили протокол автомобильных весов. Клиентской программы не было, за нее просили несколько сот тысяч рублей, больше чем стоимость весов. Но в течение пары дней подобрали структуру и успешно расшифровали протокол, интегрировали весы в систему. А вот с протоколом навигационного оборудования это не прокатило- слишком сложный протокол, очень много переменных. Оказалось дешевле закупать другие приборы с открытым протоколом.
    Ответ написан
    Комментировать
  • Как выводить ответ systemctl в терминал?

    sim3x
    @sim3x
    Показать с каким кодом завершилась предыдущая команда
    echo $?
    0 - OK
    1 - ERROR

    Показать что вообще творится с сервисом, кусок логов
    systemctl status <servicename>
    Ответ написан
    Комментировать
  • Как вы добавляете коммиты?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Атомарно. Часто. Любой целостный, завершенный и логический кусок или кусочек, независимо от размера. И не важно - сам пилю, или с командой. Это вопрос привычки - поначалу и лень, и смысла вроде не видишь. Со временем привыкаешь. И когда приходит время воспользоваться прелестями атомарных коммитов (а оно приходит) - откат фичи или возврат ранее откаченной (по требованию клиента), разрешение конфликтов и тд - радуешься и благодаришь себя прошлого за то, что не поленился.

    И еще, очень важно писать адекватные commit message. Никаких "minor fix" и тому подобное. По месседжу должно быть четко понятно при листании истории что к чему и зачем, без необходимости смотреть diff. В идеале, еще и привязка к issues - но это актуально в командной работе, одному не надо.

    Что касается бранчей - сильно зависит от проекта. В командной работе это либо feature branches (git flow или своя произвольная схема), либо у каждого своя ветка и там делай что хочешь. Тут смысл в первую очередь в пулл-реквестах, code review, CI и стабильном мастере, в котором всегда находится рабочий код. Если работать одному - лично я привык бранчевать каждую отдельную фичу (не фрагмент, а именно модуль, автономный кусок функциональности). Удобно на серверах чекаутить конкретный бранч, тестить, возвращаться на мастер. И это позволяет одновременно работать над несколькими фичами. Например, одну допилил, отдал на утверждение клиенту, а там есть комменты/фиксы, но ждешь какие-то материалы. Переключился на другую фичу и безопасно работаешь в другом бранче. В общем, удобно и надежно.
    Ответ написан
    Комментировать
  • Нужно ли изучать автоматизацию сборки?

    @abcd0x00
    Если сейчас все так просто, то нужно разбираться в make/cmake?

    Вообще, make - это старое, проверенное средство, которое везде есть. И практика показывает, что когда у тебя есть проект, его надо не только компилировать, но и всячески обслуживать (запускать тесты, чистить ненужные файлы, устанавливать, деустанавливать). И для всего этого может быть сделан всего один Makefile, так как в нём не только сборку можно делать, но и задавать серии команд.
    Пример самодельного Makefile
    # Build section
    
    CC = gcc
    CFLAGS = -ansi -pedantic -Wall
    
    TARGET = ntow
    OBJS = main.o noun.o triple.o number.o cmdline.o errors.o input.o
    
    BASEDIR = .
    TESTDIR = $(BASEDIR)/tests
    
    # Install section
    
    prefix = /usr/local
    
    PREFIX = $(prefix)
    BINDIR = $(PREFIX)/bin
    
    # Rules
    
    all: $(TARGET)
    
    $(TARGET): $(OBJS)
    	@$(CC) $(CFLAGS) $^ -o $@ && echo "$(TARGET) has built"
    
    main.o: cmdline.h number.h input.h errors.h
    triple.o: triple.h
    number.o: number.h
    cmdline.o: cmdline.h errors.h
    
    # Commands
    
    help:
    	@echo "usage: make [ test | install | uninstall | clean | cleanall ]" 1>&2
    
    test: $(TARGET)
    	@$(MAKE) -C $(TESTDIR) run
    
    clean:
    	@rm -f $(OBJS) $(TARGET) && echo "$(TARGET) cleaned"
    
    cleanall: clean
    	@$(MAKE) -C $(TESTDIR) clean
    
    install:
    	install -d $(BINDIR)
    	install $(TARGET) $(BINDIR)/$(TARGET)
    
    uninstall:
    	rm -f $(BINDIR)/$(TARGET)
    
    .PHONY: help all test clean cleanall install uninstall

    Ответ написан
    Комментировать