• Какая разница между серверными версиями Linux?

    dunmaksim
    @dunmaksim
    Технический писатель
    Аргументы в пользу Debian:
    • Огромное количество пакетов (в rpm-based дистрибутивах нужно подключать "левые" репозитории типа EPEL) "из коробки". Подключить репозитории PostgreSQL или Nginx сможет любой, кто способен выйти из vim
    • Хорошая документация (и её много, советы для Ubuntu подойдут и для Debian)
    • Стабильность (как негативное следствие - старые пакеты). Ubuntu берёт свои пакеты для стабильных версий из тестовой ветки Debian. Мне кажется, этот факт говорит сам за себя.
    • Получает обновления безопасности в числе первых
    • Длительное время поддержки релизов
    • Небольшое количество проблем при переходе на новую версию (почитайте про массовый BUTTHURT админов, обновляющих CentOS или RHEL с одного мажорного релиза до другого)
    Ответ написан
  • Откуда начинается отсчёт при указывании STATIC_URL в settings.py в django?

    dunmaksim
    @dunmaksim
    Технический писатель
    STATIC_URL - это часть URL, с которой будет начинаться путь к статике. Допустим,
    STATIC_URL='vendor'
    Теперь при парсинге URL Django будет сразу понимать, что запросы вида
    http://mysite.ru/vendor/...
    относятся к статическому контенту и делать там ничего не надо, нужно просто вернуть файл.
    Кроме этих параметров в settings.py для статики нужно указать ещё параметр PATH_TO_STATIC - это папка, куда Django при выполнении команды
    python manage.py collectstatic
    сложит все статические файлы.
    А вот в каждом приложении я обычно делаю так:
    • создаю папку static
    • в ней создаю папку с именем приложения, чтобы при сборе статики не было каши
    • кладу в папку нужные библиотеки и т.д.
    Вот тут полный разбор данного вопроса (ENG).
    Ну и не забываем в начале шаблонов писать тег:
    {% load staticfiles %}
    Вот тогда ссылки будут работать:
    <link rel="stylesheet" href="{% static 'desktop/libs/bootstrap/css/bootstrap.css' %}"/>
    Ответ написан
    Комментировать
  • Запись обыкновенной дроби в html?

    dunmaksim
    @dunmaksim
    Технический писатель
    Никак. Можно сверстать таблицу, где у ячеек будет только нижняя и верхняя границы соответственно с collapse: collapse, но это костыль. Посмотрите лучше сюда www.mathjax.org или вот сюда https://github.com/Khan/KaTeX
    Там хватит не только обыкновенные дроби, а вообще всё что угодно отобразить.
    Ответ написан
    Комментировать
  • Какие годные идеи проектов для портфолио веб-разработчика вы знаете?

    dunmaksim
    @dunmaksim
    Технический писатель
    Чем я сейчас занимаюсь: смотрю проекты на всяких фрилансах, если вёрстка, например, моего уровня - скачиваю макеты и верстаю "для себя". Когда придёт время показать что-то потенциальному заказчику, я просто открою на диске папку "Web" и отправлю в архиве пару-тройку готовых свёрстанных макетов.
    Почему бы Вам не попробовать делать так же?
    Ответ написан
    1 комментарий
  • Почему при использовании ajax c django появляется ошибка Internal server error 500?

    dunmaksim
    @dunmaksim
    Технический писатель
    1. Вам нужно в Вашего шаблона, который выводится на страницу, включить тег {% csrf token %}
    2. Также нужно, чтобы при загрузке страницы срабатывал вот этот скрипт:
    (function(G) {
    	"use strict";
    	var $ = G.jQuery;
    
    	function csrfSafeMethod(method) {
    		return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    	}
    	function sameOrigin(url) {
    		var host = document.location.host, // host + port
    		    protocol = document.location.protocol,
    		    sr_origin = '//' + host,
    		    origin = protocol + sr_origin;
    		// Allow absolute or scheme relative URLs to same origin
    		return (url == origin || url.slice(0, origin.length + 1) == origin
    				+ '/')
    				|| (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin
    						+ '/') ||
    				!(/^(\/\/|http:|https:).*/.test(url));
    	}
    	$.ajaxSetup({
    		beforeSend : function(xhr, settings) {
    			if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
    				xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
    			}
    		}
    	});
    }(this));

    3. Комментировать middleware csrf_token не надо. Вы уж будьте последовательны - если делаете CSRF, так делайте до конца.
    4. Ваш вид лучше написать так:
    @csrf_protect #Защищать так защищать
    def email_check(request):
        if request.method == "POST":
            post_email = request.POST.get("email")
            user_by_email = User.objects.get(email=post_email)
            if user_by_email is not None: #Такой email уже использован
                return HttpResponse(json.dumps({"success": False, "error": "Пользователь с таким email уже зарегистрирован"}), content_type="application/json")
            else: #E-mail свободен
                return HttpResponse(json.dumps({"success": True}), "application/json")
    Ответ написан
  • Динамическое подключение javascript

    dunmaksim
    @dunmaksim
    Технический писатель
    Ответ написан
    Комментировать
  • Хочу научиться создавать плагины JQuery - с чего начать?

    dunmaksim
    @dunmaksim
    Технический писатель
    Чтобы создавать свои плагины, Вам нужно:
    - хорошо знать JS и его подводные камни;
    - знать, что такое шаблон "модуль" и уметь писать свои модули;
    - помнить, что jQuery.fn - всего лишь псевдоним для jQuery.prototype; добавляя свою функцию к этому свойству, Вы расширяете прототип функции jQuery, и важно ничего там не сломать;
    - следовать соглашению, по которому любой плагин jQuery на выходе должен вернуть исходный или модифицированный массив переданных на вход элементов (шаблон "цепочка", есть ещё антишаблон, следующий из этого, называемый "крушение поезда")

    Собственно, вот Вам заготовка модуля:
    (function ($){
        "use strict";
        function myFunction(items){
            return $(items).each(function(){
                $(this).text("Hello, jQuery!");
            });
        }
    
        $.fn.hellojQuery = myFunction;
    }(jQuery));
    Ответ написан
    1 комментарий
  • Зачем в Twitter Bootstrap + перед объявлением функций?

    dunmaksim
    @dunmaksim Автор вопроса
    Технический писатель
    Из статьи ясно, что это ещё один способ объявления самовызываемой функции. Очень интересный подход.
    Ответ написан
    Комментировать
  • Как inline-block элементам сделать прилипание к верхнему краю?

    dunmaksim
    @dunmaksim
    Технический писатель
    Да тут куча вариантов. Например, сделать таблицу с 4 колонками, в неё поместить div'ы со 100%-ой шириной.
    Второй вариант - верстать div'ами, внутри которых находятся 4 div'а шириной в 25%, а в этих блоках уже те же div'ы со 100% шириной, как и в предыдущем решении.
    Ответ написан
    Комментировать
  • Не работает команда bower init в PHPStorm на ubuntu?

    dunmaksim
    @dunmaksim
    Технический писатель
    А Вы напишите, например
    bower install jquery
    и пришлите сюда, что там выдала система. А то догадываться надо сидеть, правильно ли поставлен nodejs, глобально или локально установлен bower, стоит ли npm на самом деле, на какой системе всё это происходит и т.д.
    Ответ написан
    2 комментария
  • Когда окончательный релиз windows phone 8.1?

    dunmaksim
    @dunmaksim
    Технический писатель
    Вот тут актуальная информация по Европейскому региону.
    Ответ написан
    Комментировать
  • Как выбрать случайное число в jquery?

    dunmaksim
    @dunmaksim
    Технический писатель
    $("div > strong").each(function(){
        var strongStr = $(this).text(),
            strongNum = (strongStr !== "" && strongStr !== undefined ? strongStr.valueOf() : undefined);
        if (strongNum && strongNum > %минимум%  && strongNum < %максимум%){
            вызов_функции_которая_что_то_делает_с_элементом(this);
        }
    });
    Ответ написан
    Комментировать
  • Качества JavaScript разработчика

    dunmaksim
    @dunmaksim
    Технический писатель
    Стоян Стефанов - JavaScript. Шаблоны
    Николас Закас - JavaScript. Оптимизация производительности
    По jQuery лучше всего читать сайт jquery.page2page.ru/index.php
    Ответ написан