Pull to refresh
8
0
Усманов Ринат Ришатович @RinatUsmanov

Golang

Send message
Приветствую сообщество. Хакатон весело и интересно. Но к сожалению крыша провела хакатан только внутри своей команды.
Провели бы нормальный хакатон. В последнее время таких соревнований в Алматы мало. И в основном делают их гос или рядом с гос компании. И на них обычно задачи ставятся оторванные от реальности.

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

Просьба.

Заранее оповестить народ. Я бы с удовольствием сходил бы на Ваш хакатон и как участник и как зритель.

p.s.
Спасибо за Ваш продукт. Мне лично он помог в свое время найти хороший участок. И я от всей души желаю Вам и бизнесу который Вы представляете успехов в начинаниях и продолжениях!!!
реклама раза три меня на интересующие статьи выводила и с рег ру познакомила. есть от нее польза и порталу и пользователям. я думаю что на Хабре не много рекламы. а учитывая ее специализированость она часто полезна. лично мое мнение. а так хорошая фишка )))
Расслабьтесь.

У Go есть преимущества которые пока мало кто может оспорить:
1. Простота языка. Легко понять как свой код написанный год назад, так и код другого программиста.Т.е. низкий порог входа.Соответственно легче поддерживать проекты. Соответственно низкая стоимость поддержки. (Значит бизнес будет его использовать и далее)
2. Синтетические тесты это лишь меряние «письками». даже если Go уступает по этим тестам другим языкам, это не значит что он хуже или наоборот лучше. Это лишь означает что где то в каких то задачах он уступает. Никто не может сказать куда придет 2 версия. Все может кардинально поменяться в сторону производительности в нужном синтетическом тесте ))).
Давно пора было что нибудь от ведущих компаний сделать. Респект!
Спасибо за Катю! Неожиданная развязка с М… Захватило…
Спасибо за комментарий Andre_Sk.

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

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

Да и то что я сделал тоже не может.

Мой код просто объединяет все декларации и из них генерирует сводные отчеты. В 1С храниться информация по текущему состоянию компании из всей имеющейся информации на данный момент времени.В моей системе по текущему состоянию сданной отчетности.
в Казахстане аналогичная ситуация. У гос. учреждений принято работать на Java и xml.
Я отказался работать с getElementById() в тот момент когда понял что он выдергивает только одно значение. В теле страницы могут быть несколько элементов с одним id, при парсинге товарных агрегаторов я раз и навсегда отказался от getElementById(), и перешел на querySelector() и querySelectorAll()
Просто оставлю это здесь. Но, в конце концов, это ваш продукт, поэтому вам принимать окончательное решение в плане выбора способа, мы лишь советуем.


Насчет скорости доступа я согласен. Быстрее обращение к id. Но дело не в скорости, а в том я для себя решил работать в js c css селекторами. Возможно в каком то другом проекте и потребуется использовать именно getElementById, но пока querySelector.

Тесты






Плюс по скринам видно, что миллион обращение к id и к селектору примерно выполняются за 100 и 300 секунд. Для меня не критично в данном проекте ускоряться за счет id.

Вот здесь Вы не правы. Я создал массив папок из 200 элементов. Потом повесил на каждый элемент по обработчику события. В итоге Страница с действующим классом, начала подвисать при event'ах, а у меня очень даже нормальный ноутбук. И учитывая, что на странице может быть не один экземпляр класса мне пришлось переписать логику так чтобы event'ов было не так много.

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


Вначале я начал писать этот класс и вешать непосредственно на элементы «p» все события. К сожалению первоначальный код не сохранился.

И еще раз спасибо за критику.
YuryZakharov, спасибо за комментарий.

Вот это
$obj->Русские_буквы

— зло.
Можете объяснить, зачем Вам кириллица в именах?
Вот так, что без этого совсем никуда…
Если это про «национальную гордость великороссов», то представьте, что вам достался на поддержку китайский проект, а они гордыми оказались…


Вот смотрите, допустим вы парсите какой нибудь сайт, в его коде элементы различаются по dataset свойствам (к примеру data-auth=«Тиничев Валерий»). Вот именно при обработке таких блоков и возникают не англоязычные имена свойств.
Или другой пример.
Вы обрабатываете текст на поиск повторяющихся значений. Намного проще давать key именно часть текста не зависимо от языка. Это лишь при обработке данных.

«svoistvo»
вообще промолчу… Чем «property» не угодило? Английского не знаете?
Javascript изучаете, изучите азы английского заодно. Не трудно и пригодится много где еще.


property — всем угодило. Но для быстроты и наглядности использовал именно русское слово на латинице.

Общее впечатление от Вашего подхода — нет структуры, каша какая-то.

p.p.p.s. Основная задача топика — написать быстро расширение без использования фреймворков. Быстро написать в течении дня, максимум двух. И быстро запустить.

Уж простите за такую критику.

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

Но закон не писан для многих.

Да и в принципе это не создает никаких проблем если обращаться к id посредством querySelector().
Да это все влияние Java.

На досуге начал изучать, и оттуда потянуло.
Спасибо, перечитал несколько раз заголовок. Понял что к чему прилагается )))
Спасибо большое за комментарий.

— не стоит вызывать getBoundingClientRect() для одного и того же элемента подряд строка за строкой — это добавляет нагрузку, лучше вынести в отдельную переменную первый запуск, а затем уже обращаться к свойствам;
В классе я так и действовал, нашел лишь одно место где обращался дважды к getBoundingClientRect().

— обращаться к свойствам объекта можно не только через квадратные скобки, но и через точку;
Спасибо, что напомнили. Первый мой язык для веба был php. Он показывал ошибку при обращении в stdClass() к элементу имеющему имя на кириллице.Это привело к тому, что я привык в php обращаться к свойствам через скобки. И сказалось на мой стиль программирования в JS.

Как сейчас состоит дело со свойствами на кирилице







— document.getElementById('title') сработает быстрее, чем document.querySelector("#title") (так для всех обращений по id) (про window.title молчу, т.к. лучше про него забыть));
Я отказался работать с getElementById() в тот момент когда понял что он выдергивает только одно значение. В теле страницы могут быть несколько элементов с одним id, при парсинге товарных агрегаторов я раз и навсегда отказался от getElementById(), и перешел на querySelector() и querySelectorAll()

— для элементов, которые не меняются и к которым часто происходит обращение, лучше завести отдельный объект типа кэша, чтобы каждый раз через селекторы не обращаться (или в вашем случае можно «забиндить» слушателей событий на this, чтобы обращаться к тем же самым созданным div'ам);
Я не совсем понял о чем тут речь.

— стили лучше менять с помощью классов — браузер в таком случае применяет сразу весь набор новых стилей, а не строчка за строчкой, каждый раз перерисовывая элемент;
Так я итак использую классы. Не везде конечно, но там где мне нужно точно переопределить css к элементу. Так как обращение в ccs к id(#) важнее чем обращение к классу элемента(.)

— код лучше разнести по разным файлам, в зависимости от назначения;
— стили так же лучше вынести туда, где они должны быть, то есть в css-файлы;
— честно говоря, не понимаю, для чего вам end.js, лучше его удалить, а так же убрать из манифеста возможность редактировать страницу любого сайта — это вызовет больше доверия у потенциальных пользователей;
— структура рода [«Мои записки»,0] ведет к ненужной жесткости кода — вам потом понадобиться добавить еще какое-то свойство, придется расширять массив и менять функцию-обработчик, я бы советовал заменить на объект;
— очень много дублирования кода;
— вы сравниваете e.keyCode и e.which на одно и то же значение, используйте любой из них (лучше keyCode) и пользуйтесь своим switch по-нормальному на здоровье (если вдруг так уж случилось, что они у вас работают по-разному, то можно воспользоваться конструкциями вида key=e.keyCode||e.which);
p.p.p.s. Основная задача топика — написать быстро расширение без использования фреймворков. Смысл быстро написать и запустить

— если появление дополнительных ненужных отступов заставляет вас писать в строку элементы html, то можно убрать шрифт для всей страницы (font-size:0px;), а включить его там, где он непосредственно нужен, чтобы красивее отобразить html-код;
За этот трюк большое спасибо!!!

— на каждое нажатие клавиши вы запускаете перебор по всем div'ам — это ужасно — если вы хотите найти следующий (предыдущий) элемент за родителем абзаца, который находится в фокусе, пользуйтесь nextElementSibling /previousElementSibling, с проверкой на существование;
nextElementSibling /previousElementSibling взял на заметку. Просто забыл про существование это навигации.

— вместо одного универсального слушателя лучше вешать на каждый элемент свой и отдельно повесить на нажатие по контекстному меню на скрытие;
Вот здесь Вы не правы. Я создал массив папок из 200 элементов. Потом повесил на каждый элемент по обработчику события. В итоге Страница с действующим классом, начала подвисать при event'ах, а у меня очень даже нормальный ноутбук. И учитывая, что на странице может быть не один экземпляр класса мне пришлось переписать логику так чтобы event'ов было не так много.

и еще раз большое спасибо за такой развернутый комментарий.
По поводу интеграции с Астериском или текущей телефонией она имеется только на словах и не имеет тех поддержки.
По поводу завышенных тарифов.
Многие ИП имеют возможность звонить внутри РК на все стационарные телефоны абсолютно бесплатно. Многие операторы предлагают тарифы при предоплате допустим в 400 долларов, звонить внутри РК по нулевой ставке уже крупным компаниям.
Допустим направление Казахстан Китай, Казахстан Российская Федерация, операторы дают по цене 0,01 доллара. А это основные торговые партнеры РК(95% торгового оборота).
Классно. Наконец то из Битрикса 24 хоть кто то но отреагирует. А то на все попытки поднять вопросы по телефонии у Ваших хелп десков привычка отписываться ссылками. Какое то у Вас несерьезное отношение к тех поддержке клиентов в этом направлении.

У компании где я работаю(интегратор одно из направлений телефония), несколько клиентов которые по сути дела отказались от Битрикса24 только по той причине что там не предусмотрена интеграция по открытым стандартам с телефонией. Причем это энтерпрайз клиенты. Каждый из которых имеет штат от 150 офисных сотрудников. Многие из них ушли к «западным» конкурентам. И это за последние полгода. Единственная проблема по которой многие отказываются от Ваших продуктов это полное с Вашей стороны ПРЕНЕБРЕЖЕНИЕ к существующей инфраструктуре компаний. Так же имеется факт что аренда телефонии происходит каким то загадочным и не прозрачным(вполне возможно незаконным) способом отталкивает крупных клиентов от Вашей телефонии. Многие клиенты не хотят да и не будут менять маркетинговую политику связаную с привлечением клиентов только ради интеграции Ваших решений.

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

В связи с Выше сказанным у меня имеется вопрос:
Когда Ваша компания услышит своих клиентов и перестанет предлагать единственную возможность интеграции с телефонией через свои карманные компании или партнеров тарифы которых завышены в среднем в 2-10 раз чем по рынку?

(по поводу незаконного способа предоставления городских телефонных номеров возможно я не прав, но в РФ и Казахстане, для получения городского номера обязательно должны предоставляться документы удостоверяющие личность физ лица или уставные документы компании, это связано с телефонными правонарушениями и уголовной ответственностью владельца телефонного номера. Возможно я здесь не прав, но имея 15 летний стаж по интеграции телефонии, по моему мнению это актуальная информация)
Нормально все. Хабр уже давно стал рассказывать просто о сложном. Пишите больше особенно про фишки. Мало ли что гуру не хотят делиться и смотрят на всех с высока. Добавил в избранное…
PaulWeb Спасибо за Ваш комментарий.

По поводу асинхронности чтения, в ПАМИ есть много проблем так как он заточен под абстрактный малоинтенсивный продакшн. В связи с этим и ответы от астериска приходят в совершенно неудобном формате. В классе режим чтения данных из сокета представлен асинхронно, то есть чтение из сокета может происходить не по мере поступления информации а именно тогда когда требует приложение.
В следующей части я собираюсь раскрыть потенциал простого Originate-а, с возможностью чтения данных уже из готового массива и с историей по ActionID. Но пока я соберусь походу меня заминусуют =) Видать статья не понравилась сообществу, хотя опрос показывает что тема актуальна, да и количество человек которые добавили статью в избранное тоже заставляет думать что здесь что-то не то.
На самом деле собрать всю информацию в готовый и классифицированный массив что не так уж и сложно, сложнее бороться с памятью которую жрут демоны. Мы у себя в продуктах нашли решение. Оно связано с применением массивов как динамических объектов, которое также нужно показывать отдельной статьей. Потому что готовый класс ни приведет разработчика к написанию более-менее сложного приложения, пока он не поймет механику класса,.
Повторюсь, даже в этом классе реализовано «асинхронное» чтение из сокета. Которое не дает зависнуть приложению в случае отсутствия данных на стороне сокета, а просто выбрасывает пустой массив.
1

Information

Rating
Does not participate
Location
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Date of birth
Registered
Activity