среда, 3 января 2018 г.

Install golang

GOPATH should be set to a newly created empty directory. This is the go "workspace", where it downloads packages, et cetera. I use ~/.go.
For example:
mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

среда, 26 апреля 2017 г.

Мой GIT.


# настроить апстрим 
git remote add upstream git@...:.../....git

Выполнить после Pull Request

# переход на ветку master 
 git checkout master 

# список веток
git branch

# удалить ветку локально
git branch -D branchname.

# удалить ветку удаленно
git push origin :branchname.

Обновление Форка.

# скачать обновления основного репозитория 
git fetch upstream 

 # обновить форк 
git checkout master 

 # поместить в форк обновления основного репозитория 
git merge upstream/master 

 # обновить субмодули 
git submodule update 

 # поместить на сервер 
git push


Новая задача.

#создать новую ветку
git checkout -b taskname


Накатить изменения master в новую задачу.

#перейти на ветку
git checkout  taskname

#накатить изменения
git merge  master
ctrl X выход из редактора.


Отмена изменения локальной ветки.

#отменить последний commit сохранив изменения
git reset HEAD~1

Отмена изменения удаленной ветки.

(Error: Updates were rejected because the tip of your current branch is behind)
#отменить последний commit сохранив изменения
git push origin +branchname


Импортирование ветки upstream в fork.

#создание локальной версии ветки
git checkout -b newbranch upstream/newbranch

#push новую ветку в origin
git push -u origin newbranch

Перенос commit в другую ветку.

#создание ветки 
git checkout -b mybranch upstream/branch

#push новую ветку в origin
git cherry-pick 2228fa950c

#push новую ветку в origin
git push  origin mybranch

#обновить submodule
git submodule update --recursive --remote

Rebase.

#перейти на свою ветку
git checkout mybranch

#сделать rebase
git rebase master

#обновить удаленную ветку
git push --force-with-lease






вторник, 21 июня 2016 г.

This isMogified('password') is not function

The problem might be related to the fact that you're using ES6 arrow syntax instead of a plain function as the callback. ES6 arrow functions change the semantics of the this keyword, which might affect how mongoose handles the callback internally.
http://stackoverflow.com/questions/36794709/inside-schema-method-scopes-this-is-empty-in-mongoose-4-4-12

четверг, 25 февраля 2016 г.

vaadin/expense-manager-demo. FAQ.

URL

NPM modules:
bcrypt.js - Lib to help you hash passwords.

body-parser.js - Node.js body parsing middleware.

cors.js - Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources (e.g. fonts) on a web page to be requested from another domain outside the domain from which the resource originated.

jsonwebtoken.js - An implementation of JSON Web Tokens.

moment.js - A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.

morgan.js - HTTP request logger middleware for node.js

multer.js - Multer is a node.js middleware for handling multipart/form-data, which is primarily used for uploading files. It is written on top of busboy for maximum efficiency.

пятница, 25 декабря 2015 г.

React.js tips.

React can either render HTML tags (strings) or React components (classes).
To render an HTML tag, just use lower-case tag names in JSX:
var myDivElement = <div className="foo" />;
ReactDOM.render(myDivElement, document.getElementById('example'));
To render a React Component, just create a local variable that starts with an upper-case letter:
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
ReactDOM.render(myElement, document.getElementById('example'));
React's JSX uses the upper vs. lower case convention to distinguish between local component classes and HTML tags.

четверг, 17 декабря 2015 г.

MongoDB Default Admin Password

По умолчанию в MongoDB аутентификация отключена.

Для mongo-express используйте user:admin password:pass.
For mongo-express you should use the default account “user:admin”, “password:pass”

Чтобы включить аутентификацию , добавьте "security: authorization: enabled"  в mongo.cfg.
Добавляем администратора:
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Arrow keys not working on Windows 10 using slc loopback

Quick resolve. Choose "Use legacy console (requires relaunch)" and compability "Windows 95" far.exe (Far Manager) shortcut properties.



пятница, 11 декабря 2015 г.

GIT error: LF would be replaced by CRLF

Проект loopback.js развернут на Windows.

Конец строки (EOL) во всех файлах Unix-style.
Как вариант исправления ошибки GIT:

$ git config --global core.autocrlf input
Подробнее 

                 | Resulting conversion when       | Resulting conversion when 
                 | committing files with various   | checking out FROM repo - 
                 | EOLs INTO repo and              | with mixed files in it and
                 |  core.autocrlf value:           | core.autocrlf value:           
--------------------------------------------------------------------------------
File             | true       | input      | false | true       | input | false
--------------------------------------------------------------------------------
Windows-CRLF     | CRLF -> LF | CRLF -> LF | as-is | as-is      | as-is | as-is
Unix -LF         | as-is      | as-is      | as-is | LF -> CRLF | as-is | as-is
Mac  -CR         | as-is      | as-is      | as-is | as-is      | as-is | as-is
Mixed-CRLF+LF    | as-is      | as-is      | as-is | as-is      | as-is | as-is
Mixed-CRLF+LF+CR | as-is      | as-is      | as-is | as-is      | as-is | as-is


Visual Studio Code cannot detect installed git

The user settings file is located here:

Windows %APPDATA%\Code\User\settings.json
Mac $HOME/Library/Application Support/Code/User/settings.json
Linux $HOME/.config/Code/User/settings.json

Just add the path to the git executable in your Visual Studio Code settings like this:

{
    "git.enabled": true,
    // Path to the git executable
    "git.path": "C:\path\to\git.exe"
}

вторник, 8 декабря 2015 г.

Установка MongoDB на Windows (Installing MongoDB on Windows)

После установки. (After install)
1. Создать файл mongodb.cfg (Create file)
systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db
2. Создать каталоги (Create directories):
mkdir c:\data\db
mkdir c:\data\log
3. Установить службу(Install service): 
"C:\mongodb\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install

суббота, 10 декабря 2011 г.

HP LaserJet P4515 error 13.05.00

Очень повезло, на этот раз быстро нашел в инете подсказку. Все так и было, только у меня все шестеренки целы, а вот крепление пластмассовое развалилось. Подозреваю, слабое это место у  модели принтеров P4515. Публикую фото, как должно быть, и что есть в итоге.
Ну что, заказываем "направляющая бумаги в сборе LJ P4014/ P4015/ P4515" (feed guide assembly RM1-4548-000CN). Разбирается принтер  P4515 точно так же, как и 4350, при замене колебательного узла

пятница, 8 июля 2011 г.

Webexception: Слишком много попыток автоматического перенаправления

Или так: "Webexception: Too many redirects".
Неблагодарное занятие парсить html страницы. Постоянно приходится менять код.Полгода приложение работало нормально закачивало ссылку, а теперь выдает ошибку. Chrome качает без проблем, а программа не может. Пришлось разбираться с помощью Fiddler.
   Итак можно четко увидеть, что на мой запрос сервер возвращает HTTP 302, то есть делает редирект на ту же самую страницу (Location:  http://etp.zakazrf.ru/Reductions.aspx), одновременно устанавливает cookies (Set-cookies: ASP.NET_SessionId....).  В моем приложении  cookies не обрабатовались, поэтому  программа постоянно получала HTTP 302, делала редирект на Location, и так по кругу, пока счетчик перенаправлений не сравнялся с параметром
request.MaximumAutomaticRedirections ( по умолчанию равен 50).
Пришлось изменить код

вторник, 30 ноября 2010 г.

Visual Studio С# 2010 Express. Не сохраняются данные в базе.

 Я потерял часа три на то, что бы понять, почему, когда я вызываю функцию DataContext.SubmitChanges(), данные в базе данных не обновляются. При этом никаких ошибок нет. Если в точно такую же ситуацию попали и вы, советую почитать вот здесь:
http://www.visualstudiodev.com/visual-c-express-edition/tableadapter-not-inserting-rows-to-the-database-43671.shtml
Если коротко, то при отладке программы в Visual Studio C# Express, файл базы данных копируется в каталог "(ProjectDir)\bin\Debug\mydatabase.mdb" и все изменения происходят уже в этой базе. Их не увидишь, пока не сделаешь еще одно подключение в проекте на этот файл базы данных. Ну а если эти данные важны для вас, то придется вручную заменить оригинальный файл базы данных на файл временной  базы. До этого я использовал Visual Studio Web Developer 2008 Express, ничего такого там не было.

суббота, 13 ноября 2010 г.

Осваиваем LINQ to XML

Как я описал в предыдущем посте Разбор HTML в Microsoft C Sharp запрос по URL  http://sberbank-ast.ru/PurchaseList.aspx возвращает данные  в XML формате. Нам нужно их разобрать. Как раз есть повод применить LINQ to XML. Сразу посоветую книжку для изучения. Авторы: Джозеф Албахари, Бен Албахари. Название - "LINQ карманный справочник". Очень доходчиво написано.
В этой книжке также есть ссылка на программу LINQPAD, где можно поупражняться в написании запросов на LINQ. Программа бесплатная, но за такой сервис, как "autocompletion" (аналог intellisense в Visual Studio) придется заплатить. Итак имеем XML структуру :

Допустим нам нужно найти purchID по определенному фильтру. Вот как выглядит код:


То есть мы выводим идентификаторы тех аукционов, которые в своем наименовании содержат слово "Поставка", и их ID больше 58061, и в описании встречаются или "Саратов" или "Москва".
Есть один момент, который меня не устраивает в этом коде. Хотелось бы, чтобы фильтр был универсальным. Например, я хочу включить несколько городов.  Понятно, что здесь нужно использовать деревья-выражения. Вот здесь мне и помог  Джозеф Албахари. Он написал универсальные extension функции для типа Expression < Func <T,TResult>>. По этой ссылки вы найдете их определения и примеры использования.
Dynamically Composing Expression Predicates
А теперь как изменился код:




Обратите внимание на Compile(). Мне пришлось использовать эту функцию для того что перевести дерево-выражение в лямбда-выражение , так как запрос локальный и возвращает тип IEnumerable, а не интерпретируемый, который возвращает IQueryable. Разница между двумя типами  описана в книге "LINQ карманный справочник".

среда, 10 ноября 2010 г.

Разбор HTML в Microsoft C Sharp

Приятно когда опытные программисты делятся полезными идеями и даже кодом своих программ. Вот один из примеров. Для своего нового проекта мне понадобился разборщик HTML. Мне нужен очень простенький, где я мог бы для определенного атрибута вытащить его значение. В принципе в сети нашел несколько вариантов. Но остановился вот на этом:
Parsing HTML in Microsoft C#.
Очень советую. Все просто и нагладно показано.   Вот пример как я его использую. Мне нужно получить реестров аукционов с сайта http://sberbank-ast.ru/PurchaseList.aspx  Посмотрев HTML -код страницы нашел тег input c атрибутом name="ctl00$ctl00$phWorkZone$xmlData"  - это для меня ключ поиска, но а потом у этого же тега вытаскиваю значение атрибута value со списком новых аукционов < input name="ctl00$ctl00$phWorkZone$xmlData" text="text" value="..здесь данные которые мне нужны...      Вот код для получения этих данных:



tag ["value"].Value не совсем еще XML. Просто вместо "<" стоит &lt  поэтому и понадобилась процедура для замены. Вот код этой процедуры



Вывод программы примерно следующий:

среда, 22 сентября 2010 г.

Настройка URLScan

Почитав некоторые материалы в сети ( например: http://www.hanselman.com/blog/HackedAndIDidntLikeItURLScanIsStepZero.aspx
http://haacked.com/archive/2008/08/22/dealing-with-denial-of-service-attacks.aspx), я пришел к выводу, что к моему написанному приложению ASP.NET нужно срочно приделать URLscan.
Итак, качаем отсюда http://www.iis.net/download/urlscan . Устанавливаем на сервере. В каталоге c:\windows\system32\inetsrv\ появляется новая папка urlscan.
В ней два файла urlscan.dll и urlscan.ini. Эти файлы отвечают за глобальную фильтрацию всех сайтов, расположенных на сервере. Но можно настроить и отдельно для каждого сайта. Для этого нужно скопировать эти два файла в корневой каталог. Например, у меня корневой каталог моей программы (сайта) c:\Inetpub\foo.  Так как у меня права NTFS на корневой каталог только "чтение", на файл urlscan.dll пришлось дать права "чтение и выполнение" пользователю IIS_WPG. Теперь идем в "Диспетчер служб IIS" . Правой клавишей мыши достаем свойства сайта и в закладке "фильтр ISAPI" добавляем urlscan из корневой директории.
По умолчанию urlscan.ini уже содержит настройки фильтрации. Но я хотел все-таки несколько увеличить безопасность. Для начала  нужно настроить лог. В urlscan.ini  существует параметр для указания пути к лог файлу "LoggingDirectory". Я указал c:\InetPub\foo\logs. После этого не забудьте  дать NTFS права на "запись" IIS_WPG и IIS права на "запись" на этот каталог.
 Потом прошелся по настройкам в urlscan.ini. Во первых, я включил (то есть установил в единицу) параметр UseAllowExtensions=1. Это значит будет отрабатывать секция [AllowExtensions] , если параметр 0 - то отрабатывет [DenyExtensions].  У меня она выглядит так
[AllowExtensions]
.
.css
Это список разрешенных раcширений. У меня получился вот такой маленький.
 "." точка нужна для файлов без раcширений. Без этой точки у меня приложение не запускалось.
Затем я переключился на параметры в секции [RequestLimits]
MaxAllowedContentLength=30000000
MaxUrl=260
MaxQueryString=2048
Это явно излишне для моего сайта. Немного теории . Как вы знаете, протокол HTTP использует два метода запроса к серверу GET и POST. Они отличается тем,что при методе GET запрос как бы является частью URI. Например http://www.google.ru/search?source=ig&hl=ru&rlz=1R2GFRE_ruRU333&q=urlscan&aq=f&aqi=g10&aql=&oq=&gs_rfai=
 и тело запроса пусто . А при методе POST данные передаются в теле запроса.  Так вот параметр "MaxAllowedContentLength" как раз относится к POST, а  "MaxQueryString" - GET. MaxUrl - это максимальное количество символов в строке URL без QUERY_STRING. Опытным путем я вычислил следующие значения
MaxAllowedContentLength=30
MaxUrl=30
MaxQueryString=60

пятница, 18 июня 2010 г.

Проблемы локализации меню DotNetNuke 5.x.x

Сразу скажу эту проблему я так и не решил . Просто не сложилась мозаика из DotNetNuke 5 , меню, и шаблона(skin). Теперь все по порядку.

Так как у меня уже есть один сайт на DotNetNuke 4.5, я смело принялся создавать страницы с названиями на русском языке. Но стоп, они не открываются . Они даже потом не редактируются. Их можно только удалить. Я не придал этому большого значения, отложил это на потом  и принялся искать по интернету бесплатные скины и модули. Мне нужен был модуль фото галерея . Я нашел даже два . Вот ссылки:
Photo Gallery - http://oliverhine.com/DotNetNuke/Modules/PhotoGallery.aspx
WnsLightbox Gallery -http://wnslightbox.codeplex.com/
Подобрал себе скин вот отсюда:
http://www.dnnskins.com/

Перехожу к руссификации меню.

Итак, 1 вариант, который я испытал - DSlocalizator http://dnn.tiendaboliviana.com/
На сайте выложена версия 03.00.04 бета. Сколько я не пытался ничего не получилось . А  на DotnetNuke 4 DSLocalizator работает на ура.

2 вариант - EALO  http://ealo.codeplex.com/releases/view/33940
Качаем EALO CoreAPI и EALO Tab localization. Почитайте Readme на сайте, потому что в дистрибутивах его нет. В принципе все понятно . После установки , просто добавьте модуль EAOL tab на какую нибудь страницу и укажите русский вариант всех своих страниц. Я смог руссифицировать стандарное меню , но вот меню моего скина нет. Нет в моем скине dnn:nav ..., а есть dnn:menu.. и, как я понял из форума, EALO мне не поможет http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/77/threadid/350801/scope/posts/Default.aspx

3 вариант - DNN menu http://www.dnngarden.com/ . Для руссификации должен быть установлен EALO.  Попытка была для меня тоже неудачной. Руссифицировать получилось, но модуль работал нестабильно, в какой-то момент, почему-то слетал style тага td, в котором был пункт меню, и он становился черным. Возможно все мои проблемы были из-за выбранного мною скина.

В итоге, я установил DotNetnuke 4.9.5 и DSLocalizator. Но, к сожалению, модули фото галерей были только под пятерку. Пришлось искать . Фришных нет вообще.
Вот удалось отсюда скачать
http://www.labellarte.it/DotNetNuke/DnnThickGallery12/tabid/438/Default.aspx

Установка DotNetNuke 5.4.1

У меня уже есть опыт разворачивания сайта DotNetnuke только ранней четверки. Теперь решил взяться за пятерку. Вот некоторые нюансы установки.У вас уже должен быть установлен SQL Express, IIS и Net Framework как минимум 2.

1. Заходим по ссылке качаем дистрибутив
http://www.dotnetnuke.com/tabid/125/default.aspx

2. Полученный архив распаковываем в c:\DotNetNuke

3. Находим файл readme.txt в c:\DotNetNuke\documentation и
выполняем требования описанные в этом файле.
 На каталог c:\DotNetNuke даем полные права ASP_NET юзеру, если конечно у вас XP.
 Создаем базу данных DotNetNuke в SQLExpress и пользователя, например dnnuser, с правами "db_owner".
Редактируем connectionstring в web.config .
Заходим в IIS создаем виртуальный каталог DotNetNuke, указывающий на  c:\DotNetNuke. Файл default.aspx должен быть документом по умолчанию.

4. Запускаем IE . Вводим в строке localhost/dotnetnuke.
Тут же у меня вылетела ошибка. Оказывается, если IIS был установлен после Net Framework, необходимо выполнить c:\Windows\Microsoft.Net\Framework\v2.0.50727\aspnet_regiis.exe

5.  Дальше проходим программа установки запрашивает информацию. Коротко несколько нюансов.
При выборе установки по умолчанию устанавливается только один модуль "Text/HTML".

Выполнение скриптов может завершиться с ошибкой. Хотя это и не указано в Readme.txt, но необходимо дать права на запись на каталог c:\windows\temp учетной записи ASP_NET.

После установки сразу же качаем устнавливаем language pack
http://www.dotnetnuke.com/Development/LanguagePacks/tabid/933/Default.aspx
Кстати, он в пятерке устанавливается как обычный модуль.

понедельник, 24 мая 2010 г.

WebException Сервер нарушил протокол. Section=ResponseHeader Detail=Недопустимое имя заголовка

В моем проекте MVC мне понадобилось подключиться к принтерам через WEB интерфейс. Я хотел программно считать пробег.
Получилось вот что:

Dim wc As New System.Net.WebClient
Dim Stream As System.IO.Stream
Try
 Stream = wc.OpenRead("http://" & Specific.IP_add _  

  "/hp/device/this.LCDispatcher?dispatch=html&cat=0&pos=1")
 Using sr As New System.IO.StreamReader(Stream)
  str = sr.ReadToEnd()
  Stream.Close()
 End Using
 Return CType(CountStr, Integer)
Catch ex As Exception
 Dim errorstring = ex.Message
End Try


У принтера HP4350 без проблем считалась страница, а вот у HP 4300 никак.
Ошибка была следующая :
"Сервер нарушил протокол. Section=ResponseHeader Detail=Недопустимое имя заголовка"
Решение удалось найти. Необходимо в файле web.config внести следующие изменения:

<configuration>
   <system.net>
       <settings>
          <httpwebrequest useunsafeheaderparsing="true">
       <settings>
   <system.net>
<configuration>

С принтером 4515 тоже не очень гладко получилось , так как  WEB интерфейс был доступен по протоколу https. Возникало следующее исключение:
"Базовое соединение закрыто Не удалось установить доверительные отношения для защищенного канала SSL TLS". Вот по этой ссылке сделал.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/c98ea134-c582-4c2a-8c42-d7e31f7fe389
Итак определяем функцию, котрая возвращает всегда "True"

Private Function ValidateCertificate(ByVal sender As Object, _
  ByVal certificate As  X509Certificate, ByVal chain As X509Chain, _
  ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
  Return True
End Function


А вот ее вызов

Dim wc As New System.Net.WebClient
Dim Stream As System.IO.Stream
Try
 System.Net.ServicePointManager.ServerCertificateValidationCallback = _

 New System.Net.Security.RemoteCertificateValidationCallback AddressOf _
 ValidateCertificate)
 Dim myUri As New Uri("https://" & Specific.IP_address _ &  "/hp/device/this.LCDispatcher?nav=hp.Config")

 Dim mySP As System.Net.ServicePoint = _

     System.Net.ServicePointManager.FindServicePoint(myUri)
 Stream = wc.OpenRead(myUri)
 Using sr As New System.IO.StreamReader(Stream)
 str = sr.ReadToEnd()
 Stream.Close()
 End Using
 Return CType(CountStr, Integer)
Catch ex As Exception
 Dim errorstring = ex.Message
End Try

вторник, 27 апреля 2010 г.

MVC.Многостраничный просмотр таблицы.

Задача сводится к следующему. При выводе данных в окно браузера ограничиться некоторым количеством записей из таблицы, чтобы помещалось на экране. А тажке соорудить навигацию для доступа к невидимой части.
"MVC PageIndex" - запрос к Google.
Решение очень быстро нашлось. http://en.webdiyer.com/ . Абсолютно бесплатный модуль. Есть очень понятные примеры. http://en.webdiyer.com/MvcPager/Demo/StandardТак как я использую сначала фильтр, а потом уже вывожу данные, то вот мой измененный код:

Function Consumable(ByVal id1 As Integer?) As ActionResult
 Dim Datacontext As New PrintModelDataContext
 Dim ListConsumables As IQueryable(Of ClassConsumable)
 ListConsumables = From c In Datacontext.consumable, p In Datacontext.Printer _
                  Where c.Id_printer = p.Id _
                  Select New ClassConsumable _
                             With {.Id = c.Id, _
                                   .Naim = c.Naim, _
                                   .Part_number = c.Part_number, _
                                   .Revolving = c.Revolving, _
                                   .Count = c.Count, _
                                   .NaimPrinter = p.Naim}
 Return View(ListConsumables.ToPagedList(IIf(id1 Is Nothing, 1, id1), 20))
End Function


Мне пришлось создать новый класс, который является неким объединением двух таблиц Consumable и Printer. Ну а в представлении я абсолютно точно копирую из оригинала. Только перевожу в синтаксис языка  VB

<%=Html.Pager(Of print.ClassConsumable)(Model, New PagerOptions With {.PageIndexParameterName = "id1"})%>

И еще полезно будет в Web.config в каталоге VIEW внести строчку

<namespaces>
<add namespace="Webdiyer.WebControls.Mvc"/>
</namespaces>

Чтоб метод Pager был доступен в каждой странице проекта.