Добавление хлебных крошек в Битрикс

<?$APPLICATION->IncludeComponent(
    «bitrix:breadcrumb»,
    «breadcrumb»,
    array(
        «COMPOSITE_FRAME_MODE» => «A»,
        «COMPOSITE_FRAME_TYPE» => «AUTO»,
        «PATH» => «»,
        «SITE_ID» => «s2»,
        «START_FROM» => «1»,
        «COMPONENT_TEMPLATE» => «breadcrumb»
    ),
    false
);?>

резиновая верстка на col-xx-xx Bootstrap 3

шаг этой разметки довольно большой что начинает сразу видеться на больших и маленьких экранах
к примеру фото каталога 100px на 100px задать для всех экранов col-md-2 col-xs-2… это значит что на средних экранах смотреться будет хорошо, на больших более 20′ будет разъезжаться в разные стороны а на совсем маленьких — телефонах текст описания из соседней col-xs-10 будет наезжать на фото
выход — свой стиль и прописать размеры используя свою медиа разметку
    @include BootstrapGridBreakpoint(xs) {
      height: auto;
      left:   0px;
        }
    @include BootstrapGridBreakpoint(sm) {
      height: auto;
      left:   0px;
    }

твсРаботаСФайлами модуль 1с8

Функция ПолучитьРасширениеФайла(стрИмяФайла) Экспорт
	
	стрРасширениеФайла = "";
	
	ПозицияТочки = СтрДлина(стрИмяФайла);
	Пока ПозицияТочки >= 1 Цикл
		Если Сред(стрИмяФайла, ПозицияТочки, 1) = "." Тогда
			стрРасширениеФайла = Сред(стрИмяФайла, ПозицияТочки + 1);
			Прервать;
		КонецЕсли;
		ПозицияТочки = ПозицияТочки - 1;
	КонецЦикла;
	Возврат стрРасширениеФайла;
	
КонецФункции

Функция ВыбратьФайл(стрПолноеИмяФайла, Режим, Заголовок, Фильтр)
	
	Диалог = Новый ДиалогВыбораФайла(Режим);
	Диалог.Заголовок = Заголовок;
	Диалог.ПредварительныйПросмотр = Ложь;
	Диалог.Фильтр = Фильтр;
	
	Если ЗначениеЗаполнено(стрПолноеИмяФайла) Тогда
		Диалог.ПолноеИмяФайла= стрПолноеИмяФайла;
		стрИмяФайла = "";
		стрПутьКФайлу = "";
		РаботаСФайлами.ПолучитьКаталогИИмяФайла(стрПолноеИмяФайла, стрПутьКФайлу, стрИмяФайла);
		Диалог.Каталог = стрПутьКФайлу;
	КонецЕсли;
	
	Если Диалог.Выбрать() Тогда
		стрПолноеИмяФайла = Диалог.ПолноеИмяФайла;
		Возврат Истина;
	Иначе
		Возврат Ложь;
	КонецЕсли;
	
КонецФункции

// Открывает диалог выбора файла
//
// Параметры:
// стрИмяФайла - Строка - Полный путь к файлу
// Режим - РежимОткрытияФайла- (на запись, на чтение, на дозапись...)
// стрЗаголовок - Заголовок окна выбора файла
// Фильтр - маска фильтрации файлов в диалоге выбора файла
//
// Возвращаемое значение:
// нет
//
Функция ВыборИмениФайла(стрИмяФайла, Режим, стрЗаголовок = "", Фильтр = "*.*") Экспорт
	
	флВозврата = Ложь;
	СтандартнаяОбработка= Ложь;
	если Не ВыбратьФайл(стрИмяФайла, Режим, стрЗаголовок, Фильтр) тогда
		флВозврата = Ложь;
	Иначе
		флВозврата = Истина;
	КонецЕсли;
	Возврат флВозврата;
	
КонецФункции


// Проверяет по полному пути файла его существование
//
// Параметры:
// Параметр1 - Строка - Полный путь к файлу
//
// Возвращаемое значение:
// <Булево> - Возвращает Истина если файл существует
//
Функция ПроверитьСуществованиеФайла(стрПолнПутьКФайлу) Экспорт
	
	ФайлДляПроверки = Новый Файл(стрПолнПутьКФайлу);
	
	Возврат ФайлДляПроверки.Существует();
	
	
КонецФункции // ПроверитьСуществованиеФайла()

Функция СохранитьТекстВоВременныйФайл(стрТекст, стрРасширениеФайла, кодировкаФайла = "") Экспорт
	
	ЗагружаемыйФайл = Новый ТекстовыйДокумент;
	файлXML = Новый ЧтениеXML;
	
	ЗагружаемыйФайл.ДобавитьСтроку(стрТекст);
	
	стрИмяФайла = ПолучитьИмяВременногоФайла(стрРасширениеФайла);
	локКодировкаФайла = ?(кодировкаФайла = "", КодировкаТекста.UTF8, кодировкаФайла);
	ЗагружаемыйФайл.Записать(стрИмяФайла, локКодировкаФайла);
	
	Возврат стрИмяФайла;
	
КонецФункции //СохранитьТекстВоВременныйФайл()


Функция СохранитьURLВоВременныйФайл(знач стрURL, стрРасширениеФайла = "") Экспорт
	
	Если стрРасширениеФайла = "" Тогда
		стрРасширениеФайла = ПолучитьРасширениеФайла(стрURL);
	КонецЕсли;
	стрИмяФайла = ПолучитьИмяВременногоФайла(стрРасширениеФайла);
	стрСервер = твсРаботаСИнтернетом.ПолучитьСерверИзURL(стрURL);
	
	локПрокси = твсРаботаСИнтернетом.ПолучитьПрокси();
	Соединение = Новый HTTPСоединение(стрСервер,,локПрокси);
	
	HTTP_Запрос = твсРаботаСИнтернетом.СформироватьHTTPЗапрос(стрURL);
	Состояние("Загрузка: " + стрURL);
	
	Попытка
		HTTP_Ответ = Соединение.Получить(HTTP_Запрос, стрИмяФайла);
	Исключение
		Сообщить("Ошибка получения данных из Интернета по адресу: " + стрURL);
	КонецПопытки;
	
	Попытка
		Если HTTP_Ответ.КодСостояния >= 400 Тогда
			Сообщить("Код ответа сервера: " + HTTP_Ответ.КодСостояния + ". Ошибка получения данных из Интернета по адресу: " + стрURL);
			стрИмяФайла = "";
		КонецЕсли;
	Исключение
		Сообщить("Ответ не получен по адресу: " + стрURL);
	КонецПопытки;
	
	Возврат стрИмяФайла;
	
КонецФункции // СохранитьURLВоВременныйФайл()


Включение фоновой отладки в браузерах Chrome

chrome://flags/

silent-debug-google-chrome

 

 

 

 

 

 

во вкладке найти Фоновый режим откладки :

silent-debug-google-chrome1

Фоновый режим отладки Mac, Windows, Linux, Chrome OS

Не показывать информационную панель, когда расширение связано со страницей с помощью API chrome debugger. Установка этого флажка позволяет выполнять отладку фоновых страниц расширений.
Включить

Ну и напоследок: «А зачем мне это нужно?»  — чтобы отключить сообщение «Включен режим отладки NetBeans при отладке веб-страниц в NetBeans

 

 

не работают скрипты .JS .VBS в Windows 7,8,10 — x64, x32 — решение

я столкнулся с проблемой: пытаюсь запустить 1С 7.7 на Windows 10 — выдает ошибки и не регистрирует скрипты и библиотеки OpenConf (программы расширяющей возможности конфигуратора 1С 7.7) файл regall.bat.

Ошибки:

  • не удается найти файл сценария regfiles.js
  • Отсутствует исполняющее ядро для расширения имени файла js

Этот файл вызывает выполнение JS скрипта:

cscript //nologo regfiles.js /I %1 %2

Я обнаружил, что cscript в Windows 10 уже встроен и устанавливать движок скриптов не нужно еще раз.

При выполнении подобных команд в Windows старше XP возникают 2 основных проблемы:

  • Для расширений скриптов не зарегистрирована программа, которая их обрабатывает (.vbs, .js).Решение: зарегистрировать для этих расширений программу выполнения скриптов:
    Выполнить в командной строке от имени Администратора:
    ASSOC .JS=JSFile

    ASSOC .VBS=VBSFile

  • Команда вызова движка скриптов (cscript) не может найти нужный мне скрипт (regfiles.js), чтобы его выполнить.

Причина этого:

Все из-за механизма контроля учетных записей, когда мы выполняем программы от имени администратора, путь текущей папки меняется на путь к cscript.exe — c:\windows\system32\, а там нет файла пользовательского скрипта, который мы запускаем.

Решение:

В команде вызова скрипта указать полный путь к файлу скрипта, например:

cscript //nologo «d:\My Program Files\1Cv77\BIN\Config\system\regfiles.js» /I %1 %2

помните про кавычки в полном имени файла, чтобы дать системе знать что пробелы в имени файла это имена каталогов, а не параметры командной строки.

Если Вы нашли это — вам повезло — у Вас есть рецепт решения проблемы и экономии времени.

Спасибо за внимание. До новых встреч!

PS. Будет здорово, если Вы будете присылать проблемы, а я вам с ними смогу помочь.

сдвиги блоков, div, кнопок, картинок и т.п. CSS, Bootstrap

чтобы объект «съехал» нужно применить к нему стиль float:

со значением:

  • left;     — влево
  • right;  — вправо

сдвигает весь элемент, включая рамку, отступы и ширину рамки в указанном направлении (влево или вправо).

в Bootstrap это организовано добавлением класса уже содержащего этот стиль:

xx — число от 1 до 12 ширина сдвига, равная ширине колонки такого же формата. Эта ширина задается в процентах и ее можно увидеть в boostrap.css файле

отличия всех -sm-, -xs-,-md- классов в том, что у Boostrap есть 3 основных вида разрешения экрана контролируемых через


<span class="p">@media (</span><span class="n">max-width</span><span class="o">:</span> <span class="o">@</span><span class="n">screen-xs-max</span><span class="p">)</span> <span class="p">{</span> <span class="nc">...</span> <span class="p">}
</span>
внутри boostrap.css таблицы стилей. Итак, классы для:

для сдвига вправо:

  • col-sm-push-xx
  • col-xs-push-xx
  • col-md-push-xx

для сдвига влево:

  • col-sm-pull-xx
  • col-xs-pull-xx
  • col-md-pull-xx

чтобы сдвинуть колонки ВЛЕВО за счет увеличения свойства CSS margin-left (левого промежутка или поля между колонками) нужно использовать эти классы CSS из комплекта Boostrap:

только для сдвига влево:

  • col-sm-offset-xx
  • col-xs-offset-xx
  • col-md-offset-xx

 

Перенос по словам CSS, HTML

если часть содержимого контейнера скрывается, есть замечательное CSS свойство и его значение:

CSS код:
word-wrap: break-word;

оно делает так, чтобы текст переносился по словам на другую строку, а не прятался за границами контейнера (кнопки, div…)

Boostrap — картинка в круге (кружочке)

есть такой стиль в Boostrap

.img-circle {
border-radius: 50%;
}

если в class тега img, например, через пробел добавить img-circle  будет картинка в круглой рамке — не надо писать в свою таблицу стилей такой тег — он стандартный для Boostrap

Правда что Viber (Вайбер) станет платным?

Правда что Viber (Вайбер) станет платным?

«Естественно, это не правда. Кому это может быть нужно, я не знаю, но предполагаю, что рассылают сообщения сами пользователи. Несколько лет назад похожая ситуация была с ICQ. Абсолютно идентичные сообщения. Если бы эти сообщения присутствовали только в Viber, то можно было бы предположить, что это какие-то проделки конкурентов. Но так как такие же сообщения присутствуют в WhatsApp, то скорее всего этим занимаются сами пользователи», — рассказала Вероника Кесова.

вот данные с сайта Viber:

бесплатность вайбера

Как настроить телефон Grandstream BudgeTone 100 VoIP

budgetone_200Сначала настройте IP адрес прямо на телефоне

Нажать кнопку MENU

Выбрать IP Addr — Ввести IP адрес

Открыть на комьютере URL http://ip_адрес_телефона

имя пользователя по-умолчанию admin  пароль 123

компьютер должен иметь тот же диапазон адресов IP что и телефонный

Через браузер пропишите свои настройки IP телефонии.

Они выглядят примерно так:

grandstream-install2

 

 

 

 

grandstream-install4

 

grandstream-install1

 

 
grandstream-install6

 

инструкции :

Как сменить IP адрес в Windows 7 

от производителя телефона Grandstream BudgeTone 100

еще одна от производителя телефона Grandstream BudgeTone 100 в PDF

 

Где купить радиодетали и электронные компоненты?

Список интернет-магазинов:

Комларк — радиодетали, дешево хорошие конденсаторы

http://konderbutik.ru — Кондер бутик

http://dalincom.ru — Дальинком — работают только по РФ из Владивостока

http://kimkit.ru — Магазин радиодеталей в Москве

 

Далее — важные данные:

mradio-zdanie

Начинаешь искать радиодетали или узнавать — крупнейшим местом радиодеталей считается Митинский радиорынок.

схема проезда на митинский радиорынок
схема проезда на митинский радиорынок

Москва, Митинский радиорынок. То красивое здание — это не радиорынок.

Приезжайте в субботу до 13-00 увидите под ЛЭП реальный митинский радиорынок. Советские запчасти можно купить на рыночке: если встать лицом к входам красивого здания митинского радиорынка — идти влево до конца здания, спуститься по леснице, пройти палатки и под ЛЭП будут места как для пенсионеров-дачников на рынках (железные прилавки с крышей и без) — там вот можно по выходным найти (с утра до 13-00) реальные запчасти отличного советского качества — конденсаторы, резисторы, транзисторы, диоды, силовые диоды….

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

Слева от митинского радиорынка (здание несколько этажей) будут отрытые ворота а перед ними палатки. Если приехать в выходные — там можно дешево купить ручные инструменты, кабель, крокодилы пачками, светодиодные панели, горелки газовые, балоны к ним, гирлянды светодиодные…

3 этаж красивого здания это мир радиодеталей, только сидят там голимые перекупы задирающие цены до небес. Даже в случае безвыходном покупать там жопа как дорого. Ну вот вдумайтесь резистор на 5W стоит 20р!

Расчет цены для рынка — резистор 1W — 1руб.

Где же покупать? В Москве — на Авито. В Чип и дип есть доставка и она приемлемая. В приведенных выше магазинах радиодеталей.

Конечно дороже чем на рынке и в интернет-магазинах но дешевле 3го этажа радиорынка.

На вопрос почему тогда на 3м этаже сидят «люди» и скупают радиодетали? — статья — они сдают их на драгметаллы.

Отвратительно, учитывая, что сегодня современные резисторы, конденсаторы и транзисторы делают по гавнотехнологии и они горят, а советские — нет. Запас прочности советских радиодеталей — 300% минимум — по моим опытам с резисторами и силовыми диодами.

 

 

как в Linux вывести настройки IP адресов сетевых карт?

чтобы вывести настройки сетевой карты есть команда: ifconfig

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

вставить вот это в консоль Linux:
ifconfig eth0 | grep "inet addr:" | cut -f2,3

ifconfig eth1 | grep "inet addr:" | cut -f2,3

как получить все IP адреса из лога Asterisk?

чтобы получить все IP адреса из логов Asterisk нужно использовать несколько этапов обработки. Я объединил их в однин конвеер. В нем же считается сколько раз встречается IP адрес в логе. Затем все пересортировывается по возрастанию количества повторений адреса в логе.

вставить вот это в консоль Linux:
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" "/var/log/asterisk/full" |sort |uniq -c |sort -b -n -r

ограничение и запрет соединений с сервером Asterisk снаружи

как только поставишь asterisk сервер к тебе начнут долбиться с попытками звонить за твой счет. Чтобы это предотвратить в параметрах sip.conf нужно указать:

deny=0.0.0.0/0.0.0.0                             ;запретить все
permit=8.8.8.8/255.255.255.255           ;разрешить соединения только с этого IP

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

и помните, что asterisk это последняя линия обороны. Ломануть могут и ваш сервер и чтобы это предотвратить нужно настроить firewall — сетевой экран, чтобы не пускать определенные типы запросов или же банить по странам.

Это делается через iptables.

Вот пример правил iptables для отклонения всех запросов на регистрацию на ваш Asterisk сервер.:

iptables -A INPUT -p udp —dport 5060 -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp —dport 5060 -m string —string «REGISTER sip:46.160.231.50» —algo bm -j ACCEPT
iptables -A INPUT -p udp —dport 5060 -m string —string «REGISTER sip:» —algo bm -j DROP
iptables -A INPUT -p udp —dport 5060 -m string —string «OPTIONS sip:» —algo bm -j DROP
iptables -A INPUT -p udp —dport 5060 -j ACCEPT

или вот это с сайта http://invoip.net:

*****начало цитаты*****

-A INPUT -p udp —dport 5060 -j SCAMBLOCK
-A INPUT -p udp —dport 5060 -m recent —set —name SIP
-A INPUT -p udp —dport 5060 -m recent —update —seconds 2 —hitcount 60 —name SIP \
-j LOG —log-prefix «SIP flood detected:»

Приведенное требование определет пакет с помощью цепочки SCАMBLOK. Именно внутри этой цепочки имеют место быть все заблокированные по разным причинам адреса IP. В случае выявления найденного хоть одного совпадения с одним из пакетов списка, пакет незамедлительно отбрасывается.

В случае не отбрасывания пакета используется второе правило, то есть пометка для учета, именуемого SIP. Что касается правила под номером три, то оно производит подсчеты, не состоялось ли превышение данного пакета.

В случае не превышения количества, правило тут же игнорируется, а если превышено, то незамедлительно выполняется конкретное действие. Системный лог в нашем с вами случае безнадежен. Прописывается пакетная детальная информация. Пакетная информация начинается с такой строки, как «SIP flood detected:». Время и количество пакетов для каждого источника отдельно рассчитываются. Из этого следует, что мы совершили ограничение по скорости приема пакетов SIP от каждого IР, которое не заблокировано, уровень составляет тридцать пакетов в секуду.

*****конец цитаты*****

кроме этого нужно обязательно использовать FailToBan.

переменные диалплана Asterisk

${CONTEXT} Текущий контекст.
${EXTEN} Текущий екстеншен.
${EXTEN:x} Текущий екстеншен с удалением первых цифр(где х кол-во удаляемых цифр)
${PRIORITY} Текущий приоритет
${CALLERID} Текущий CallerID (имя и номер)
${CALLERIDNUM} Текущий номер Caller ID
${CALLERIDNAME} Текущее имя Caller ID
${RDNIS} перенаправление DNIS

шаблоны для экстеншенов:

X – любая цифра от 0-9
N – любая цифра от 2-9
[14-6] – цифры 1,4, 5 и 6
. – любые возможные символы.

получить из экстеншена символы:

{EXTEN}:1 - получить символы, начиная со второго (9101) 9 - управляющая цифра - 101 набираемый номер

{EXTEN}:1:5 - получить символы, начиная со второго по 5

формат exten в диалплане Asterisk

Экстеншен — это некоторая последовательность команд связанная с номером, который может быть набран с IP телефона или софтфона.

exten => номер, приоритет, команда(параметры)

команда exten состоит из следующих частей:

номер — номер этой последовательности команд.

приоритет — число или буква n для обозначения следующей по порядку команды (это порядок выполнения строк части диалплана)

команда — команда астериск которую нужно выполнить обрабатывая эту строку команд.

пример одного экстеншена:

exten => 100,1,Wait(5)
exten => 100,2,Answer
exten => 100,3,Playback(demo-congrats)
exten => 100,n,Hangup

Шаблоны в sip.conf Asterisk

Чтобы использовать шаблон кода в sip.conf нужно создать секцию кода шаблона [с именем кода шаблона в квадратных скобках] после скобок поставить восклицательный знак в круглых скобках (!) — это будет обозначение секции шаблона.

Если имя этой секции указать в круглых скобках после номера абонента (экстеншена) то код этой секции шаблона будет добавлен к этой секции или другими словами экстеншену.

Пример работы с шаблоном ниже:

Пример:
[phone_number_template](!)
type=friend
host=dynamic                                           ;возможность цепляться откуда угодно
dtmfmode=rfc2833                                  ;способ передачи сигналов DTMF
nat=no                                                      ;клиент не может быть за NAT
canreinvite=no                                         ;трафик проходит только через сервер
context=MyVOIP-provider                     ;контекст с таким именем должен существовать в dialplan’е (файл extensions.conf)
disallow=all                                             ;сначала запрещаем все кодеки
allow=alaw                                              ;разрешаем те что будем использовать
qualify=yes                                              ;Asterisk будет проверять связь с этим номером раз в 2сек
;(если поставить число то интервал будет задаваться в милисекундах

[внутренний_номер_абонента](phone_number_template)
username=внутренний_номер_абонента                                               ;имя пользователя
secret=внутренний_номер_абонента                                                     ;и пароль
callerid=»Описание абонента» <внутренний_номер_абонента>         ;CallerID — идентификационная ;строка, отображается при звонках от данного пользователя (АОН) [внутренний_номер_абонента](phone_number_template)
username=внутренний_номер_абонента                                                ;имя пользователя
secret=внутренний_номер_абонента                                                      ;и пароль
callerid=»Описание абонента» <внутренний_номер_абонента>         ;CallerID — идентификационная ;строка, отображается при звонках от данного пользователя (АОН)

настройка (написание) строки регистрации в Asterisk

register => user [:secret[:authuser]] @host [:port] [/extension]

Пример:

Зарегистрировать 3216111 у sip провайдера, как номер 1234567 на Asterisk.

register => 3216111:userID:PASSWORD@sipppnet.ru/1234567
user — идентификатор пользователя, используемый для SIP сервера (например, 3216111)

authuser — не обязательное имя пользователя для авторизации на SIP сервере
secret — пароль пользователя
host — имя домена или хоста SIP сервера. Этот SIP сервер должен быть определен в своей секции файла sip.conf, где должны быть заданы его параметры (sipnet.ru).
port — на какой номер порта посылать запросы на регистрацию на сервере host. По умолчанию — 5060
/1234567 — номер екстеншена для приема вызовов в Вашем Asterisk. 1234567 — вставляется в SIP заголовок contact, SIP запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону Вашего Asterisk. Смотри примеры, приведенные ниже. По умолчанию, используется контекстный «s».
Вам необходимо регистрироваться, только если:

Если должна быть возможность позвонить к Вам.
Если одна из сторон имеет динамический IP адрес.
Наиболее используемые CLI команды для проверки:

 

Как OpenOffice Calс удалить лишние символы из телефонного номера?

формула в OpenOffice Calc удалить символы из строки в ячейке
=STRING_FUNCTION(B4;»-«;»»)
из 8-999-999-99-99 сделать 89999999999

=REPLACE(REPLACE(REPLACE(REPLACE(B3;2;1;»»);5;1;»»);8;1;»»);10;1;»»)