Pull to refresh
4
0
RouR @RouR

Пользователь

Send message
Сталкивался с похожей проблемой, но Tor оказался слишком медленным — нужно было скрейпить миллионы запросов.

Возможная альтернатива Тору — покупка VPN (есть позволяющие до 8 одновременных коннектов) и запуск массива Docker контейнеров, подключающихся по OpenVPN и заворачивающих трафик в SOCKS.

Также, в большинстве случаев headless browser может быть избыточен, сессии в библиотеке requests на питоне (уверен, есть похожая библиотека для JS) + подмена User-Agent и Referrer почти всегда решают задачу. Конечно, часто на настройку этого требуется больше времени, однако и производительность существенно выше.
Ещё в Союзе с такими же проблемами сталкивались. На что кинуть основные силы? На производство товаров группы «А» или группы «Б» или в каком соотношении запланировать их развитие? Развивать группу «А» — это долговременные инвестиции. Задел того, что в будущем будет хорошо. Но не в ближайшем будущем. Развивать группу «Б» — удовлетворять потребности населения здесь и сейчас. Но чрезмерные инвестиции в «ширпотреб» приведут к замедленному стратегическому развитию…

В этом плане, (про экономику СССР в разные годы) советую послушать лекции А. Сафронова (есть на ютубе и в ВК). Опыт предков из прошлого столетия в вопросах экономики надо изучать и улучшать…
Единственное в чем виноват разработчик приложения, это в том, что не сделал certificate pinning. Все остальное это проблемы серверной части.
Навык проходить собеседование — это отдельный скил. Походив по собеседованиям в Европе и России вот что есть сказать:
Когда начинаешь разбираться с реальным кейсом человека, который получил хороший офер то будет примерно так:
1. Непотия, нетворкинг — знает нужных людей. Посоветовали знакомые. Заинтересовал лицо принимающее решение. Типа: «О, я с ним работал, хороший челик»
2. Софтскил + хитрожопость — умеет залечивать. Собеседование — это покер.
3. Персональный бренд — много времени тратит на то, чтобы создать образ крутого гуру. Заботится о своих профилях, фапает на карму, отвечает на вопросы.
4. Удача и конверсия. Много собеседований увеличивают шансы.

При всём этом надо уметь:
— решать задачки на алгоритмы. их сейчас любят все гугл, фейсбук и т.п. тренируйтесь на leetcode. Вам не обязательно уметь думать, достаточно нарешать задачи разных типов, чтобы потом распознать тип алгоритма и быстро его написать. Бесполезный скил, но для собеседования необходим.
— отвечать на вопросы, которые задаёт HR, даже если они тупые. Посмотрите видео на ютубе про это, HR смотрят те же видео, потому ожидают от вас тех же ответов.
— думать в стрессовом состоянии. Для многих интровертов — это основная причина, почему они такие умные и так мало получают. Если вы не можете думать, старайтесь готовить шаблоны ответов и не бойтесь переводить разговор на темы, по которым у вас есть заготовка.
— Хороший английский. Даже если он у вас плохой, его можно «полернуть» с помощью Filler Words вроде you know, stuff like this, well, let me think, its kind of… Это реально помогает звучать на Upper Advanced. Можно попробовать быть эмоциональным, это позволит скрыть косяки в грамматике. Но всё равно soft skills важнее hard skills.

Мифы:
— будь честным. — булшит. Честно сказать: «Да я не знаю, кем я буду через 5 лет, к вам иду чисто за релокацией, и на ваши ценности мне класть» — это самоубийство. надо уметь отвечать на вопрос: «какую книгу вы прочитали?», даже если вы читаете только худлит и статьи на хабре. Надо сразу быть готовым продавать себя, как если бы вы продаёте подержанный жигуль. «Я проактвиный, самообучающийся, энергичный мотивированный». При этом подготовить заранее примеры проактивности, и самообучения. Даже если вы не такой, то хорошо подумав, можно найти примеры, когда вы были таким.
— Девушке программисту легче найти работу в за бугром. Типа — девёрсити, да ещё и умная должны с руками оторвать. Оказалось, что нет.
Киллерфича, о которой я давно мечтаю, это возможность синхронизировать статус книги между книгочиталкой, телефоном и PC.

Чтобы я мог почитать в дороге со смарта или читалки, а прийдя домой продолжить ту же книгу с того же места с PC одной-двумя кнопками.

Устарел не устарел, но результаты перехода на webp впечатляют. Вот буквально вчера допилили сервер который на лету трансформирует jpg в webp, сегодня грубую оценку проводили на стенде с копией прода. Минимум!!! -25%, а в среднем под 30..35% уменьшение трафика, плюс оптимизация хром-движка под декодинг webp впечатляет

Как на счет варианта пойти angular путем и использовать Pipes.
Например, код конкатенации имени и фамилии вынести в следующий pipe.

@Pipe({ name: 'fullName' })
export class FullName implements PipeTransform {
  transform(value: any): string {
    return value.firstName, value.lastName].filter(el => !!el).join(' ');
  }
}


Таким образом решается проблема перегруженности шаблона логикой, повышается читаемость, плюс решается вопрос переиспользования,
ведь pipes можно вынести в SharedModule и использовать по всему приложению.
{{ user | fullName}}



Плюс бросился в глаза следующий фрагмент кода:
<img [src]="userService.getUserAvatar(user.id)">


Вызов функций в шаблонах пагубно сказывается на производительности angular-приложений.
Рекоменую, использовать также pipe + ChangeDetectionStrategy.onPush
Хорошее 5 минутное видео как раз по этому поводу с последней ngconf конференции:
www.youtube.com/watch?v=I6ZvpdRM1eQ

Не увидел важной для себя детали- ссылки на проверку для мобильных приложений.
google конечно поможет, но по готовой ссылке было бы удобнее
Эта похоже:
https://search.google.com/test/mobile-friendly

Поисковых роботов нужно вайтлистить так: support.google.com/webmasters/answer/80553?hl=ru
Нельзя вайтлистить ни по юзерагенту ни по адресу. Юзерагент- подделывается, адреса у ботов меняются, + с гуглосети могут ходить не только поисковые боты. Этот же способ справедлив для яндекса.

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

Для ленивых так же существует Mozilla SSL Configuration Generator, который позволяет выбрать версию веб-сервера и OpenSSL, и в зависимости от их версий подбирает оптимальные параметры.

Всем привет. Я собственно ответственный за техническую сертификацию в FIDO. Буду рад ответить на любые вопросы


Так же хочу заметить что у меня есть слайды по WebAuthn http://slides.com/herrjemand/webauthn-isig


Так же у нас есть воршоп, вот слайды https://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/


И собственно демо к воркшопу
https://github.com/fido-alliance/webauthn-demo

Я правильно понимаю, что Ваш маппер НЕ поддерживает:


  • маппинг вложенных свойств
  • маппинг коллекций
  • маппинг на существующий объект (обновление)
  • генерацию проекций для IQueryable<T>

И при этом (судя по Вашим бенчмаркам) всего на 10% бытрее того же Mapster, который все это умеет?


Еще было бы неплохо сравнить с EmitMapper.


А для ускорения маппинга вместо Expression.Compile можно использовать FastExpressionCompiler.


Суть проекта в компиляции expression tree напрямую, без создания анонимной assembly для запуска в песочнице (как это делает Expression.Compile).

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


Так вот. Скроллинг для списков >= 100 элементов неприятно тормозил. Тормоза были двух типов:


  1. Небольшая задержка при начале скроллинга
  2. Сам скроллинг работал медленнее в сравнении с нативным

Решения:


  1. Оказалось что событие onTouchStart (да и вообще любое событие) вызывает перерисовку элементов списка, выполняемого директивой ngFor. Для того чтоб этой перерисовки не было можно поместить код с ngFor в отдельный компонент, а к компоненту применить changeDetection: ChangeDetectionStrategy.OnPush. Как показала практика, changeDetection: ChangeDetectionStrategy.OnPush — довольно неплохое решение для многих проблем производительности в Angular 2. Вот тут подробнее описано как его готовить и с чем его едят. Там есть нью-ансы, рекомендую прочитать перед тем как юзать его на всех компонентах.
  2. WKWebView — ответ на многие вопросы производительности в iOS устройствах. Подробнее тут: http://blog.ionic.io/cordova-ios-performance-improvements-drop-in-speed-with-wkwebview/. Кстати он решает не только вопросы производительности но и проблемы использования современных CSS3 свистелок. НО! тут есть подводный камень, а именно CORS. Если ваш сервер не умеет отдавать access-control-allow-origin хедер, то о замечательном WKWebView можно забыть.

P.S. А автору спасибо за статью, всё по делу.

Подскажите удобный способ читать статьи на десктопе, планшете и смартфоне, в том числе оффлайн.
Синхронизация вкладок Chrome не очень подходит, так как бывает открыто одновременно до 30 вкладок, да и вообще как это это неправильно, хранить список того что хочется прочитать потом во вкладках (хотя и приходится).

Попробовал Pocket, но есть много замечаний:
1. Режим сохранения страницы «только статья» иногда не загружал картинки для просмотра оффлайн. Ну и не загружает комментарии (хабр, discus), что самое ценное.
2. Режим сохранения «веб страница целиком» всё сохраняет, но увеличения масштаба при просмотре не форматирует текст по новой, как это делают браузеры.
3. В контекстном меню браузеров есть пункт «добавить в pocket», но нет пункта «удалить из pocket», если статья ранее была туда добавлена. Вообще не хватает какой-либо индикации кнопки на панели или даже какого-то знака во вкладке что эта страница сохранена в pocket, из-за этого путаница. Тот же gmail умет ведь в названии вкладки выводить количество непрочитанных писем, вот и Pocket мог бы хоть одной буквой помечать что статья ранее была сохранена.
4. Тем не менее хотелось бы доступ из Pocket к открытым вкладках Chrome, так как бывает ситуация что статья открыта на десктопе, но не добавлена в Pocket, и нужно открыть её со смартфона, но включать синхронизацию вкладок по описанным выше причинам не хочется.
5. Не хватает индикации хотя бы серым шрифтом что статья в Pocket уже ранее открывалась, молчу уже про детектирование прочтения, если доскроленно до самого низа.

Tahoe-LAFS. Распределенное избыточное шифрованное хранилище файлов, где storage-ноды хранят кусочки файлов, не зная их содержимое. Клиент сам шифрует файлы перед загрузкой и расшифровывает после скачивания.

Tahoe-LAFS Architecture

Уже существует облачный провайдер, предоставляющий серверы LAFS: https://leastauthority.com/

Подключайтесь к общему пулу хранилища в I2P: http://jf2g5hus6gp2jfgk7zgc2cxtzeedxbstr3ju374amtoaq6p2ax6a.b32.i2p
Пару лет назад я участвовал в разработке ecm7migrator (форк Migrator.NET, постепенно полностью переписанный). Он имеет простой API, не завязан на ORM и покрыт тестами. Использовал мигратор в нескольких проектах с NHibernate и очень доволен. В принципе, остальные, кому рекомендовал — тоже довольны.

Сейчас делаю большой проект на .NET Core. Там использую EF, т.к. особого выбора нет. Пробовал его миграции, но не подошли, т.к. неудобно писать руками + они не умеют вести параллельно несколько «линий» версионирования (в моем проекте нужно, чтобы плагины могли создавать себе нужную структуру БД и для каждого плагина отдельно велся учет версий).

В результате портировал на .NET Core ядро ecm7migrator и модуль, поддерживающий PostgreSQL. Всё завелось легко и тесты прошли без проблем.

Посмотрите его, возможно, вам покажется удобнее остального. Я готов оказать помочь в использовании и в портировании на .NET Core модулей для поддержки других СУБД.

Application Cache является устаревшей технологией и, скорее всего, будет со временем удалена поддержка сего в браузерах. Service Worker является ее заменой. localStorage для чего-то более-менее простого, для более сложных вещей — IndexedDB.

Как я понимаю, у вас Repository.All возвращает DbQuery. И данные вы, фактически, вытаскиваете на View в for. И получается, у вас всё завязано на глобальный (per Request) DbContext, который, кстати, ещё и не thread safe…
Я, честно, говоря, думал что глобальный DbContext уже вышел из моды. Мне больше такая штука нравится Аmbient DbContext
Вот бы такой же пример, но не с select, а с update, и чтобы были связанные сущности, транзакции, как в реальной жизни.

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

Собственно, список:

Биржи:
www.toptal.com
www.scalablepath.com
crew.co/how-it-works
gun.io
www.guru.com
mycrowd.com
www.freelancer.com/dashboard
authenticjobs.com
jobspresso.co
remoteok.io

Не биржи, но тоже инструменты, с помощью которых можно найти дистанционную работу:
angel.co
github.com
hubstaff.com/jobs

Исключительно для дизайнеров:
99designs.com
www.crowdspring.com

Что-то непонятное (не изучал):
www.mturk.com
microworkers.com
hourlynerd.com
www.cloudfactory.com
coworks.com
jobbatical.com
remote.co
jobs.remotive.io
weworkremotely.com
hired.com
www.airpair.com
www.topcoder.com
hackerlist.net
x-team.com
www.sofmen.com

Information

Rating
Does not participate
Location
Россия
Registered
Activity