Pages

Monday, March 12, 2018

Daily notes

Learning Spring

I'm following the "Spring 5.0 Project: Building a Travel Website" video course from Pack Publishing.
Today, I've learned some new things from the example used in that course:

STOMP

The example from the chapter related with programming web-sockets uses the so called STOMP protocol.
A quite similar example can be found on the Spring Framework website at https://spring.io/guides/gs/messaging-stomp-websocket/

It is the first time when I hear about STOMP, of course is also the first time programming with web sockets.
So, what's STOMP?

STOMP - Simple (or Streaming) Text Oriented Messaging Protocol

The purpose of this protocol is to "provide an interoperable wire format so that STOMP clients can communicate with any STOMP message broker to provide easy and widespread messaging interoperability among many languages, platforms and brokers".

The specification of the latest version of the STOMP protocol can be found at https://stomp.github.io

There is also a very short article about STOMP on Wikipedia


WebJars


Another quite cool thing I've learned is that one can use the so called webjars for specifying the client-side (javascript) dependencies. WebJars are client-side dependencies packaged as jar archive files.
The available javascript libraries can be found at WebJars home: http://www.webjars.org/.
For example of usage, see the following tutorial http://www.baeldung.com/maven-webjars.


Socksjs-client


https://github.com/sockjs/sockjs-client
A javascript library that provides "a coherent. cross-browser, Javascript API which creates a low latency, full duplex, cross-domain communication channel between the browser and the web server"

Monday, November 16, 2015

Prism 6 is open source!

Prism 6 is open source! You can get the source code from github.

Resources:

patterns & practices: Prism, https://compositewpf.codeplex.com/
Prism grows up, http://blogs.msdn.com/b/dotnet/archive/2015/03/19/prism-grows-up.aspx

Friday, November 06, 2015

My Friday's links


Programming



What makes a cool URI?
 A cool URI is one which does not change.
 What sorts of URI change?
URIs don't change: people change them.





I discovered the links above by reading the book Pro Asp.Net MVC 4 By Adam Freeman
( http://www.apress.com/9781430265290 )


Programmers


  • Programmers: Stop Calling Yourselves Engineers

( http://www.theatlantic.com/technology/archive/2015/11/programmers-should-not-call-themselves-engineers/414271/ )

Wednesday, October 28, 2015

Obtinerea adresei IP in formatul standard dintr-un numar intreg

Calcularea adresei IP în formatul IPv4 dintr-un număr întreg pe o platforma little endian.


long IP = 3232679515;

byte[] bytes = new byte[4];


bytes[0] = (byte)((IP >> 0) & 0xFF);
bytes[1] = (byte)((IP >> 8) & 0xFF);
bytes[2] = (byte)((IP >> 16) & 0xFF);
bytes[3] = (byte)((IP >> 24) & 0xFF);

// all of the protocol layers in the TCP/IP suite are defined
// to be big endian
string ipText = bytes.Select(b => b.ToString())
 .Aggregate((ip, b) => (ip.Length == 0) ? b : ip + "." + b);

Console.WriteLine(ipText); // prints 91.198.174.192


Bineînțeles că nu trebuie să ne chinuim atât de mult să obținem o adresă IP dintr-un long. În .net există clasa IPAddress care reprezintă o adresa IP și furnizează diferite proprietăți și metode utile:


System.Net.IPAddress ip = new System.Net.IPAddress(3232679515);
Console.WriteLine(ip.ToString()); // prints 91.198.174.192


Am citit despre:
Big-Endian vs. Little Endian: Endianness Explained, http://www.barrgroup.com/Embedded-Systems/How-To/Big-Endian-Little-Endian


Referințe:
MSDN, https://msdn.microsoft.com/en-us/library/system.net.ipaddress(v=vs.110).aspx
Understanding IP Addresses, Subnets, and CIDR Notation for Networking, https://www.digitalocean.com/community/tutorials/understanding-ip-addresses-subnets-and-cidr-notation-for-networking

Tuesday, October 27, 2015

Ce am mai invatat astazi



1. Ștergerea fișierelor dintr-un repository git.


Am făcut lucrul ăsta de mai multe ori dar nu atât de des încât sa țin minte comanda :).

În exemplul următor, comanda va șterge din directorul curent, în mod recursiv, fișierele compilate python (*.pyc) .


1
git rm -r \*.pyc




2. Cum să faci scroll într-un panel tmux


Folosind combinația de taste Ctrl-b [ se intra în modul "scroll". În acest mod se pot folosi săgețile și tastele PgUp (Page Up) si PgDn (Page Down). Pentru a ieși din acest mod trebuie apăsata tasta q

3. Cum poti folosi mouse-ul pentru a modifica marimea panelurilor in tmux


Se adăuga în fișierul de configurare a tmux, ~/.tmux.conf, următoarea linie


1
set -g mouse on

4. Tagul HTML (HTML Keyboard Input Element)

Reprezinta input de la tastatura si produce un element "în linie" (inline) ce va fi afișat de către browser cu un font monospace. Elementului ii poate fi adăugat un stil folosind css.

<kbd>Ctrl</kbd>

Rezultat

Ctrl


Referințe:

https://git-scm.com/docs/git-rm
http://superuser.com/questions/209437/how-do-i-scroll-in-tmux
http://stackoverflow.com/questions/30185210/ubuntu-change-tmux-1-8-to-tmux-next-1-9
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd

Monday, October 26, 2015

The sp_configure value 'contained database authentication' must be set to 1 in order to create a contained database.

Acum cateva zile a trebuit sa-mi reinstalat sistemul de operare dupa un upgrade nereusit la windows 10.

Cu cateva zile inainte de toata nebunia asta cu reinstalarea sistemului, incepusem lucrul la un proiect in care foloseam ca server de baze de date SQL 2014 Express LocalDB. Nu am mai lucrat pana acum cu LocalDB deoarece intotdeauna am la indemana o instanta de SQL Server Developer Edition. La acest proiect am dorit sa incerc si aceasta versiune.

Dupa reinstalarea sistemului de operare si o parte a programelor necesare dezvoltarii de aplicatii, am deschis proiectul la care lucram in Visual Studio si, din panelul "Server Explorer", am incercat sa atasez baza de date (fisier mdf) la LocalDB . Din pacate am obtinut urmatoarea eroare:

The sp_configure value 'contained database authentication' must be set to 1 in order to create a contained database. You may need to use RECONFIGURE to set the value_in_use. An attempt to attach an auto-named database for file failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

Ce mai este si acest 'contained database authentication'?

Am cautat pe Google.. si asa am aflat de existenta acestor 'contained databases', baze de date ce sunt izolate fata de celelalte baze de date si de instanta SQL Server care le gazduieste.

SQL Server realizeaza aceasta izolare in 4 moduri:
- mare parte din metadatele ce descriu baza de date sunt mentinute in baza de date si nu in baza de date master
- toate metadatele folosesc aceleasi tip de interclasare ("collation")
- autentificarea este facuta de baza de date reducand astfel dependenta de "login"-urile definite in instanta SQL Server
- mediul SQL Server (DMV-urile, XEvent-urile etc) raporteaza si poate actiona asupra informatiilor izolate.

Acest tip de baze de date a aparut incepand cu versiunea 11 a SQL Server (SQL Server 2012). Mai multe detalii despre 'contained databases' se pot gasi pe MSDN, vezi Referinte

Eroare mea s-a rezolvat executand urmatoarele instructiuni:


1
2
3
4
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO


Instructiunile de mai sus le-am executat din panelul SQL Server Object Explorer => Selectare instanta LocalDb => New Query...

Dupa rularea instructiunilor de mai sus, baza de date a fost atasata fara probleme la instanta LocalDB.


Referinte: 


MSDN - Contained databases: https://msdn.microsoft.com/en-us/library/ff929071.aspx
MSDN - Contained database authentication Server Configuration Option: https://technet.microsoft.com/en-us/library/ff929237.aspx
SQL Server Portal, SQL SERVER 2012 – Fix – Error – 12824 – The sp_configure value ‘contained database authentication’ must be set to 1: http://raresql.com/tag/the-sp_configure-value-contained-database-authentication-must-be-set-to-1-in-order-to-s_msg-a-contained-database-you-may-need-to-use-reconfigure-to-set-the-value_in_use/

Thursday, September 03, 2015

Javacript, python si c# si operatia de impartire a numerelor intregi

În Python 2.7 găsesc supărător faptul ca împărțirea a doua numere întregi are ca rezultat tot un număr întreg chiar dacă împărțirea celor două numere nu este exactă. De la un limbaj dinamic m-aș fi așteptat să obțin un număr real, precum în Javascript:


C:\Users\>Daniel>node
> var a = 10;
undefined
> var b=3;
undefined
> a/b
3.3333333333333335

Javascript, intern, are doar singur tip de reprezentare a numerelor, 64-bit virgula mobila, acelasi cu double din c#.

Python în schimb suportă și tipul integer. Rezultatul împărțirii a doua numere întregi în Python 2.7 este întotdeauna un număr întreg:

In [1]: a = 10
In [2]: b = 3
In [3]: a/b
Out[3]: 3

Pentru a pentru a obține rezultatul corect trebuie sa convertim unul din operatori la tipul float.

In [5]: a/float(b)
Out[5]: 3.3333333333333335

Python 3 nu are această problemă, rezultatul împărțirii în astfel de cazuri fiind un număr real (true division).

Putem folosi și în Python2.7 operația de diviziune din Python 3  cu un import din __future__:

In [1]: from __future__ import division
In [2]: a = 10
In [3]: b = 3
In [4]: a/b
Out[4]: 3.33333333333333355


În C#, rezultatul împărțirii a doua numere întregi este tot un număr întreg, rezultat care nu ridică întrebări având în vedere faptul ca limbajul este static.


1
2
3
4
int a = 10;
int b = 3;

Console.WriteLine(a/b); // prints 3

Result: 3


REFERENCES:

- Python 2.7 Documentation, https://docs.python.org/2.7/library/stdtypes.html#numeric-types-int-float-long-complex
- Python 3.4 Documentation, https://docs.python.org/3.4/library/stdtypes.html#numeric-types-int-float-complex
- MDN, Numbers, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates
- How can I force division to be floating point in Python? http://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python
- Learning Python de Mark Lutz. Capitolul 5, Numeric Types
- Javascript: the Good Parts de Douglas Crockford. Capitolul 2. Grammar
- C# 5.0 in a Nutshell de Joe Albahari, capitolul 2 Numeric Types