Sposób na stały adres IP u dowolnego ISP.

Adres IP jest zazwyczaj przypisywany przez dostawcę sieci. W zależności od dostawcy, możemy otrzymać statyczny adres IP, czyli taki który zawsze będzie taki sam po każdym restarcie urządzenia, lub dynamiczny – wówczas praktycznie po każdym restarcie będziemy mieli nowy adres. Przy mobilnym dostępie do internetu w większości przypadków będzie to adres dynamiczny. Niektórzy dostawcy umożliwiają wykupienie opcji stałego adresu IP, nawet w przypadku Internetu mobilnego.

Co w przypadku gdy chcemy mieć stały adres IP, a nasz dostawca nie umożliwia nam takiej opcji?

Potrzebowałem ustawić sobie na serwerze możliwość logowania się tylko z jednego adresu – ze względów bezpieczeństwa. Ponieważ zazwyczaj używam internetu mobilnego, więc IP miałem przydzielane dynamicznie. Zastanawiałem się jak sobie poradzić z tym fantem. Mamy tu kilka możliwych rozwiązań. Poniżej przedstawię dostępne opcje i powiem którą ostatecznie wybrałem.

Wykupienie stałego adresu IP.

Mój dostawca oferuje opcję wykupienia stałego adresu IP za 5zł miesięcznie + aktywacja 20pln. Dobra opcja, cena też jest ok. Szukając na siłę minusa – raz w miesiącu jestem w lokalizacji gdzie mam kiepski zasięg i wówczas cały misterny plan bierze w łeb. Ale to 1 weekend w miesiącu bez dostępu – da się przeżyć.

Zrobienie stacji przesiadkowej z taniego VPSa

Kolejne rozwiązanie które mi przyszło do głowy to zrobienie tzw. stacji przesiadkowej. Kupujemy tani VPS z minimalnymi zasobami i logujemy się do niego a jego adres IP będzie stały. W swojej pracy często mam do czynienia ze stacjami przesiadkowymi, głównie ze względów bezpieczeństwa, więc to dla mnie akceptowalne rozwiązanie. Kwestia kosztu serwera VPS – serwer z Windows Server będzie drogi, pozostaje Linux.

Zastosowanie VPN

Kolejną opcją którą brałem pod uwagę był VPN. Na rynku jest wiele rozwiązań VPN różnych dostawców, różniących się między sobą ceną oraz funkcjonalnościami. Dzięki VPN można mieć stały adres IP w dowolnej adresacji, dodatkowo włączany wtedy kiedy jest potrzebny i będzie działał z każdą siecią.

Finalna decyzja – jednak VPN.

Rozwiązaniem okazał się VPN. Postanowiłem poszukać takiego który oferuje adres IP. Sprawdziłem sobie różne oferty na https://vpnlab.pl i wybrałem tych dostawców którzy za oferują opcję własnego adresu IP. Usługa dedykowanego adresu IP kosztuje parę złotych (znalazłem ofertę za 0,99$). Za te parę złotych miesięcznie otrzymujemy stały adres IP którego możemy używać do swoich celów. Ponieważ VPN jest programem który włączamy sami, więc w ten sposób zawsze mam stały adres IP, obojętnie w jakim miejscu się znajduję ze swoim laptopem.

Co więcej, VPN daje możliwość wybrania sobie lokalizacji z jakiego kraju będziemy mieli IP – zazwyczaj do wyboru jest kilkanaście adresacji z różnych państw. Pozwala np. na zmianę adresu na adres z USA, a tym samym dostęp do pełnej oferty Netflixa np. dla USA. Korzystając z VPN można też będąc poza granicami polski oglądać polskie programy poprzez serwisy VOD. Kolejne zastosowanie to możliwość przetestowania geolokalizacji strony www. Generalnie sporo plusów. Dodatkowo VPN zabezpiecza przed śledzeniem ruchu przez dostawcę Internetu jeśli ktoś jest maniakiem prywatności. Przyjemne z pożytecznym. VPN to przydatne narzędzie które może się przydać w różnych sytuacjach.

Testing jQuery code with Mocha, Chai and jsdom

Testing jQuery code (in particular jQuery plugins) can be a lot of fun. Below you will find a few tips on setting up the testing environment on MacOS X and running tests with Mocha, Chai and jsdom.

Mocha vs other test frameworks


Why did I choose Mocha? Jasmine also looks very nice and many people are happy with it, but its development seems to be a little slow lately. Mocha has good documentation and all the features I could ask for, so I decided to give it a try instead. Also let’s not forget Mocha has a nyan cat reporter:

Getting ready


Ideally the jQuery plugin we are going to test should be object-oriented. There are many ready, well-designed boilerplates that help to structure a plugin in an object-oriented way. I found this boilerplate quite useful. But I also wanted it to accept a method and/or options when calling the plugin in this way:

$("element").myplugin();
or

$("element").myplugin({ option1: true, option2: true });

or

$("element").myplugin("some_other_method");

or

$("element").myplugin("some_other_method", { option1: true, option2: true });

Setting up Mocha


While setting up Mocha I first learned about package.json. This is where we can define all dependencies for our jQuery project. It looks something like this:

{
  "name": "jquery-bar-rating",
  "description": "Minimal, light-weight jQuery ratings."
  "version": "0.1.0",
  "main": "./jquery.barrating",
  "devDependencies": {
  "mocha": "", "chai": "",
  "jsdom": "", "jquery": ""
 }
}


With a package.json file in place installing Mocha and all its dependencies is as simple as running “npm install” in the project directory. I assume npm is installed on the system. If not, installing npm is explained on the nodejitsu blog.

Bootstrapping DOM


Usually jQuery acts on DOM elements. But what if we want to execute tests outside of the browser environment, on the command line? jsdom (JavaScript implementation of the W3C DOM) will fill that gap. With jsdom you will be able to bootstrap a DOM by loading a document from an URL with jsdom.env() method or creating it from scratch:

var jsdom = require("jsdom").jsdom;
var doc = jsdom('');
var window = doc.createWindow();


Writing tests


Mocha works with a few different assertion libraries. I picked Chai.js, because I liked its BDD assertion styles. You can choose between “expect” or “should” interfaces for writing tests or mix both. “Expect” interface is recommended over “should”, because it is fully compatible with Internet Explorer once you would decide to run tests in the browser.

describe('bar rating plugin on show', function () {
  beforeEach(function () {
    $('#rating').barrating('show');
  });
 
  it('should be initialized', function () {
    expect($('#rating').data('barrating')).to.be.a('object');
  });
});

Running tests


./node_modules/mocha/bin/mocha


Don’t forget to add “node_modules” to .gitignore if you are using git.