Блог

Сыграй мне что-нибудь

<p><a href=”/media/uploads/2018/11/08/5071b200a3f346c6851ffd2f11f165d9.gif”><img class=”alignnone size-medium wp-image-369” title=”5071b200a3f346c6851ffd2f11f165d9” src=”/media/uploads/2018/11/08/5071b200a3f346c6851ffd2f11f165d9.gif” alt=”” /></a></p>

забавное

Как в javascript отфильтровать данные массива

Например, нам нужно убрать из массива все нули. Для этого используем метод filter.

var x = [1,5,8,0,3,45,0,31,1,0,0,0,34,5]; // из этого массива нам требуется удалить нули

var y = x.filter(function(elem) {
    return (elem !== 0); // если true, то возвращаем элемент, иначе - он будет удален из массива
});

console.log(y); // выводим получившийся результат

Результатом будет:

[1, 5, 8, 3, 45, 31, 1, 34, 5]
javascript

Как в javascript задать HEX-цвет через RGB

Один из вариантов следующий.

function rgbToHex (r, g, b) {
    r = r.toString(16);
    g = g.toString(16);
    b = b.toString(16);
    if (r.length == 1) r = '0' + r;
    if (g.length == 1) g = '0' + g;
    if (b.length == 1) b = '0' + b;
    return ('#'+r + g + b).toUpperCase();
}
javascript

Как в javascript получить случайный цвет в HEX

С помощью этой функции вы получите абсолютно случайный цвет.

function randomHexColor() {
    // число 16777215 (дес. система) равно 0xffffff (шестн. система),
    // поэтому можно записать и как return '#'+Math.floor(Math.random()*0xffffff).toString(16);
    return '#'+Math.floor(Math.random()*16777215).toString(16);
}
javascript

PhantomJS отображает квадратики вместо русских букв

Если в системе не установлены нужные для сайта шрифты, если их нельзя установить, либо еще по какой-то причине phantomjs показывает вам квадратики, можете попробовать следующий способ.
На сайте, с которым работаем, задать @font-face для всех используемых шрифтов и только после этого читать/фотографировать содержимое страницы. ВНИМАНИЕ! Работает только на версии >= 1.6.

См. пример, здесь БУДУТ квадратики:

<!DOCTYPE HTML>
<html>
<head>
    <title>@font-face demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <style type="text/css">
        body {
            font-family: Arial;
            margin: 50px;
        }
    </style>
</head>
<body>
    <p>Тест русского текста.</p>
    <p>Если вы видите русский текст, то тест успешно пройден.</p>
</body>
</html>

Для запуска можно использовать примерно такую команду:

phantomjs rasterize.js http://crusat.ru/demos/fontface/index-no-fontface.html test.png

А здесь со шрифтами все будет отлично:

<!DOCTYPE HTML>
<html>
<head>
    <title>@font-face demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <style type="text/css">
        @font-face {
            font-family: Arial;
            src: url(arial.ttf) format("truetype");
        }
        body {
            font-family: Arial;
            margin: 50px;
        }
    </style>
</head>
<body>
    <p>Тест русского текста.</p>
    <p>Если вы видите русский текст, то тест успешно пройден.</p>
</body>
</html>

Для запуска можно использовать примерно такую команду:

phantomjs rasterize.js http://crusat.ru/demos/fontface/index.html test.png

Это самое простое решение, что пришло мне в голову.

сайты

Добавляем только несуществующие записи в таблицу (SQL)

Допустим, у нас есть таблица tags такого вида (ниже привожу sql-запрос для ее создания):

CREATE TABLE `tags` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `tag_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
    `uid` int(11) unsigned NOT NULL,
    PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Ее смысл в том, что для каждого пользователя мы можем задавать отдельный набор тэгов, которые будут отображаться только ему. Кстати, отображать их удобно через jquery UI autocomplete multiple .

Также, когда мы передаем какой то набор сохраняемых тэгов для выбранного пользователя (опустим моменты разрезания, тримминг пробелов и т.д.), мы не хотим, чтобы повторялись одинаковые значения. Этого можно добиться, сделав следующее.

Сначала сделаем уникальный ключ из двух полей - tag_name и uid.

ALTER TABLE tags ADD unique index(tag_name,uid);

А затем мы можем добавлять несуществующие записи таким образом (обратите внимание на слово IGNORE - оно позволяет не показывать ошибку, когда создаются дубликаты уже существующих записей, а просто пропускать ее):

INSERT IGNORE INTO tags(tag_name, uid) VALUES ('my_tag1', 1), ('my_tag2', 1), ('мой тэг', 1)
sql

Безопасный eval в python

Об этом уже достаточно много сказано, но может и мой вариант кому-то приглянется. Обычно запрещают список опасных функций для eval’а. Можно пойти чуть по другому пути и наоборот, разрешить, что-то. Я набросал пример, цель которого была - вычисление математических выражений. Чтобы было не так скучно, сделал это в django через аякс :)

Итак, views.py

import re, json
from django.shortcuts import render_to_response
from django.http import HttpResponse

#...

def calc(request):
    return render_to_response('calc.html', {})

def calc_json_expression(request):
    p = re.compile(r'[-+*\/\(\)0-9(sin)(cos)(tan)]*', re.IGNORECASE)
    calcmath = request.POST["calc-math"]
    res = ''.join(p.findall(calcmath))

    from math import sin, cos, tan

    json_data = {}
    try:
        json_data['exp'] = res
        json_data['res'] = eval(res)
    except:
        json_data['exp'] = ''
        json_data['res'] = '0'
    return HttpResponse(json.dumps(json_data), mimetype="application/json")

urls.py

urlpatterns = patterns('kernel.views',
    # ...
    url(r'^calc/$', 'calc'),
    url(r'^calc-json-expression/$', 'calc_json_expression'),
)

и файл шаблона calc.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
    <h1>Calc</h1>
    <form method="post" id="calc-form">
        <p><label for="calc-math">Print math expression</label><input type="text" name="calc-math" id="calc-math" value="" placeholder="Expression"></p>
        <p>Expression: <span id="calc-math-expression"></span></p>
        <p>Result: <span id="calc-math-answer">0</span></p>
    </form>

    <script type="text/javascript">
        $('#calc-math').keyup(function() {
            $.post('calc-json-expression/', $("#calc-form").serialize(),function(data){
                $('#calc-math-answer').text(data["res"]);
                $('#calc-math-expression').text(data["exp"]);
            }, "json");
        });
    </script>
</body>
</html>

Самое интересное во всем этом коде - выбор допустимых символов и слов регулярным выражением. Сюда можно добавить и другие выражения, но принцип должен быть понятен.

p = re.compile(r'[-+*\/\(\)0-9(sin)(cos)(tan)]*', re.IGNORECASE)

Собственно, это и есть мой способ, подобных при поиске “безопасный eval” не увидел. Проблема, с которой столкнулся - это ограничение на время исполнения скрипта. Такой штуки нет ни в джанго, ни в питоне. Поэтому 10 в миллиардной степени, например, этот скрипт не обработает, а сайт просто упадет. Есть решения, интернет ими кишит, но они, в основном, только для *nix, либо практически нерабочие. Если кто-то найдет кроссплатформенный рабочий код - отпишитесь, пожалуйста :)

django javascript python

Как определить ширину текста javascript / jquery

Самое обычное решение - создать инлайновый элемент (у блочных ширина обычно или 100%, или заданная), например, span, задать его текст, шрифт и измерить его ширину функцией width().

Например, это можно сделать так:

function textWidth(text,fsize){
    var newelem = $('<span>');
    newelem.text(text);
    newelem.css('font-size', fsize);
    newelem.hide();
    $('body').append(newelem);
    var w = newelem.width();
    newelem.remove();
    return w;
};

Использовать следующим образом:

var mytextwidth = textWidth('lalala','16px');

В прошлом примере мы не определяем шрифт, а следовало бы. Конечно, передачу шрифта через параметр сделать проще простого, но раз уж мы используем jquery, сделаем так:

$.fn.textWidth = function(){
    var newelem = $('<span>');
    newelem.text($(this).text());
    newelem.css({
        'font-size': $(this).css('font-size'),
        'font-weight':$(this).css('font-weight'),
        'font-family':$(this).css('font-family'),
        'font-style':$(this).css('font-style')
    });
    newelem.hide();
    $('body').append(newelem);
    var w = newelem.width();
    newelem.remove();
    return w;
};

И мы можем использовать эту функцию для любого jquery-объекта:

var mytextwidth = $('#myelement').textWidth();
javascript

Спецификация xlsx, docx, pptx (ISO/IEC 29500)

Если вам потребовалось досконально разобраться в современных форматах Excel, Word, Powerpoint и т.д., то, думаю, вы попробовали бы поискать их внутреннее устройство (спецификацию).

Название спецификации для открытых форматов Office Open XML File Formats: ISO/IEC 29500.

Скачать можно у меня , либо здесь (все стандарты ISO) .

документация

Как сделать, чтобы флеш не перекрывал другие элементы в верстке

Надо
1. Использовать старый код вставки с ютюба (Use old embed code)
2. Вставить в EMBED wmode=”opaque”
3. Добавить в object

верстка