работа фрилансером

программа для работы с регулярными выражениями

RegexBuddy — это отличная программа для работы с регулярными выражениями. C его помощью можна легко создавать, тестировать и работать с регулярными выражениями, которые будут точно соответствует вашим требованиям. Кроме того, вы можете создавать библиотеку часто используемых регулярных выражений, которая будет полезна в вашей дальнейшей разработке.
Скачать RegexBuddy (8.5Мб)

Недавно выкладывал объявление одной конторы, в котором номер телефона был зашифрован в уравнении - для привлечения внимания и защиты от дураков (чтобы совсем идиоты не звонили).

Однако наши программисты еще более суровы. Каптча на одном физ-мат сайте

Каптча уравнение интеграл

SELECT DISTINCT B.TYPE_SID, B.ID BANNER_ID, B.WEIGHT BANNER_WEIGHT,
B.SHOWS_FOR_VISITOR, B.FIX_CLICK, B.FIX_SHOW, B.KEYWORDS BANNER_KEYWORDS,
C.ID CONTRACT_ID, C.WEIGHT CONTRACT_WEIGHT, C.KEYWORDS CONTRACT_KEYWORDS
FROM b_adv_type T
INNER JOIN b_adv_banner B ON ( B.ACTIVE='Y' and B.TYPE_SID = T.SID
and B.STATUS_SID = 'PUBLISHED'
and (B.FOR_NEW_GUEST is null or B.FOR_NEW_GUEST='N')
and (ifnull(B.MAX_SHOW_COUNT,0)>ifnull(B.SHOW_COUNT,0)
or ifnull(B.MAX_SHOW_COUNT,0)=0) and (ifnull(B.MAX_CLICK_COUNT,0)>ifnull(B.CLICK_COUNT,0)
or ifnull(B.MAX_CLICK_COUNT,0)=0) and (ifnull(B.MAX_VISITOR_COUNT,0)>ifnull(B.VISITOR_COUNT,0)
or ifnull(B.MAX_VISITOR_COUNT,0)=0) and (B.DATE_SHOW_FROM<=now() or B.DATE_SHOW_
FROM is null or length(B.DATE_SHOW_FROM)<=0) and (B.DATE_SHOW_TO>=now()
or B.DATE_SHOW_TO is null or length(B.DATE_SHOW_TO)<=0))
INNER JOIN b_adv_banner_2_site BS ON ( BS.BANNER_ID = B.ID and BS.SITE_ID = 'ru')
INNER JOIN b_adv_contract C ON ( C.ID = B.CONTRACT_ID and C.ACTIVE='Y'
and (ifnull(C.MAX_SHOW_COUNT,0)>ifnull(C.SHOW_COUNT,0)
or ifnull(C.MAX_SHOW_COUNT,0)=0) and (ifnull(C.MAX_CLICK_COUNT,0)>ifnull(C.CLICK_COUNT,0)
or ifnull(C.MAX_CLICK_COUNT,0)=0)  and (ifnull(C.MAX_VISITOR_COUNT,0)>ifnull(C.VISITOR_COUNT,0)
or ifnull(C.MAX_VISITOR_COUNT,0)=0) and (C.DATE_SHOW_FROM<=now() or C.DATE_SHOW_
FROM is null or length(C.DATE_SHOW_FROM)<=0) and (C.DATE_SHOW_TO>=now()
or C.DATE_SHOW_TO is null or length(C.DATE_SHOW_TO)<=0))
INNER JOIN b_adv_contract_2_site CS ON ( CS.CONTRACT_ID = B.CONTRACT_ID and CS.SITE_ID = 'ru')
INNER JOIN b_adv_contract_2_type CT ON ( CT.CONTRACT_ID = C.ID
and (CT.TYPE_SID = 'ALL' or CT.TYPE_SID = T.SID))
INNER JOIN b_adv_banner_2_weekday BW ON ( BW.BANNER_ID = B.ID
and BW.C_WEEKDAY='SUNDAY' and BW.C_HOUR = '11')
INNER JOIN b_adv_contract_2_weekday CW ON ( CW.CONTRACT_ID = C.ID
and CW.C_WEEKDAY='SUNDAY' and CW.C_HOUR = '11')
LEFT JOIN b_adv_banner_2_group UG1 ON ( (UG1.BANNER_ID = B.ID and UG1.GROUP_ID in (2,1,21)) )
LEFT JOIN b_adv_banner_2_page BP1 ON ( BP1.BANNER_ID = B.ID and BP1.SHOW_ON_PAGE='Y')
LEFT JOIN b_adv_banner_2_page BP2 ON ( BP2.BANNER_ID = B.ID and BP2.SHOW_ON_PAGE='N'
and '/e-store/books/index.php?SECTION_ID=145' like concat(BP2.PAGE, '%'))
LEFT JOIN b_adv_contract_2_page CP1 ON ( CP1.CONTRACT_ID = C.ID and CP1.SHOW_ON_PAGE='Y')
LEFT JOIN b_adv_contract_2_page CP2 ON ( CP2.CONTRACT_ID = C.ID and CP2.SHOW_ON_PAGE='N'
and '/e-store/books/index.php?SECTION_ID=145' like concat(CP2.PAGE, '%'))
LEFT JOIN b_adv_banner_2_stat_adv BA ON BA.BANNER_ID = B.ID
LEFT JOIN b_adv_banner_2_country BC ON BC.BANNER_ID = B.ID WHERE T.ACTIVE = 'Y'
and BP2.ID is null and CP2.ID is null
and (BP1.ID is null or '/e-store/books/index.php?SECTION_ID=145' like concat(BP1.PAGE, '%'))
and (CP1.ID is null or '/e-store/books/index.php?SECTION_ID=145' like concat(CP1.PAGE, '%'))
and (BA.STAT_ADV_ID is null or BA.STAT_ADV_ID='0')
and (BC.COUNTRY_ID is null or BC.COUNTRY_ID='N0')
and ( (B.SHOW_USER_GROUP = 'Y' and UG1.GROUP_ID is not null)
or (B.SHOW_USER_GROUP <> 'Y' and UG1.GROUP_ID is null))
ORDER BY B.TYPE_SID desc, C.ID desc

У Битрикса одна из лучших админок, но внутри полный бардак. Как это работает на больших таблицах?
Например, не понятно зачем делать потенциально числовые поля строковыми: CP1.SHOW_ON_PAGE='Y'

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

объявление для инженеров

  1. Любая работающая программа уже устарела.
  2. Любая программа обходится дороже и требует больше времени, чем казалось в начале.
  3. Если программа полезна, ее обязательно переделывают.
  4. Если программа бесполезна, ее тщательно документируют.
  5. Любая программа в конце концов занимает всю доступную память.
  6. Ценность программы обычно определяется весом выдаваемой ею распечатки.
  7. Cложность программы обычно растет до тех пор, пока не превысит способности программиста, призванного ее поддерживать.
  8. Если утилиты, испытанные при инсталяции, работают идеально, все остальные функции будут работать не верно.
  9. Если входной редактор спроектирован так, чтобы исключить неверный ввод, найдется изобретательный идиот, который изыщет метод ввести разрушительную команду.
  10. Невежество - единственный язык, которым владеют все программисты.
  11. Увеличение численности программистов, работающих над проектом, увеличивает сроки его выполнения.
  12. Небрежно спланированный проект требует в 3 раза больше времени, чем ожидалось, а тщательно спланированный - только в 2.
  13. В программе всегда есть еще одна ошибка.
  14. Невозможно создать программу с полной защитой от дураков, ибо дураки крайне изобретательны.
  15. Если все идет хорошо, вас вскоре ждут серьезные осложнения.
  16. Если дела идут хуже некуда, вскоре выяснится, что это не так.
  17. Если кажется, что все в порядке, вы просто что-то просмотрели.
  18. Тестовые операции и результаты их выполнения должны быть воспроизводимы - они все должны давать одинаковые отказы.
  19. Вы всегда найдете еще одну ошибку, если еще раз загляните в свою программу.
  20. Терминал работает лучше, если его включить в сеть.
  21. Если все не работает, читайте документацию.
  22. Если вам не понятно какое-то слово в технической документации, игнорируйте его, смысл от этого не пострадает.
  23. Не важно, много ли вы работаете, вы все равно работаете недостаточно.
  24. То, чего вы не делаете, всегда важнее того, что вы делаете.
  25. Всегда оставляйте место для объяснения того, почему ваша программа работает не так как планировалось.
  26. Не существует ничего невозможного для человека, который не собирается ничего делать сам.
  27. Если бы строители сооружали здания также, как программисты пишут свои программы, первый же дятел разрушил бы человеческую цивилизацию.
  28. Программисты действуют рационально, лишь тогда, когда другие способы исчерпаны.

Недавно мне понадобилось перенести информацию из excel-файла в базу данных. Для этого я использовал класс Spreadsheet_Excel_Reader. Это php-класс, который создан для чтения excel-документов. Простой пример ниже иллюстрирует работу класса.

<?php
require_once ('/excel/reader.php'); // подключаем класс

$Excel = new Spreadsheet_Excel_Reader(); // создаем объект
$Excel->setOutputEncoding('cp1251'); // устанавливаем кодировку
$Excel->read('filename.xls'); // открываем файл
$count = $Excel->sheets[0]['numRows']; // узнаем количество строк в 1 листе

// с помощью цикла выводим все ячейки
for ($rowNum = 1; $rowNum <= $count; $rowNum++) {
    echo $Excel->sheets[0]['cells'][$rowNum][1]; // 1 столбец
    echo $Excel->sheets[0]['cells'][$rowNum][2]; // 2 столбец
    echo $Excel->sheets[0]['cells'][$rowNum][3]; // 3 столбец
}
?>

Например, $Excel->sheets[0]['cells'][2][1] обращается к ячейке, которая находится в первом листе, 2 строка, 1 столбец. Если ваши данные находятся в 3 листе нужно писать $Excel->sheets[2] (нумерация начинается с нуля).

Скачать класс Spreadsheet_Excel_Reader

Понимаю, что тема избита, но сам постоянно натыкаюсь на сайты, открывающиеся как с www, так и без.
Почему это плохо?
1) проблемы с поисковиками. Для поисковиков сайты с www и без www – 2 разных сайта. Это хорошо видно в Яндексе, который проиндексировал сайт wimax с www и без www. Такое дублирование понижает основной сайт в поисковой выдаче за счет «размытия» контента на 2 сайта.

индексация сайта с www и без www дублирование контента
На момент написания статьи я уже исправил ситуацию с wimax.
Сейчас в Яндексе висит только один основной сайт wimax.comstar.ru
читать дальше

Не секрет, что невозможно оптимизировать сайт под все виды поисковых запросов по данной тематике. Но даже если ваш сайт будет вылезать на 1 место по многим запросам, то часть клиентов все равно перейдет по 2,3… 10 ссылке в выдаче и возможно уйдет к конкурентам. А очень хочется, чтобы информация о фирме вылезала несколько раз подряд в топе. По всем этим причинам выгодно делать сайты-сателлиты. Сателлиты – это фактически сайты дублеры, но заполненые разным контентом. Пример

Наткнулся в чужом коде на очередной WTF. Вместо встроенной функции nl2br() использовалась конструкция

$message = str_replace("\n", "<br />", $message);

Прежде чем что-то написать откройте документацию PHP или посмотрите в гугле – возможно там вы найдете готовое решение вашей проблемы. У PHP имеется огромное количество встроенных функций для решения многих задач. Есть даже встроенная функция easter_date() для расчета дня Пасхи для любого года

<?php
echo date("M-d-Y", easter_date(2000)); // Apr-23-2000
echo date("M-d-Y", easter_date(2001)); // Apr-15-2001
?>

Не изобретайте велосипед!

Арифметические операторы JavaScript

Что за дебилы пишут такие книжки? Мало того, что в последних строчках написан бред, так еще указаны не все операторы. Инкремент, декремент, унарный плюс и унарный минус.