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

Типичная такая проверка пароля на сложность. По отдельности это всё элементарно, загвоздка в том, что это надо сделать одним выражением.

В оригинале вопрос был под C#, но в общем-то, можно использовать любой достаточно развитый диалект, я на перле сделал.

Моя версия: /(?=.*\d)(?=.*[a-z])(?=.*[^0-9a-z])/i Чтобы посмотреть, выделите мышкой.

via [info]nikulina

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

Сегодня один товарищ в одном совершенно непрофильном сообществе задал интересный вопрос: как сделать, чтобы колёсико мышки осуществляло  на широком сайте _горизонтальный_ скроллинг?

Я немножко погуглил и сделал так. Может, это как-то проще делается?

На фотографии можно внимания не обращать, я взял первые попавшиеся.

Выбираем данные из некоторой таблички:

SELECT foo,bar FROM table1 WHERE условия;

Всё отлично, данные выбираются. Но мне нужны не все, а только те, которые не встречаются в другой табличке.Проверяю парочку:

SELECT * FROM table2 WHERE foo='foo1';

Ура, ничего не находится. Значит, они должны появиться в итоговой выборке. Пишем окончательный запрос:

SELECT foo,bar FROM table1 WHERE условия
AND foo NOT IN (SELECT foo FROM table2);

И.. получаем индейскую национальную избу. 0 rows, и всё тут. Данных в table2 совершенно точно нет, но и из table1 они выбираться перестали.

Профессиональные DBA уже, наверное, догадались, в чём дело, но поскольку я не, мне на это понадобилось минут 10..

Дано: маленькая одноранговая виндовая локальная сеть. Доменный контроллер, WINS, DHCP, всё как обычно. Всё подключено через одни общий неуправляемый коммутатор. IP-адреса из блока 10.0.0.0/24.

Шлюзом в интернет работает юниксовая машина. Она же по совместительству работает VPN-концентратором (PPTP) для внешних клиентов. Адреса выдаёт из той же сети 10.0.0.0/24, чтобы подключившиеся клиенты прозрачно видели локальную сеть.

Никакой фильтрации трафика для локальных IP-адресов ни на самом шлюзе, ни на внутренних серверах нет.

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

В то же время соединения с самогО шлюза на те же внутренние серверы успешно устанавливаются.

Форвардинг на шлюзе, естественно, включён. Анализ с помощью tcpdump на шлюзе показывает, что пакеты из VPN успешно форвардятся в локальную сеть, но ответы на них не приходят. proxyarp включён.

Вопрос: кто виноват, что делать?

Upd: ответ под катом Read the rest of this entry »

Есть табличка tbl. В ней есть записи нескольких типов, различаются по значению поля type. Кроме того, есть поле disporder (числовое, определяет, в каком порядке записи должны показываться пользователю) и поле prio (приоритет, может быть ‘Y’ или ‘N’). Для записей типа 1 prio может быть равен ‘Y’ максимум у одной записи в таблице, а может вообще у всех быть ‘N’.

Задача: одним запросом вывести из таблицы поле title (и только его) для всех записей типа 2, а также для первых трёх (в порядке prio+disporder) записей типа 1, причём выборка должна быть отсортирована в целом по disporder, но если в выборке встречается запись типа 1, у которой prio=’Y', то она должна оказаться на первом месте.

Пользоваться можно вашим любимым диалектом SQL, а в моём для полного счастья не допускается FIRST и ORDER BY в SELECT’ах, объединенных в UNION. UNION, понятное дело, можно сортировать только целиком и только по полям, присутствующим во всех входящих в него SELECT’ах.

Задачка для админов, которые утверждают, что умеют прекрасно настраивать апач и php под ним. (Да, я тоже самоуверенно думал, что умею :).

Дано: машина с линуксом (или FreeBSD, или солярисом, не принципиально). На ней запускается несколько экземпляров апача, каждый со своей конфигурацией (естественно, на разных IP/портах).

Apache (2) и mod_php (5) установлены из стандартных пакетов/портов, кому как больше нравится, но суть в том, что бинарники и библиотеки для всех экземпляров апача одинаковы. [Это менять нельзя, таково условие задачи, обусловленное необходимостью лёгкого апгрейда стандартными средствами.] Разные только конфиги.

Соответственно, везде, где подключён mod_php5, настройки для php  считываются из одного и того же файла (/etc/php5/apache2/php.ini  или /usr/local/etc/php/php.ini, не принципиально). Естественно, во всех апачах настройки получаются одинаковые.

Собственно задача: у одного из апачей надо изменить некоторые параметры php, которые задаются через php.ini. Например, max_execution_time. Разрешается поменять все параметры сразу путём подсовывания другого php.ini.

Как?

Хинт: задача решаемая, но я на поиски решения потратил минут двадцать.

Очередной вопрос на засыпку для сисадминов: в линуксе можно в fstab указывать разделы не по именам устройств, а по UUID. И swap-разделы тоже. Для обычных ext2/3/4-разделов UUID можно посмотреть с помощью dumpe2fs. А для swap как? Можно, конечно, отформатировать раздел заново, mkswap при этом выдаст свежесозданный UUID, но это неспортивно.

Я пока нашел только один способ: Read the rest of this entry »

В квартиру от провайдера (netbynet) приходит витая пара. Провайдер жадный, поэтому она четырёхпроводная, под 10base-T (контакты 1,2,3 и 6). Обжата так себе, но в целом работает. Например, на ноуте с  Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02) работает.

А на моём ноуте с Broadcom Corporation NetXtreme BCM5755M Gigabit Ethernet PCI Express (rev 02)  - никак. С самого начала, ещё когда BIOS пытается что-то по PXE сделать, линка нет, в XP его тоже нет, и в линуксе никакими пинками ethtool’ом его получить не удаётся.

Проблема была временно решена древним 10-мегабитным хабом (даже не коммутатором), который линк в этой верёвочке увидел, а на ноуте, соответственно, обнаружилось 10 мегабит в полудуплексе, и сеть поднялась.

Вопрос: что это за вредность такая, и как с ней бороться?

Родилась из практической ситуации.

Итак: есть удалённый хост. У вас там есть учётная запись. Там есть sshd и ssh. А scp нет. Точнее, он там есть, но у вас не работает, потому что ему права такие странные поставили.

Задача: скопировать туда файл. Или оттуда.

Для тех, кто случайно не в курсе: при попытке скопировать файл даже туда sshd попытается там запустить scp. И обломится из-за нехватки прав.

Усложнённая задача: скопировать много файлов. Достаточно много, чтобы повторять найденное решение отдельно для каждого файла было слишком нудно.

Комменты временно скринятся.

Дано: две домашних сети в одном помещении. Скажем, в маленьком офисе. Или в квартире. Обе сети ходят в интернет, каждая через свой SOHO-роутер-коммутатор-точку-доступа-в-одном-флаконе, подключенные к разным провайдерам. Роутеры стоят рядом на полочке.

Будем считать, что у каждого роутера по 4 порта в коммутаторе, а в каждой сети по два компьютера. Адреса у компьютеров в одной сети 172.16.0.2 и .3, а в другой сети 172.16.0.50 и .51 (да, вот такие странные). Статические.

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

Ответ

Read the rest of this entry »