jQuery. Обращаемся к дочерним элементам по клику на родителя.

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

Честно говоря, я не знаю можно ли в вордпрессе прям красиво сделать вывод html, css и js, чтобы наглядно получилось, так что только код.

Например, имеем подобную структуру:

div

Нужно, чтобы по клику на заголовок, список пользователей сворачивался, стрелочка у заголовка переворачивалась и менялась прозрачность заголовка. Реализовывала с помощью jQuery, получилось в итоге так:

$(document).ready(function(){

//обращаемся к заголовку элемента team_group(мои грабли – обращалась в первом варианте реализации не именно к заголовку, а ко всему блоку, в итоге при клике по всей области team_group, участники группы сворачивались(блондинка, да))

   $(“.team_group”).children(“h3”).click(function () {

// меняем прозрачность заголовка, если на него уже был клик и прозрачность = 0,7, то при следующем клике меняем ее на 1. Тут из интересного, если в скобочках у css не передавать значение свойства, то мы получаем существующее значение этого свойства и в итоге можем его с чем-либо сравнить.
   $(this).css(“opacity”, $(this).css(“opacity”) == “0.7” ? “1” : “0.7”);

// аналогично изменению css-свойства меняем src у картинки(в данном случае переворачиваем стрелочку)
   $(this).children(“img”).attr(“src”,$(this).children(“img”).attr(“src”) == “images/arrow_up.png” ? “images/arrow.png” : “images/arrow_up.png”);

//а это самая интересная и забавная запись, мне кажется) Т.к. первой строкой обращались к заголовку(h3), а не к team_group, то в this у нас этот заголовок и попадает и дальше идет поиск по детям h3, и уж .team_person там нет. Так что с пом-ю parent() поднимаемся на уровень выше и вуаля! Может, это не самый красивый способ, так что буду рада советам;)
   $(this).parent().children(“.team_person”).toggle();

});

 

P.S. Может, мой читатель расскажет, почему css знает, что такое hover, а что такое click нет? 🙂

 

Continue Reading

Отправляем письма с помощью sendmail(+Postfix).

Если сразу что-то не сделаешь, то точно не сделаешь. Так что по горячим следам – sendmail.
Вообще, у кого-то, вероятно работает всё сразу(или кто-то что-то настраивал, но не рассказал;) У меня, как всегда, не работало. Но, опять же, благодаря кому-то(спасибо, Ваня:), определилось с большой степенью вероятности, что проблема не в запросах, которыми я письмо отправить пытаюсь, а в настройках. Ну а дальше поиск – первый результат, показавшийся мне разумным, был про настройку postfix’а. Конечно, я тут же отправилась настраивать его=)
Сам пост с настройкой http://hints.macworld.com/article.php?story=20081217161612647
Продублирую всё равно у себя, ибо, как оно бывает, оригинал может оказаться недоступным(так я в выходные пирог испечь пыталась, когда сайт с рецептом в самый нужный момент решил меня порадовать,  отобразив 502 код ошибки)

Открываем на редактирование(я использую vi, в режим редактирования переходим с помощью клавиши i, а выходим esc) /etc/postfix/main.cf и в конце файла дописываем:
relayhost = smtp.yourisp.com # (+ можно указать порт smtp.yourisp.com:587)
smtp_sasl_auth_enable = yes
smtp_use_tls = yes
smtp_enforce_tls = yes
smtp_sasl_security_options =
smtp_sasl_tls_security_options =
smtp_sasl_tls_verified_security_options =
smtp_tls_loglevel = 2 # optional if you wan to see what’s going on with the TLS negotiation in /var/log/mail.log
smtp_sasl_password_maps = hash:/etc/postfix/smtp_sasl_passwords
smtp_tls_per_site = hash:/etc/postfix/smtp_tls_sites
tls_random_source = dev:/dev/urandom
Сохраняется всё командой :wq!
Теперь создаем /etc/postfix/smtp_sasl_passwords со следующим содержимым:
smtp.yourisp.com username:password
И создаем /etc/postfix/smtp_tls_sites таким:
smtp.yourisp.com MUST_NOPEERMATCH
Теперь выполняем след. команды:
$ cd /etc/postfix
$ chmod go-rx smtp_sasl_passwords
$ postmap smtp_sasl_passwords
$ postmap smtp_tls_sites
Ну вот, можно проверить, получилось ли что-нибудь, например, так:
echo “Hello” | mail -s “Test” you@domain.com
А так можно посмотреть логи:
tail -f /var/log/mail.log

Итак, казалось бы после выполнения предыдущих пунктов должно всё заработать, по крайней мере я рассчитывала на это очень. Но, конечно, нет) А всё почему: 1. всегда проверяйте, что ваш макбук подключен к сети, и вайфай, как всегда не отвалился(моему не повезло с этим)
2. если сконфигурировал postfix , да вообще любой сервис – убедись, что он запущен.
Думаю, понятно, что у меня были за проблемы=)Восстановив подключение к сети и запустив постфикс, письма я отправила, но ключевое не то, что отправила, а то, что они дошли.
Ну, понятное дело, что если мы настроили зачем-то себе сервер, да еще и отправляем письма таким вот способом, мало просто отправить какое-то абстрактное письмо.
Так что теперь часть про парочку команд sendmail, которыми пользовалась я:
1. printf “subject”| sendmail mymail@test.ru <test.rtf – тут я прикладываю файл, из которого сформируется description письма(файлы: у меня так и не дошли руки разобраться с кодировкой, а  с ней неладное, ввиду того, что эта неприятность меня не блокировала)
2.  Чтобы был в письме красивый адрес отправителя добавляем опцию –f: printf “Subject: test” | sendmail -f mymail@test.ru mymail@test.ru ( тут еще и без описания)
3. Еще можно отправить письмо так : echo “oololo” | sendmail mymail@test.ru ( с телом, но без темы)
4. И вот так  (echo “Subject: subject”; echo “body”)| sendmail mymail@test.ru – скобки тут нужны, да
5. Добавить кого-либо в копию  письма также можно через echo(если мне кто-нибудь поведает более красивый или правильный, да или просто другой способ, буду только рада)
6.И заголовки я  добавляю через echo(и опять же открыт вопрос про альтернативные варианты): (echo “Subject: testMailHeader to”; echo “CC:test@test.ru”;echo “To:test1@test.ru”; echo “Message-Id:<1111111111111@test.test.ru>”; echo “X-Test-test:test”) | sendmail -f mymail@test.ru -t  test1@test.ru.ru

Да, и кстати, не стоит забывать смотреть логи, в них столько всего полезного бывает;)
P.S. Пост я начинала со словами “по горячим следам”, ага, как же, с момента написания основной части, до момента, когда я дописала пункт 6, прошло…тадаам. 17 дней. Такие дела.

Continue Reading

Отправляем POST(PATCH,PUT etc) запросы.

С nix’овыми системами все просто – открыл терминал – ииии…cURL, ничего выдумывать не надо, хотя, можно и повыдумывать.  На винде прям сразу, без дополнительных инструментов, отправить запрос не получится(или я не знаю как). Так что на данный момент для себя  обнаружила я три прекрасных способа отправлять запросы:

  • Способ один. Романтичный.  Ох, да, сердце мое то замирает, то начинает быстрее биться при виде черного окошечка с зелеными буквами. Поэтому, когда у меня нет недостатка времени, запросы я отправляю через Сygwin. Также, через эту среду,  очень удобно отправлять курлом готовые запросы, которые не надо много и часто изменять.
  • Способ два. Для блондинок.  На самом деле не совсем) Использую я плагин для браузера Dev HTTP Client. С ним чрезвычайно просто отправлять запросы: в селекте выбираешь, какого типа запрос отправлять(GET, POST, PUT, DELETE, PATCH), сверху пишется адрес, слева можно добавлять заголовки, а справа блок для тела запроса. Ниже будет приходить ответ. Есть история запросов. Ну и любой запрос можно сохранить. Выглядит этот дивный инструмент так:

2014-03-12_2255

  • Способ три. Фундаментальный. Это SoapUI.  Мощный инструмент для функционального тестирования. Так что, возможно, слегка кощунственно использовать его лишь для дерганья ручек. Чтобы начать им пользоваться надо немного, ага, немного, повозиться.

Такие дела.

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

Continue Reading

Подключаем AndEngine к Eclipse.

Иногда, а может и не иногда, я занимаюсь странными вещами. Например, подключаю игровые движки к среде разработки, при этом не собираясь ничего делать дальше…

Собравшись сие действие проделать и, конечно, практически не разбираясь в теме, пошла искать. Первые n статей не дали ответа на вопрос – вечно при установке вылезали ошибки. Но вот, описываю сработавший способ, собственно, он изложен тут. Только скрины немного другие в исходном посте.

  1. Идем на страницу проекта AndEngine на  github  
  2. Скачиваем zip-архив и распаковываем его куда-нибудь, чтобы потом найти.
  3. Запускаем Eclipse.
  4. Импортируем AndEngine (File->Import …)
    And+Ecl_step1Жмем Next и в следующем диалоговом окне указываем путь к папке с проектом AndEngine
    step2Finish.
  5. Возможно, кому-то везет и на этом шаге все успешно и заканчивается.
  6. Но это точно не мой случай: весь проект в ошибках. Так что идем дальше: к способу 2.
  7. Создаем новый проект File->New->Project или File->New->Other
    step3Next
    В следующем диалоговом окне указываем путь к папке AndEngine
    step4Finish.
  8. А вот теперь все сложилось:)

 

Да, дальше AndEngine надо подключить в качестве библиотеки к требуемому проекту. Делается это так:

  • Кликаем правой кнопкой на проект в дереве и из меню выбираем Свойства.
  • В открывшемся окне справа активируем строку со словом Android и подключаем библиотекуstep5

Готово.

Continue Reading

Сети Петри

Ввиду быстрого замещения информации в доступных областях памяти, пора, пожалуй, срочно уже законспектировать ее остатки. Хоть тезисно.

Сети Петри — математический аппарат для моделирования динамических дискретных систем. Ну а дискретные динамические системы – это,например, компьютеры, включая,конечно и все составные части; программы, сети передачи данных и т.п.

File:Detailed petri net.png

рис.1 Сеть Петри (картиночка из вики )

Сеть Петри состоит из дуг, переходов, позиций и фишек.

Сеть Петри выполняется посредством запусков переходов.

Переход запускается удалением всех разрешающих фишек из его входных позиций и последующим помещением в каждую из его выходных позиций по одной фишке для каждой дуги.

Выполнением сети Петри управляют количество и распределение фишек в сети.

Переход называется разрешенным, если каждая из его входных позиций имеет число фишек, по крайней мере равно числу дуг из позиции в переход.

В сетях Петри условия моделируются позициями, событияпереходами.

  • возникновение события равносильно запуску соответствующего перехода
  • выполнение условия представляется фишкой в позиции, соответствующей этому условию
  • запуск перехода удаляет разрешающие фишки, представляющие выполнение предусловий и образует новые фишки, которые представляют выполнение

Виды дуг(самое ценное):

  • “обычные” дуги – ну дуги и дуги,соединяют позицию и переход и переход и позицию, ничего интересного
  • ингибиторные дуги – исключающее “или”(тут самое время вспомнить Теорию Дискретных Устройств и все будет ясно) – переход срабатывает в том случае,если в позиции,от которой отходит ингибиторная дуга нет фишек.
  • тестовые дуги – первой в голову приходит аналогия с буфером с заданной емкостью(т.е. когда во входной позиции накопится число фишек равное весу тестовой дуги, то они начнут уходить,сигнализирую тем самым о каком-то событии, например о том,что буфер переполнился и пакеты(фишки) теряются) Да,у дуги есть вес.

Ну и виды переходов (классифицируются по времени срабатывания):

  • детерминированный
  • экспоненциальный
  • равномерное распределений
  • немедленный

 

Для вдохновения когда-то были использованы книга В.Е.Котова “Сети Петри” и среда моделирвоания “HPSim”.

 

Continue Reading

Установка YUM на CentOS.

На моем замечательном vps не оказалось yum(консольный менеджер RPM-пакетов). А без него жить как-то тяжко. И вообще, вот странно, почему хостер не включил его в изначальную поставку, но при этом описывает у себя на сайте упрощенный процесс установки…

Для того,чтобы что-то установить, нужно сначала узнать на что хочешь это установить) Так что первым делом узнаем архитектуру системы (все  команды для centos):

uname – a

Continue Reading

“Unable to create directory”(Plesk + WordPress) .

Почти два дня ушло на поиски решения. Уже сколько раз говорю себе, что первым делом подумаю,а потом буду гуглить, но…Гугление началось, как всегда, с текста ошибки, выдаваемой WordPress’ом: “Unable to create directory”.  Ошибка эта появлялась в следующих случаях: при попытке обновить WordPress(WP) через его Консоль, при попытке загрузить новые плагины, темы и изображения.

Все найденные решения мне не помогали, собственно, я еще до того, как прибегнула к поиску проверила права на папки, все разрешила, но это не помогло. Не помогли и всякие строчки, которые предлагалось прописать в wp-config, только с медиафайлами помог совет – убрать галочку с “Помещать загруженные мной файлы в папки по месяцу и году” и выставление прав 775 на папку wp-content/uploads.

И тут, о чудо, возникла мысль: а что это вообще за группы-то такие psaserv и psacln… В них-то и крылась вся проблема, вернее, не в них конкретно а в панели управления хостингом Plesk, которой и принадлежат эти группы.

При установке чего-либо,в данном случае WordPress(WP), с помощью панели управления хостингом Plesk, Plesk назначает группой папки httpdocs psaserv, в все файлы в этой папке относит к группе psacln. А у web-сервера дефолтный аккаунт apache, который не входит в группу psacln. Соответственно, раз пользователь  не входит в группу, которая имеет права на запись в соответствующую директорию, то он и не может ничего там создать и в связи с этим-то и невозможно ни обновить WP, ни загрузить новые плагины.

Таким образом, решение проблемы кроется всего лишь в добавлении аккаунта web-сервера(apache) в группу psacln:

1) Открываем для редактирования файл /etc/group

2) Ищем в нем строчку psacln:x:505: и добавляем в конец слово “apache”, таким образом строчка теперь выглядит так: psacln:x:505:apache

(Вместо 505 может быть указано любое другое число)

Собственно, если бы до выполнения этих действий, никто бы права не менял,как попало…ага…то осталось бы просто перезапусти web-сервер командой service httpd restart . В противном случае нужно выполнить еще несколько команд, чтобы выставить корректных владельцев на директории.

3) Переходим в каталог с сайтом: cd /var/www/vhosts/[domain.com]

chown -R [username]:psacln httpdocs

chmod -R g+w httpdocs

find httpdocs -type d -exec chmod g+s {} ;

4) Перезапускам web-сервер: service httpd restart

5) Ура! С чистой совестью идем пить чай с пирогом 🙂

Continue Reading

Несколько сайтов на одном сервере(httpd.conf).

Для того,чтобы разместить несколько сайтов на одном сервере нужно внести изменения в основной конфигурационный файл web-сервера, в случае с CentOS это файл httpd.conf.

Имеем: VPS, на котором установлена операционная система CentOS, панель управления хостингом Plesk, а также конфигурационный файл apache(httpd.conf), причем, изрядно так уже поправленный ,в связи с тем,что на этом же сервере установлена OpenCMS. Причем, установлена она, можно сказать, потом и кровью, так что уж очень не хотелось ничего испортить в процессе установки wordpress.

Открываем файл httpd.conf для редактирования. Лежит он обычно по пути /etc/httpd/conf .

В конце файла есть раздел “Section 3: Virtual Hosts”. В этой третьей секции и нужно добавить столько блоков

<VirtualHost *:80>
DocumentRoot /var/www/vhosts/example1.com/httpdocs     //путь к папке с сайтом
ServerName www.example1.com                                                 // доменное имя
ServerAlias example1.com
ErrorLog logs/example1.com-error_log
CustomLog logs/example1.com-access_log common
</VirtualHost>

сколько сайтов планируется разместить на одном сервере.

httpd.conf
Изменения в httpd.conf

Итак, на что стоит обратить внимание:

1) Строка  NameVirtualHost *:80 обязательно должна быть раскомментирована. (у меня изначально она была закомментирована, из-за чего, при рестарте апача выдавалось вот такое замечательное сообщение: “Starting httpd: [Mon Aug 13 19:29:17 2012] [warn] _default_ VirtualHost overlap on port 80, the first has precedence” и при обращении к любому из трех сайтов по доменному имени(в файле httpd.conf ServerName) взору представал  только тот сайт, который в файле httpd.conf был прописан первым)

2) Должна быть прописана строка ServerAlias example1.com, и, соответственно, для всех остальных виртуальных хостов также должен быть указан алиас(синоним).

Собственно и все, это две небольшие тонкости, на которые я изначально не обратила внимание и поэтому не сразу все мои три сайта смогли благополучно сосуществовать на одном vps.

После внесения всех изменений, необходимо сохранить файл httpd.conf и перезапустить apache командой service httpd restart.

 

Continue Reading