Публікації

Як звільнити трохи місця на сервері, що збирає .NET проекти

На сервері, що збирає проекти на платформі .NET почало закінчуватися місце. Переглянувши проекти, побудова яких там виконується, дійшов висновку, що значний об'єм займають NUGET-пакети проектів. Швиденько накидав скрипт, що для кожного пакета в проекті:

Як перенести GitLab з одного сервера на інший

Останні 3 роки ми використовуємо GitLab для зберігання вихідних кодів наших проектів та в якості простої системи трекінга задач і помилок для деяких з них. Особливих проблем з цією системою ніколи не було, та сьогодні знадобилось перенести її на інший хостинг.

Українська мова

Вирішив написати нового поста до свого блогу, адже вже витримав достатню паузу після попереднього. Пост буде про програмування. Але, чомусь, мені захотілося зробити це українською мовою. І взагалі тепер буду намагатися писати українською.

Задача для маленьких

Зображення
Дочка принесла из школы задачу: Попросила помочь решить. Под катом мое решение:

Adobe Lightroom, дубликаты фотографий

Уже второй раз (после переустановки Windows) искал плагин для Lightroom, который помогает найти дубликаты фотографий в каталоге. И второй раз нашел замечательный инструмент:  Teekesselchen: The Duplicate Finder for Adobe Lightroom . Возможно есть платные инструменты, которые умею больше чем этот плагин, но если вы ищете бесплатный, который умеет все что нужно - смело ставьте этот.

Зачем они это делают?

Зображення
В греческом городке Паралия (пригород Катерини) увидел странное. Некоторые автомобили стоят с прикрытыми картоном покрышками. Кто знает, зачем это?

Git - дешево и сердито

Давно планировал перейти на Git, вместо SVN. Основные мотивы такие: Я работаю с ноутбука и часто не в онлайне. Бывает так, что надо откатить сделанные изменения, а доступа к серверу SVN нет. С Git-ом проще - у него вся история изменений есть в локальном хранилище. Да, места занимает больше, но кто эти гигабайты сегодня считает? Visual Studio Express содержит встроенный клиент для Git-а, а для SVN - нет. И в Express версию нельзя поставить плагин. Сначала пытался поставить его под Windows. Не осилил. Пробовал несколько дистрибутивов. У некоторых слишком много внешних зависимостей, у других какая-то мутная система настройки прав доступа... Решил использовать вариант под Linux. Так как годной машинки под рукой не было - решил арендовать. Так как у меня уже есть одна машина с CentOS в DigitalOcean - решил арендовать машинку там же. Думал взять сервер с Ubuntu 14.04 и поднять на нем GitLab . Оказалось - все гораздо проще: у DigitalOcean можно арендовать готовую конфигурацию...

Чтение больших JSON-файлов

Все мы привыкли читать JSON как-то так (с использованием Json.NET ): Product deserializedProduct = JsonConvert.DeserializeObject (json); И это отлично работает, пока размер сообщения, которое мы читаем сравнительно небольшой. Вчера мне понадобилось прочить JSON размером 1.7 Гб. Все попытки десериализации сохраненного в файле массива ожидаемо закончились OutOfMemoryException . Без лишних разговоров, публикую рецепт: В каждой итерации цикла в переменной obj мы будем получать следующий элемент массива. Память такой подход не использует вообще :)

Сервис "Формы и бланки" достиг показателя "50000 документов в месяц"

В январе сервис Формы и бланки впервые достиг столь внушительных показателей: 56 тысяч уникальных пользователей в месяц. 55 тысяч сгенерированных документов (почти совпадает с количеством уникальных пользователей) 190 тысяч просмотров страниц.

Twitter Bootstrap

Как-то раньше я незаслуженно обходил стороной прекрасную библиотеку Bootstrap от Twitter: Продуманный набор стилей; Подобранные шрифты, цвета, иконки; Набор достаточно удачных jquery-плагинов (модальные попапы, карусель, табы, меню т т.д.) Поддержка тем; Упрощение многих рутинных задач; Еще много чего... Короче, в проекте где  надо построить достаточно симпатичный сайт, но нет дизайнера - самое то! Для всяких админок и прочих непубличных частей сайта - очень удобная штука.

OAuth-аутентификация через ВКонтакте

В одном из проектов появилась задача обеспечить вход пользователей на сайт через социальные сети. Начало было положено с помощью модуля DotNetOpenAuth extensions for ASP.NET (WebPages). В результате появилась возможность использовать такие сети: Facebook Google+ Live.com LinkedId Twitter На борту имелся клиент еще и для Yahoo, но в связи с его малой популярностью в Рунете решили его не подключать. А вот для популярных в Рунете сетей ВКонтакте и Одноклассники встроенной поддержки нет. Решил сделать это самостоятельно, тем более что, на первый взгляд, задача казалась не сложной.

Но есть нюанс

На днях ездил в районную администрацию зарегистрировать изменение видов деятельности. Рядовая операция в любой развитой стране, но у нас занимает почти целый день. Чтобы гарантированно пройти до обеда, надо прийти в 6:00 утра и записаться в список. Потом прийти в 9:00 и взять в терминале талончик, в котором будет указано какой Вы в очереди к регистратору (список - это, фактически, очередь к терминалу). Но речь не об этом... В 9:00 открылись двери и около 200 человек выстроились в очереди к терминалу. Терминал находится внутри помещения, где помещается только 25-30 человек. Остальные ждут на улице, где температура около -15С и дует противный ветер. Когда стоишь на улице, но недалеко от дверей - из открытых дверей идет теплый воздух и переносить холод немного проще. Но одновременно тянет холодным воздухом по ногам тех, кто уже в помещении. Интересно наблюдать, как те, кто еще 10 минут назад стояли в дверях и не давал их закрыть (огрызаясь на просьбы закрыть, звучащие из помещения), на...

Type is not resolved for member 'System.Data.Entity.Migrations.Design.ToolingFacade+GetPendingMigrationsRunner, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

Столкнулся с тем, что не могу добавить новую миграция в существующий проект. Получаю ошибку: Type is not resolved for member 'System.Data.Entity.Migrations.Design.ToolingFacade+GetPendingMigrationsRunner,EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Оказалось причина в том, что основная сборка проекта была собрана для .NET Framework 4.5, тогда как сборка с миграциями - под 4.0. Это приводит к использованию разных версий EntityFramework: в .NET 4.5 используется версия EF 5.0,  а в 4.0? по-прежнему, загружается 4.4. Если посмотреть на содержимое пакета EntityFramework, установленного NuGet, то все становится понятно. В папке lib есть 2 папки: net40 и net45 с разными версиями EF. После изменения настроек проектов (везде .NET 4.5), новая миграция добавлена без проблем.

Покращення

Зателефонували з валютного відділу банку з хорошими новинами - прийшов платіж від американського партнера. Але є нюанси: 50% валюти одразу продають і зараховують на гривневий рахунок Відтепер від дати акта до дати оплати повинно проходити не більше 90 діб (раніше було 180). Отаке.

Мобильные операторы раскрывают приватную информацию?

Зображення
Только сегодня узнал, что такое HLR-запросы: HLR запрос (Home Location Register) – услуга по проверке статуса мобильных номеров. HLR запрос позволяет определить статус номера телефона клиента: активен или не обслуживается, находится абонент в роуминге или в домашней сети, MCC/MNC код мобильного оператора Используйте HLR-запрос для определения неактивных номеров и чистки баз перед отправкой  SMS-рассылки , это позволит избежать дополнительных затрат. Определения роуминга перед отправкой клиенту MMS-Сообщения. Сервис конфиденциален и не беспокоит клиента, так как HLR-запрос обращается к оборудованию Оператора связи, абонент при этом не получает никакого сообщения. Информация с сайта  http://www.devinotele.com/ Подумалось мне, что такие подробности могут многое сказать о том, где находится человек тому, кто знает его привычки или планы. Интересно, можно ли запретить выдачу такой информации для своего телефона?

Ваш сайт не работает в Опере? Используйте неминифицированные библиотеки

Один из заказчиков жалуется, что в браузере Opera, на сайте пропадает вся динамика. Т.е. - не работает JavaScript. Решил я с этим делом разобраться: Первым делом скачал и установил Оперу. Проверил на боевом сервере - да, ошибка воспроизводится. Проверил на тестовой версии сайта на своем компьютере - тоже воспроизводится. Хорошо! Привычно запустил Fiddler, чтобы знать что именно получает браузер от сервера. Первая неприятность - Fiddler не перехватывает запросы от Оперы. Ок, попробую обойтись без него. Вижу что в Опере, как во многих других браузерах, есть достаточно мощный встроенный отладчик. Запустил его и вижу, что на вкладке Errors - целых 119 ошибок. Ага, все не так страшно - 116 из них это упоминания в стилях свойств, которые Опера не поддерживает. Но 3 ошибки относятся к JavaScript. Беглый взгляд на них все объясняет: почему-то не смогла инициализироваться библиотека jQuery . Причина в этом: Syntax error at line 2 while loading: expected ')', got keyword 'in...

Пробное подключение к оператору ВОЛЯ

Зображення
Несколько недель подряд, практически каждый день (если верить АОН-у), мне на домашний телефон названивал некий молодой человек. Когда он наконец-то дозвонился, то предложил мне попробовать бесплатно Интернет от Воли. 3 месяца - абсолютно бесплатно. Так как я давно хочу поменять на что-то ОГО+ от Укртелекома, то согласился попробовать. Сегодня первый день и уже интересные сюрпризы! Вместо заявленных 20 Мб/сек, сразу же после подключения имеем ровно в 2 раза меньше: Монтажник, который выполнял подключение сказал: "Это нормально, потом станет лучше." Ок. Верю и иду на работу. Вечером (в час пик) проверяю еще раз: Круто? Может Укртелеком не так уж плох? Там у меня было заявлено 8 Мб и их я получал все время независимо от времени суток. Дальше - еще интереснее: Посмотрев на последний тест, я решил поискать альтернативных провайдеров, которые обслуживают мой дом. Вспомнил рекламу "КОЛО.ТВ". Пытаюсь зайти на их сайт и вижу такую картину: Думаю: "О...

Настройка FTP сервера

Хоть я и не профессиональный администратор, часто приходится выполнять эту роль. Недавно понадобилось настроить FTP на сервере заказчика. Скачал пару документов в стиле "howto", посмотрел несколько роликов на YouTube и сделал. У меня все заработало сразу. Но у партнеров никак не получалось войти на сервер. Оказалось, что все кто писал те howto и снимали ролики, так же как и я - ничего не знали о пассивном режиме! И настраивали FTP Server для работы в активном режиме. А это, между прочим, подразумевает что создание канала данных между клиентом и сервером инициируется сервером. То есть, тут они меняются ролями - клиент слушает порт, а сервер на него подключается. И понятно, что если клиент сидит за Firewall-ом то ничего у сервера не получится (Тут оказывается - тоже есть варианты ибо умный клиент может "открыть в своем файрволе временную дырку"). Вывод: настраивая сервер FTP - настраивайте его для работы в пассивном режиме. Хорошая статья тут:  http://learn.iis.ne...

Что брать в горы?

Каждый раз, когда собираюсь кататься на сноуборде, готовлю какие-то списки, чтобы ничего не забыть. Решил систематизировать: Снаряжение Доска Ботинки Крепления Круги и болты для монтажа креплений Рации + зарядные устройства Защита Бронетрусы Шлем Маска (Очки) Наколенники Защита на запястья Боевая одежда Термобелье Штаны Куртка (едем в ней) Шапка (едем в ней) Флисовая кофта (2 шт, в одной едем) Обычная одежда Обычные штаны (в них едем) Футболки (2 шт + 1 на каждых 2-3 дня пребывания на курорте, если не хочется там стирать) Носки (1 пара на каждый день) Трусы (расчет аналогичный) Плавки/Шорты для сауны Тапочки для сауны и поезда Лекарства Таблетки от головной боли (можно универсальные обезболивающие, но помощней! Мощное жаропонижающее Смекта, активированный уголь Мазь "Траумель" или аналог Документы Паспорт Билет Гигиена Зубная щетка и паста Крем от загара Остальное Мобильный телефон + зарядка Карты играл...

Истинный ценитель машин

Зображення