• Как составить сложный SQL запрос на создание таблиц со связями и объединением запросов?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    offtop: откуда в деревне Простоквашино взялась городская библиотека?

    А по сути - два соображения:

    1. Скрипты создания таблиц некорректно называть SQL, т.к. SQL - язык запросов к данным, а его расширение для манипуляции структурой БД, на котором пишутся эти скрипты, называется DDL (Data Definition Language).

    2. И, наконец, с непривычки решать такие задачи лучше графически... А потом уже писать скрипты.
    Ответ написан
  • Как называется этот тег?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    <form>
     <fieldset>
      <legend>Personalia:</legend>
      Name: <input type="text"><br>
      Email: <input type="text"><br>
      Date of birth: <input type="text">
     </fieldset>
    Ответ написан
    5 комментариев
  • Что такое Тест-кейс и тестовая модель?

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

    Поясню на примере. На Тостере есть функционал, позволяющий использовать некоторые HTML тэги в тексте ответа и комментария. Тесткейс для этого функционала может выглядеть (упрощенно) так:
    -----
    ID: UI1234
    Author: V. Pupkin
    Category: UI, manual, validation
    Description: HTML тэги в тексте ответа
    Precondition: Сервер запущен и доступен, В списке есть хотя бы один вопрос, Пользователь авторизован
    Steps: Выбираем вопрос из списка. В поле ответа набираем текст, в котором используем [список] и др. HTML тэги, после чего нажимаем кнопку "Отправить".
    Expected: Введенный текст отображается полностью, HTML тэги [разрешенные] отображаются соотв. разметкой, все прочие тэги игнорируются.
    Postcondition: Сервер все еще доступен, кол-во вопросов в списке не изменилось, в ЦОД не возник пожар и т.д.
    -----
    Соответственно, если при исполнении теста что-то не не выполнилось (разметка не отобразилась, сгорел ЦОД или ответ удалось написать без авторизации - не важно, что именно), тест считается проваленным.

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

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

    Ну, а тест-план - это вообще из другой оперы. Это документ, в котором подробно и основательно описывается, какие части системы как именно (и почему именно так) мы тестируем, что нам это дает (и что не дает) и обосновывается, почему такой подход обеспечивает требуемое качество продукта. Его обычно составляют совместно архитектор/техлид и ответственный QA в процессе разработки.
    Ответ написан
    1 комментарий
  • Где в debian найти файл с полными путями к программе?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Это ж как нужно было надругаться над Дебианом, чтоб такого добиться... Не нужно ничего искать! Нужно прописать правильный PATH для root/etc/login.defs).

    В принципе, достаточно иметь там:
    ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin


    P.S. И учитесь не ходить в root без нужды, а пользоваться sudo.
    Ответ написан
    3 комментария
  • Как с помощью java реализовать блокировку файла в файловой системе, для использования в многопоточном коде?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Дело в том, что гарантии блокировки файла дает (или НЕ дает), собственно, файловая система, а Ява просто довольствуется тем, что есть. Существует две принципиально разные идеологии: либо блокировка ФС таки блокирует (как в Винде), либо она носит скорее информативно-предупреждающий характер (как в Линуксе). Обе - со своими плюсами и минусами.

    В Яве есть механизм доступа к этому делу, в java.nio.channels.FileLock, но что и как с его помощю удастся реализовать, прямо зависит от платформы.

    В связи с этим, для решения указанной задачи существует два подхода.

    Кривой, исторически-обусловленный, используется, например, в HL7 (где проблема интероперабельности разных платформ через ФС все еще актуальна) определена иная семантика семафорных файлов: семафорный файл создается ПОСЛЕ того, как файл данных освобожден пишущим процессом (т.е. наличие семафора является гарантией ОТСУТСТВИЯ блокировки). Это элементарно реализуется на Яве созданием семафорного файла во временной папке с последующим move в целевую, ибо атомарность move-а гарантируется ФС. Недостаток этого подхода в том, что на однажды освобожденный файл нельзя повторно получить блокировку, в связи с чем вся эта костыльная кухня практически не масштабируется.

    Правильное, более универсальное и масштабируемое решение - вообще не использовать ФС в качестве shared memory (которая для этого, строго говоря, и не предназначена), а соединять процессы через брокер с внятным протоколом (очередь сообщений, сокеты, БД в конце концов).

    Так что, если это возможно, рекомендую попытаться решить проблему на уровне переосмысления общей архитектуры системы. Если нет, то придется клепать свой платформозависимый велосипед из java.nio.* и java.util.concurrent.* (например ReentrantLock)... т.е., фактически, переизобретать эдак добрую треть JEE :)

    P.S. Кстати, если это чудо должно еще и поверх smb крутиться, то я бы, лично, лучше сразу завернулся в простыню и пополз на кладбище, т.к. от smb с сетью в этом деле можно поиметь под нагрузкой еще как минимум столько же удовольствия.
    Ответ написан
    1 комментарий
  • В чем причина ограничения на размер изображения 65536 на 65536 px в формате JPEG(JFIF)?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Wikipedia:
    65536 is a power of two: 2^{16} (2 to the 16th power)


    Все элементарно: в седой древности, когда разрабатывался формат, 16 бит было "нормальной" разрядностью и казалось более чем достаточно на веки вечные. Ну, а потом, когда в мире наплодилось имплементаций, было уже поздно что-то менять :) Ну, и если честно: 64к пикселей, это весьма немало и этого стало реально нехватать сравнительно недавно.

    UP:
    JFIF, как формат, вообще, затачивался под медленные каналы связи (на те времена диал-ап 300 Baud было верхом совершенства) с последовательной передачей. Этим определена структура разметки (попрыгушечки по блокам через оффсеты) и структура файла: ключевая информация (например, IPTC) как можно ближе к началу, данные - в хвосте. Предполагалось, что принимающая система может в зависимости от уже принятых метаданных "на лету" перенаправить дальнейший поток данных, куда нужно. По тем временам это было весьма резонное соображение, т.к. ресурсы (в первую очередь, доступная память) были крайне ограничены.

    UP2:
    Вы считаете, что дело в размерности полей "X density" и "Y density"?

    Нет! Мы считаем, что дело в структуре маркера SOF0 (0xC0) (Start Of Frame), за которым следуют:
    - 8 бит - бит-на-пиксель,
    - 16 бит - ширина,
    - 16 бит - высота и
    - 8 бит - кол-во компонент.

    Вот эти самые 2 по 16 бит и ограничивают макс. размеры изображения.

    Density - это совсем из другой оперы. Как следует из названия, это таки реально разрешение по осям Х и У, задаваемое в единицах, которые закодированы в пред. байте.
    Ответ написан
    5 комментариев
  • Перемещение курсора между мониторами по шорткату в линуксах — как?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Вас спасет xdotool : сделать нужный скрипт, повесить на нужную комбинацию, профит.

    Хотя, если честно, проблема довольно странная. У меня ширина рабочего стола 3 х 1920. При нормально настроеном ускорении мыши, перемещение курсора на всю ширину делается одним движением кисти руки.

    P,S. Странно... Это только мне кажется, что заголовок вопроса - об одном, а текст - о другом?
    Ответ написан
  • Насколько часто втречаются одинаковые почтовые ящики (содержимое адреса e-mail до @)?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Это - постоянно встречающаяся ситуация! Однако, в этом нет ничего страшного, т.к., строго говоря, уникальной должна быть комбинация логина и пароля... а, кроме того, непонятно, что же мешает сохранять полный адрес?
    Ответ написан
    Комментировать
  • TRAKTOR DJ CABLE - Распиновка?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Ответ написан
    Комментировать
  • Можно ли хранить данные между PostBack-ами в не статическом классе?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Вот тут есть ответ с примерами.
    Ответ написан
    Комментировать
  • Почему пропадают пакеты в сети?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Кроме возможных конфликтов IP адресов (наиболее вероятно), проверьте нагрузку на свитч. Не то, чтоб это было сильно вероятно, просто легче проверить. Если и тут ничего, посмотрите, не занимается ли какой-нибудь мыслитель ARP-спуфингом. Был такой случай - один чудак на букву М терроризировал всю сетку, пока не поймали :)
    Ответ написан
    Комментировать
  • Нативные приложения для мобильных без ООП (кроме WebView) - возможно?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Во-первых, "лапшой" - это не функционально, а процедурно. Функционально было бы, если бы Вы писали, например, на node.js, но тогда и ООП вообще не было бы камнем преткновения :)

    Ну, а по сути вопроса: нет, без ООП ничего путного, тем более "нативного", не получится. Не ожидайте чудес и не верьте тем, кто будет их обещать! Это все равно, что искать такой специальный перспективный молоток, с помощью которого удастся делать автомобили "не хуже" сделаных на станках и роботах :)

    Тем более, что ООП не нужно осиливать - нужно понять принципы и научиться пользоваться инструментом (языком), облегчающим их использование. PHP для этого - далеко не лучший выбор. Не спроста студентов учат ООП на примере языков с сильной типизацией, например, того же Java.
    Ответ написан
    Комментировать
  • Wireshark не видит сетевой интерфейс в Ubuntu 14.04, что делать?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Сначала
    sudo dpkg-reconfigure wireshark-common
    Там согласиться с тем, что не только root должен иметь возможность снифить пакеты.

    Потом добавить себя к группе wireshark
    sudo adduser $USER wireshark
    (после чего не забыть перелогиниться!)

    Профит.
    Ответ написан
    5 комментариев
  • Почему в большинстве интерфейсов появление элементов плавное, а исчезание мгновенное?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Это делается из соображений эргономичности, т.к. наше зрение "заточено" под лучшее распознавание именно движущихся объектов. Соответственно, когда появляются новые объекты, внимание пользователя желательно направить именно на них (т.к. вероятнее всего, они появились для того, чтоб с ними что-то сделать). Ну, а при исчезновении элементов, наоборот - внимание нужно как можно быстрее "освободить".
    На заре Ajax вспомнили про этот феномен, когда столкнулись с той проблемой, что в одностраничных интерфейсах, если новые данные появлялись слишком быстро, пользователь их просто не замечал. Тогда даже тренд такой появился - цеплять на области с обновившимися данными какой-нибудь визуальный эфект (анимацию, мигание и т.д.), чтоб привлечь внимание пользователя.
    Ответ написан
    Комментировать
  • Почему криптографически подписанные приказы для ботнета редко(если вообще) встречаются на практике?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Введение единой пары ключей а. увеличивает сложность системы, б. увеличивает нагрузку (на шифрование) и, следовательно, риск обнаружения и при этом в. не приносит никакого профита в смысле защиты от указанных методов борьбы. Введение уникальных пар ключей для каждого клиента увеличивает сложность заражения (т.к. ключи нужно генерировать для каждого клиента). И, наконец, любой из этих методов в случае указанной конфискации серверов предоставляет прямые улики :)
    Ответ написан
    5 комментариев
  • Неубиваемая Activity, как реализовать ?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    В принципе, помимо указаных, есть еще вагон способов убить или по крайней мере скрыть активити. Даже наэкранная клавиатура (не говоря уже про камеру, скринсейвер и т.д.) иногда позволяет уйти в настройки со всеми вытекающими :)

    Единственное полноценное решение проблемы, это сборка собственной прошивки.

    Ну, а из более дешевых, но все еще сердитых: сделать свой лаунчер или же контроллировать наличие таскбара (тупо убивать процесс, когда он не нужен) из своего приложения... правда, для этого нужен root.
    Ответ написан
    Комментировать
  • Как работает уровень громкости звука в компьютерах/телефонах/плеерах?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    У звуковой волны нет никакой разрядности. Последнее место, где "разрядность" играет какую-то роль в современных девайсах, это миксер, где сигналы разных источников смешиваются в цифровом виде. С него сигнал попадает на ЦАП, выдающий аналоговый сигнал, подаваемый на аналоговый усилитель. Его коэфициент усиления тоже регулируется цифровым образом... но на "разрядность" самого сигнала это уже никак не влияет.

    Однако, если говорить о субъективном восприятии качества звука, то уровень громкости безусловно влияет на него, т.к. любой усилитель вносит в сигнал шумы и гармонические искажения. Кроме того, между усилителем и ухом находится еще и динамик (пассивный, как, например, наушники, или даже активный, как например, колонки со своим усилителем, разделяющими фильтрами и т.п.) со своей АЧХ, вносимыми искажениями и пр.

    При более менее адекватно согласованых друг с другом компонентах бытовых девайсов, "максимальное" качество звука достигается при уровне громкости в 30~40%. Но это - очень очень общее правило.
    Ответ написан
    Комментировать
  • Для чего нужны function, в PHP ?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Функции нужны для того, чтоб в коде не возникали ошибки и хаос. Если весь код состоит всего из нескольких переменных и операций, это понять сложно. Но как только их становятся десятки, сотни и тысячи, без разделения кода на изолированные логические кусочки (функции) уже не обойтись.

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

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

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

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

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Похоже, с физикой не просто плохо, а вообще - никак.

    По поводу того, что стекло - диэлектрик, и пропустить через него ток не выйдет, уже сказали. Но даже если пропустить его через какой-нибудь проводник (желательно, с большим удельным сопротивлением), наклеенный, обмотанный или просто приложенный к этому стеклу, то и тогда ответить на вопрос про 70° невозможно.

    Запомните такую вещь: мощность в 1 Вт, это, грубо говоря, возможность нагреть 1 грамм воды на 14° за 1 минуту.

    Однако, это не означает, что за следующую минуту можно нагреть ту же воду на следующие 14° и так далее, т.к. по мере нагрева, вода начинает отдавать тепло окружающей среде. С какой скоростью - зависит от площади всей конструкции, теплопроводности среды и разности температур. (Это - если совсем грубо, без учета инфракрасного излучения, возможного закипания воды и т.д.)

    Представьте себе дырявую бочку, к которой подключили шланг от водопровода. Давление воды в кране и начальный уровень воды в бочке известны, но сказать, достигнет ли (и если да, то через какое время) уровень воды в бочке 70см, невозможно, не учитывая всех дырок, через которые она будет выливаться. Ваши 1,68 Вт - это (условно) давление воды* в водопроводе. А все остальное - увы - неизвестно :)

    * - вообще-то, давление воды, это, на самом деле напряжение (В), а мощность (Вт) - это сколько воды сможет вылиться из крана, что, в свою очередь, зависит от диаметра трубы, т.е. сопротивления (Ом). Но для смысла задачи такое "упрощение" вполне приемлемо :)
    Ответ написан
    Комментировать
  • Как нарисовать через SVG такую же фигуру, как на скрине?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Не совсем понятно, что за фигура на скрине, но, вообще - с помощью Inkscape. Нарисовать полигон, позакруглять углы, и готово.
    Ответ написан
    Комментировать