• Существует ли хороший autocomplete vim-плагин для Node js?

    @kfuntov
    Тут много разных https://github.com/joyent/node/wiki/Vim-Plugins
    Ответ написан
    Комментировать
  • Yii::t как решить проблему с редактируемыми текстами в view проектов?

    @kfuntov
    Переопределением CMessageSource::loadMessages можно сделать всё что угодно.
    Например в одном проекте не использовались категории, но в зависимости от текущего параметра в Request надо было по-разному переводить одни и те же слова (в рамках одного и того же языка) (вроде как у Вас похожая проблема). Так вот там был примерно такой код:
    <?php
    class MessageSource extends CMessageSource
    {
        protected function loadMessages($category, $language)
        {
            $config = require(Yii::getPathOfAlias('application.messages') . '/' . $language . '/default.php');
    
            $childConfig = Yii::getPathOfAlias('application.messages') . '/' . $language . '/children/' . Yii::app()->request->getChildrenTranslateId() . '.php';
            if (file_exists($childConfig)) {
                $vocab = require($childConfig);
                if (is_array($vocab)) {
                    $config = array_merge($config, $vocab);
                }
            }
    
            return $config;
        }
    }


    Таким образом порядок перевода в функции t был такой - сначала ищем в дочернем словеаре, если нет там - ищем в дефолтном для языка.
    Если нужно использовать категории - можно соответствующим образом изменить метод loadMessages.
    Основная идея этого метода в любом случае будет в том, что array_merge перезаписывает значения, если ключи одинаковые. Таким образом можно сделать как бы наследование файлов с сообщениями.
    Ответ написан
    Комментировать
  • Как убрать модальное окно?

    @kfuntov
    <html>
    <head>
    <meta charset="utf-8">
    </head>
    <body>
    <script>
    function short(url) {
      document.getElementById("shortUrl").value = url;
    };
    </script>
    <input type="text" id="shortUrl" />
    <script src="http://shrt.org.ua/--?url=http://vk.com&s=goo.gl&callback=short"></script>
    </body>
    </html>
    Ответ написан
    Комментировать
  • Как передать модель в ajax (Yii)?

    @kfuntov
    Замените $this->model на json_encode($this->model->attributes)
    Это должно поправить эту ошибку.
    Но вообще-то вы делаете что-то совсем не так, весь код выглядит странным, очень-очень.
    Ответ написан
    Комментировать
  • Какая самая простая для понимания реляционная БД?

    @kfuntov
    Более-менее распространённых реляционных баз данных сейчас не так много:
    Oracle DB и Microsoft SQL Server - точно не подходят под "простые". Это большие enterprise решения, на обучение которым люди тратят уйму времени.

    SQLite - Вы просили не писать (хотя под определение "простая, логичная и понятная" подходит как нельзя лучше: нету пользователей и ещё части усложняющей функциональности, при этом достаточно неплохо выдерживает SQL стандарт)

    MySQL - самая популярная бд, согромным количетвом примеров, советов и т. п. Причём на всех языках мира.
    Сама по себе эта бд не является образцом логичности и простоты, но если ты сталкиваешься с ней каждый день в течении нескольких лет, то она "вдруг" становится понятнее остальных.

    PostgreSQL - сама по себе логичная и приятная, но далеко не простая. Функциональности очень много, причём много сложной.

    Тут есть неплохое "сравнение" (скорее описание общих отличий) SQLite MySQL и PostgreSQL.

    Про менее распространённые:
    Не очень понятно, что вообще надо. Вопрос очень абстрактный. Если надо не только простую, понятную и логичную, а ещё, чтобы разобраться можно было, то надо, чтобы было хоть сколько-то материала (ответов на вопросы, примеров, туториалов).
    Вот страница русской вики (в списке не только реляционные, их пропускал)
    Посмотрим на те, у которых есть хотя бы страничка в русской wiki. (Если нет даже страницы, то вряд ли на русско-язычном ресурсе эту бд кому-нибудь посоветуют). Заранее прошу прощения за пробегание по верхам (с большинством бд не работал, мог допустить неточности):
    * Caché - "позиционирующаяся производителем как «объектно-реляционная» или «постреляционная»" - вряд ли "простая и понятная"
    * DB2 и Informix - базы данных, о которых я даже не смог понять, простые они, или нет. Обе - продукты IBM. Может быть она из них - то, что нужно (я правда не разобрался).
    * Ingres - предшественник PostgreSQL (не вижу смысла иметь дела с ней, когда есть Postgre)
    * mSQL - уже не разрабатывается, была вытеснена MySQL
    * Btrieve - уже не разрабатывается
    * ЛИНТЕР - уже не разрабатывается
    * Adaptive Server Enterprise - не является бесплатной (дальше лень смотреть, если честно)
    * Microsoft Access - комментарии излишни
    * OpenOffice Base - думаю, что так же, как и Access - годится для офис-менеджеров
    * Rdb - предшественник Interbase, хрен поставишь на ПК
    * Interbase - предшественник Firebird
    * Firebird - кстати, достаточно известная база данных, вполне может по соперничать с MySQL и пр. После изучения дополнительной информации о ней, может быть даже посоветовал бы её, как не такую сложную, как Postgre, но и не отход от стандартов и кашу MySQL (хотя сам с Firebird не работал, может оно там ещё сложней и замороченей)
    * HSQLDB - выглядит как маленькая, лёгкая бд, которая хорошо поддерживает стандарты SQL и всё. То есть вполне подходит под определение простая, но достаточно близка к почему-то заранее отклонённой SQLite

    Как итог напишу сложившееся общее субъективное мнение:
    Лёгкие и (поэтому) простые - SQLite (проще работать с базой, больше информации), HSQLDB (работает согласно стандартам SQL).
    Много информации, много возможностей, логичная - PostgreSQL.
    ОЧЕНЬ много информации, достаточно простая, не логичная во многом - MySQL.
    Достаточно простая, сравнительно мало информации, достаточно логичная (вообщем везде средняя) - Firebird.

    P.S. Пока исследовал интернет совсем забыл про то, что в вопросе было про наличие удобных инструментов. По этому пункту
    MySQL получает 5
    PostgreSQL - 4
    SQLLite - 4
    Firebird - 4
    HSQLDB - 3
    Ответ написан
    2 комментария
  • Как выводить с помощью Flask динамически обновляемую страницу?

    @kfuntov
    Достаточно распространённое решение - со стороны страницы аяксом (из JS) запрашивать сервер с некоторй переодичностью. Типа "ничего не изменилось?". А на сервере каждый раз отвечать, либо - "не", либо "да, вот это вот". И на JS это обновлять.
    Ответ написан
  • Чем послушать https под windows?

    @kfuntov
    Ответ написан
    Комментировать
  • MySQL выбор из 4х таблиц как?

    @kfuntov
    SELECT b.*
    FROM magazine -brands AS b
    INNER JOIN magazine -product_brands AS pb ON pb.brand = b.id
    INNER JOIN magazine -product_category AS pc ON pc.product = pb.product
    WHERE pc.category = #ID ИСКОМОЙ КАТЕГОРИИ#
    Ответ написан
  • Какие правильные права на файлы и директории web-проекта?

    @kfuntov
    Самой правильной(броневой) практикой вроде как считается - создание двух пользователей для проекта: для деплоя и для работы сервера. Помещение их в одну группу.
    Выставление прав на большинство (по возможности все) фалы проекта - 644.
    Выставление прав на большинство (вот тут скорее всего не все) директории проекта - 755.
    Для тех фалов/директорий, куда должен мочь писать сервер (логи, кеш и т.п.) - 664 и 775 соответственно.
    Owner у всего, что не создал сервер: пользователь_для_деплоя:общая_группа .
    Ответ написан
    Комментировать
  • Возможно ли переписать код, чтобы ReportForm сам определял, какую модель брать по ее имени?

    @kfuntov
    class ReportForm(forms.ModelForm):
    
        def __init__(self, *args, **kwargs):
            super(ReportForm, self).__init__(*args, **kwargs)
            for key in self.fields.keys():
                self.fields[key].widget = forms.TextInput(attrs={'class': 'form-control'})
    
        @staticmethod
        def getInstance(name, *args, **kwargs):
             if name == "one":
                 return ReportOne(*args, **kwargs)
            else:
                return ReportTwo(*args, **kwargs)


    Не уверен в том, что имелось в виду под "по её имени", но теперь можно будет создавать формы так:
    newform = ReportForm.getInstance("one")
    newform = ReportForm.getInstance("two")
    Ответ написан
    Комментировать
  • Как Вы понимаете junior, middle (developer), senior и есть ли принципиальная разница этих понятий в вебе, эмбедде, геймдеве и других программиннгах?

    @kfuntov
    В моей голове так:
    junior - если надо обязательно делать code review после выполнения задачи, и с большой вероятностью после него что-то править.

    middle - простые задачи можно вообще не ревьюить, когда ревьюишь сложные, делаешь это скорее "на всякий случай", хотя конечно всякое случается.

    senior - может проводить code review.
    Ответ написан
    Комментировать
  • Как лучше спроектировать приложение Flask?

    @kfuntov
    Не существует серебряной пули. Flask - очень гибкий, в нём позволительно делать и так, и так, и так.
    Как лучше - зависит от очень большого количества деталей, среди которых есть, например, "а как мы делаем/собираемся делать в остальных проектах?".

    Вот, например, достаточно распространённый способ организации директорий https://github.com/sean-/flask-skeleton
    Ответ написан
    1 комментарий
  • Существует ли нечто вроде "SQL Firewall"?

    @kfuntov
    Ещё есть вариант все нужные запросы посохранять в хранимые процедуры, и разрешить только их использование.
    Ответ написан
  • Как оптимизировать php скрипт?

    @kfuntov
    Что значит "правильно оптимизировать"?
    Тут всё написано так, что должно выполнятся быстро.
    Есть ряд вещей не очень направленных на оптимизацию, а именно:
    1. Нет проверки на то, что $userdata пустой (на случай, если у пользователя в куках был user_Id, которого в базе нету, например 9999999).
    2. В таком случае избыточная проверка $userdata['user_id'] !== $_COOKIE['id'] - сначала делается запрос "дай мне пользователя с таким id", а потом проверяется "тот ли id ты мне дал?"
    3. В строке print "Привет, ".$userdata['user_login'].". Всё работает!".$userdata['user_balance'].; - явно лишняя последняя точка.
    4. mysql_* функции считаются плохими для использования. ВСЕ нормальные люди советуют использоватьPDO или MySQLi (в том числе и сайт php.net).

    Про преобразование в html: то, что получается на выходе того скрипта - уже html. без тегов, но в принципе html.
    Если нужно добавить теги - это можно сделать, но тут надо понимать, что надо получить. Если важно просто "чтобы был html", то поздравляю, он есть.
    Ответ написан
    1 комментарий
  • Топ игроков. Как вывести место конкретного игрока?

    @kfuntov
    SELECT score,
           (SELECT COUNT(*)
              FROM table AS p
             WHERE p.score <= t.score) AS position
     FROM table AS t WHERE id=@id;


    По мотивам stackoverflow.com/questions/3614666/mysql-get-row-...
    Ответ написан
  • Как правильно получить суммирующую таблицу из двух?

    @kfuntov
    Все валюты есть в обоих таблицах? Или какой-то из валют где-то может не быть?
    Если в ПРИХОДАХ есть все виды валют, то можно так:
    SELECT
           p.валюта as ВАЛЮТА,
           p.tot as ПРИХОДОБЩИЙ,
           r.tot as РАСХОДОБЩИЙ,
           (p.tot - r.tot) as ОСТАТОК
    FROM 
        ( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
      LEFT JOIN 
          ( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
         ON r.валюта = p.валюта


    Если в "ПРИХОДАХ" может не быть каких-то валют,то нужен FULL JOIN, вместо LEFT.
    MySQL его сама не умеет, но способов его реализовать несколько, например:
    UNION LEFT и RIGHT JOIN-ов - самый короткий/понятный/красивый вариант, но при большом количестве валют может начать тормозить, так как UNION делает сортировку.
    SELECT
           p.валюта as ВАЛЮТА,
           p.tot as ПРИХОДОБЩИЙ,
           r.tot as РАСХОДОБЩИЙ,
           (p.tot - r.tot) as ОСТАТОК
    FROM 
        ( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
      LEFT JOIN 
          ( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
         ON r.валюта = p.валюта
    UNION
    SELECT
           p.валюта as ВАЛЮТА,
           p.tot as ПРИХОДОБЩИЙ,
           r.tot as РАСХОДОБЩИЙ,
           (p.tot - r.tot) as ОСТАТОК
    FROM 
        ( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
      RIGHT JOIN 
          ( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
         ON r.валюта = p.валюта

    Если производительность в данном месте требует оптимизации (советую сильно подумать, прежде, чем отвечать "да"), то можно усложнять запрос, делая его быстрее.
    Например, заменить UNION на UNION ALL и во второй части не выбирать значения, которые есть в первой.
    Ответ написан
    3 комментария
  • Как выбрать с двух таблиц MySQL?

    @kfuntov
    SELECT
        p.*,
        NOT ISNULL(wl.product_id)
    FROM product as p
    LEFT JOIN wishlist as wl ON p.id = wl.product_id;

    UPDATE спасибо @AxisPod (действительно IFNULL смотрел, не подошла, а ISNULL - то, что надо)
    Ответ написан
    1 комментарий
  • Выгрузка отчётов: как лучше организовать хранение файлов?

    @kfuntov
    Просто чтение csv быстрее выборки из базы.
    + можно гзиповать раз в неделю csv, которые старше месяца. Это сильно сократит размер.
    Ответ написан
    5 комментариев
  • Как вернуть новый интерфейс поиска Google?

    @kfuntov
    Скопируй из адресной строки сюда пожалуйста.
    Я могу и старый и новый открыть, если хочу:
    https://www.google.com/webhp?complete=0#complete=0... - Старый
    https://www.google.ru/search?q=asd - Новый
    Ответ написан