• Какой джентельменский набор вы используете для проектирования UI/UX?

    sheyker
    @sheyker
    Дизайн мобильных приложений для iPhone и Android
    5b8043ee7c791600399048.png
    Ответ написан
    Комментировать
  • Есть ли более высокоуровневые аналоги "Искусства программирования" Кнута?

    @asd111
    Кормэн, Сэджвик есть ещё wiki университета ИТМО ссылка
    Если хочется больше то есть ещё машинное обучение с нейронныеми сетями и т.д.
    Ответ написан
    Комментировать
  • Записная книжка программиста?

    lukoie
    @lukoie
    странно что никто здесь не посоветовал CintaNotes
    есть глобальный хоткей, так что просто выделяем текст где угодно, и контрол+ф12 делает заметку.
    есть теги, быстрый поиск, автосохраняется, несколько БД одновременно можно открыть
    сразу автоматически подхватывает урл откуда сохранялся текст, если сохраняется с сайта, дату вставляет
    короче - это именно то что Вы ищете.

    Либо WikiPad - но у нее нет преимуществ предыдущей программы, зато есть плюсы...которые в вашем случае не нужны, но Вам их выше сватали. Так вот WikiPad им альтернатива достойнейшая, но повторюсь - в вашем случае избыточная.
    Ответ написан
    5 комментариев
  • Как сравнить два CSS и удалить повторяющиеся стили?

    xtala
    @xtala
    Постигает Дзен
    Ставишь CSS линтер и начинаешь злиться от его занудства =) https://github.com/CSSLint/csslint / А он поначалу ой как злить будет. Очень привередливая штука. Двойное упоминание вроде тоже не любит. Так же находит кучу всего что по его мнению считается грязным стилем. Например использование !important . Приучает писать хорошо без говнокода.
    Ответ написан
    1 комментарий
  • Как подписывать разработанные сайты?

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

    ну и humans.txt
    Ответ написан
    Комментировать
  • Как правильно строить работу с git?

    @aol-nnov
    это личное дело каждой команды. можно, например, git flow
    Ответ написан
    4 комментария
  • Как разбить множество на три подмножества с одинаковой суммой элементов?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Задача о рюкзаке, даже о двух :)
    Заводите массив M[0..S/3,0..S/3] (можно битовый, но лучше побольше - чтобы хранить обратные ссылки). В нём будут отмечены элементы M[a,b], такие, что из уже просмотренных элементов текущего набора можно выбрать непересекающиеся подмножества с суммами a и b.
    Когда приходит очередной элемент x - выполняете M[a,b]=M[a,b] | M[a-x,b] | M[a,b-x] для всех a,b начиная с конца (с больших a,b). Если при этом 0 сменился на 1 - помечаете в массиве обратных ссылок, из какого элемента вы сюда попали.
    Сложность - O(n*S^2). Можно ли сделать лучше, не знаю.

    Вот вариант кода - но он печатает только два множества. Как напечатать третье, разберётесь.
    spoiler
    static void Main(string[] args) {
                int[] dat=Array.ConvertAll(Console.ReadLine().Split(' '),int.Parse);
                int S=0;
                foreach(int x in dat) S+=x;
                if(S%3!=0) {
                    Console.WriteLine("-1"); return;
                }
                S/=3;
                int[,] M=new int[S+1,S+1];
                M[0,0]=-1;
                foreach(int x in dat) {
                    for(int a=S;a>=0;a--) {
                        for(int b=S;b>=0;b--) {
                            if(M[a,b]==0) {
                                if(a>=x && M[a-x,b]!=0) M[a,b]=x;  // back by set1
                                else if(b>=x && M[a,b-x]!=0) M[a,b]=-x;  // back by set2
                            }
                        }
                    }
                }
                if(M[S,S]==0) {
                    Console.WriteLine("-1"); return;
                }
                int u=S,v=S;
                string res1="",res2="";
                while(u!=0 || v!=0) {
                    if(M[u,v]>0) {
                        res1+=" "+M[u,v]; u-=M[u,v];
                    } else {
                        res2+=" "+(-M[u,v]); v+=M[u,v];
                    }
                }
                Console.WriteLine(res1);
                Console.WriteLine(res2);
            }

    Ответ написан
  • Базовые знания алгоритмов?

    demoded
    @demoded
    какраз 4 сентября начнется. https://www.coursera.org/course/algs4partI
    читает сам Седжвик https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%B4%D...,_%D0%A0%D0%BE%D0%B1%D0%B5%D1%80%D1%82
    очень доходчиво все объясняется с картинками и анимацией. потом шикарные тесты, и практическое задание.
    но сложно...
    но очень затягивает :)
    Ответ написан
    Комментировать
  • Какими бесплатными стоками вы пользуетесь для поиска иконок, фото и элементов интерфейса?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    лидер - www.freepik.com/, у него много эксклюзива, а не как у других- сборники со свалок в сети

    по иконкам - от него же www.flaticon.com

    еще есть всякие all-free-download.com, но там мутнее с лицензией

    из относительно бесплатных рекомендую www.kozzi.com ( коззи скис, остался graphicstock.com, на него надо подписаться мылом и потом ловить акции на дешевую годовую)
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    ErmIg
    @ErmIg
    Программист
    Есть развернутый ответ для С++ кода, но его можно обобщить и на другие языки и платформы:

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

    1) Важно понимать, что алгоритмическая оптимизация практически всегда может дать лучший эффект, чем программная. Так, если алгоритм имеет сложность O(n^2), то на больших исходных данных он при любой оптимизации будет медленнее, чем неоптимизированный алгоритм сложности O(n). Впрочем, при выборе алгоритма, опираться только на его сложность не стоит: если объем исходных данных не велик, то вполне может оказаться, что алгоритм со сложностью O(n^2) будет работать быстрее, чем с O(n).
    2) Очень важно повторное использование (кеширование) промежуточных данных, вычисленных в программе – ибо быстрее всего выполняется работа, которую не надо делать. Тем не менее, не надо чрезмерно кешированием увлекаться – если объем кэшируемых данных слишком велик, то это может отрицательно сказаться на общей производительности программы (некоторые данные быстрее вычислять на лету, чем считывать из памяти).
    3) Следует избегать излишнего копирования данных (например, передавать сложные типы данных по ссылке, а не по значению).
    4) По возможности следует избегать условных операторов во вложенных циклах. Так как условные переходы, вызываемые такими операторами, плохо обрабатываются современными процессорами с конвейерной архитектурой.
    5) Данные в памяти, которые используются алгоритмами, должны по возможности лежать упорядочено, и использоваться последовательно. Это позволит процессору их эффективно кешировать. Важно помнить, что доступ к кэшу процессора значительнее быстрее, чем к оперативной памяти.
    6) Если алгоритмы это позволяют, то возможно стоит реализовать их параллельное исполнение (в отдельных потоках или процессах). Это позволит эффективно задействовать современные многоядерные процессы.
    7) В некоторых случаях (например обработка изображений) большого эффекта можно достичь применением специализированных расширений процессора (SSE, SSE2, AXX, AVX2 и другие). Стоит отметить, что большинство современных компиляторов (GCC, MSVS, ICC) поддерживают непосредственное использование данных расширений непосредственно из С++ кода при помощи специальных встроенных функций (intrinsics). Минусами такого подхода является потеря переносимости (впрочем, эта проблема решается наличием разных веток программы под разные процессоры) и значительное усложнение программы.
    8) Также большого эффекта можно достичь применением специализированных ускорителей, например GPU (технологии CUDA, OpenCL). Минусами таких решений являются потеря универсальности и значительное усложнение программы, а также то, что на специализированных ускорителях, как правило, хорошо работает далеко не каждый алгоритм.
    Ответ написан
    Комментировать