co.de.mon.key

Weblog

Howto hide SQL Server databases for specific login in Management Studio

| Comments

Default Microsoft SQL Server configuration allows all useres marked as public to see all the databases on the server.

After creating a database we can grant a db_owner role for a server login without allowing it to view another db’s.

Assuming that login myuser is created in a server security part.

1
2
3
4
5
USE mydb
ALTER AUTHORIZATION ON DATABASE::mydb to myuser

USE MASTER
DENY VIEW ANY DATABASE TO myuser

From now on user can see only the newly created mydb database (and of course master and tempdb)

Source, moar source

Przekierowanie portu Windows

| Comments

Przekierowanie lokalnego portu na systemie z Windowsem na zdalny na zewnętrznej maszynie.

 

1
netsh interface portproxy add v4tov4 listenport=3390 listenaddress=192.168.1.20 connectport=3389 connectaddress=81.81.81.81
  • listenport – port nasłuchujący lokalnie
  • listenadress – adres na lokalnej maszynie, na którym nasłuchiwać, można hurtowo 0.0.0.0
  • connectport – port docelowy
  • connectaddress – adres komputera docelowego

Aby skasować jedno przekierowanie:

1
netsh interface portproxy delete v4tov4 listenport=3390 listenaddress=192.168.1.20

Aby skasować wszystkie:

1
netsh interface portproxy reset

Aby zobaczyć stan:

1
netsh interface portproxy show all

git log - list all commits from user

| Comments

git log is a powerfull command that allows to list all commits with specific criteria.

1
git log --pretty=format:"%ad:%an:%s" --date=short --reverse --all --since=2.months.ago --author=john | grep -v "Merge branch"
  • --all – from all branches
  • %ad – date that respects --date specifier
  • %an – author name
  • %s – subject
1
2
3
4
5
...
2014-04-14:john:Customer entity
2014-04-15:john:Orders model
2014-04-18:john:Fixing security flaw
...

source

Sieć WiFi nie działa po wyjściu laptopa z uśpienia

| Comments

Przy próbie naprawy połączenia można doszukać się komunikatu: “System Windows nie mógł automatycznie powiązać stosu protokołu IP z kartą sieciową”. Dobrze spróbować zresetować protokół TCP/IP jako administrator:

1
netsh int ip reset

Działa w Windows Vista, 7, 8 i 8.1.

Źródło

Python bruteforce password generator

| Comments

Generating char combinations is extremely easy with Python’s itertools.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import string
import itertools

def dict_gen_up_to_len(n):
    chars = string.ascii_letters + string.digits + '!@#$%^&*()'
    return itertools.chain(''.join(j) for i in range(n) for j in itertools.product(chars, repeat=i+1))

def dict_gen_exact_len(n):
    chars = string.ascii_letters + string.digits + '!@#$%^&*()'
    return itertools.chain(''.join(j) for j in itertools.product(chars, repeat=n))

n = 8

for word in dict_gen_exact_len(n):
    print (word)

# aaaaaaaa
# aaaaaaab
# aaaaaaac
# ...
# ))))))))

for word in dict_gen_up_to_len(n):
    print (word)

# a
# b
# c
# ...
# aa
# ab

Najprostsza instalacja i aktualizacja aplikacji skryptem bat

| Comments

Najprostszy schemat instalacji i autoaktualizacji aplikacji, to pobranie najnowszej wersji przed uruchomieniem oraz umieszczanie plików w katalogu do których zalogowany użytkownik ma pełne uprawnienia. W sieci lokalnej da się to zrealizować prostym skryptem batch.

Poniższy skrypt jest nawet bardziej ‘inteligentny’, gdyż za pomocą xcopy można kopiować jedynie nowsze pliki, co w znacznym stopniu ogranicza przesyłaną ilość danych i czas potrzebny na uruchomienie właściwej aplikacji.

1
2
3
4
5
6
7
8
9
echo "App is starting, please wait..."

set targetdir=%APPDATA%/AppFolder
if not exist "%targetdir%" (
 mkdir "%targetdir%"
)
xcopy \\192.168.0.1\SourceDir "%targetdir%" /E /D /C /Y
cd "%targetdir%"
App.exe

xcopy.

  • /D – kopiuje tylko te pliki, które mają nowszą datę modyfikacji
  • /E – kopiuje katalogi, również puste
  • /C – kontynuacja przy błędzie
  • /Y – automatyczne potwierdzanie nadpisania plików

Windows - uruchamianie skryptu bat / cmd jako administrator - problem aktualnej ścieżki wywołania

| Comments

W nowych wersjach systemu Windows (8 i 8.1 na pewno, we wcześniejszych nie testowałem) zmienił się katalog wywołania skryptów uruchamianych jako administrator. Domyślnie zamiast katalogu bieżącego jest to:

%SYSTEM%

czyli na przykład

C:\Windows\system32

Aby przywrócić funkcjonalność starych skryptów można zastosować na początku przejście do katalogu wywołania:

1
2
setlocal enableextensions
@cd /d "%~dp0"

gdzie:

@setlocal enableextensionsumożliwia dostęp do rozszerzenia CMD

Ponieważ: %0 to pełna ścieżka do wywoływanego programu (skryptu)

to:

@cd /d "%~dp0" – przejście do katalogu wywołania, wykorzystujące dodatkowe zmienne skryptowe

%0 to standardowo nazwa pliku (skryptu) wykonywalnego wraz ze ścieżką, a ~dp wyciągnięcie z niej litery dysku oraz samej ścieżki do katalogu.

Źródło

GANZ PixelPro secondary RTSP stream

| Comments

GANZ PixelPro ZN-MB243M IP surveillance Camera supports two live streams (RTSP or MJPEG), that can be enabled and configured directly from control web panel. However the manual doesn’t mention about direct stream URL’s.

The first one is quite easy to find on the Internet webpages with list of available camera streams (like 1 or 2):

1
rtsp://IP:554/gnz_media/main

But the second stream is a MYSTERY! I found only one google result – march 2014 (+few autocrawlers) with it. It is an Excel file on some russian page: http://freudgroup.ru/userfiles/ipcameras.xls

1
rtsp://IP:554/gnz_media/second

To be exact there is a third MJPEG stream, that is displayed on the Live Preview page, but it only accepts one connection at a time.

1
http://ADMIN:1234@IP/cgi-bin/jpg.fcgi?count=-1

Przegląd darmowych hostingów obrazów - marzec 2014

| Comments

Octopress – zamieszczanie obrazów we wpisie

Jedną z uciążliwości Octopress’a jest sposób zamieszczania obrazków w postach – należy w poście podać bezpośredni url do obrazka (względny, w postaci images/email.png, lub bezwzględny: http://blog.codemonkey.pl/favicon.png).

Zgodnie z dokumentacją img-tag, ma to postać:

{% img left http://x.pl/logo.png 220 92 logo %}

Pierwszym sposobem jest umieszczenie obrazka w katalogu source/images, co po rake deploy skutkuje przeniesieniem (git push / rsync) obrazka na hosting. Można się do niego odwołać względnym URLem. Drugim jest oczywiście hotlink do zewnętrznego serwisu.

Ponieważ nie chcę większymi zdjęciami zaśmiecać githuba, na którym hostowany jest blog, poświęciłem kilka chwil na poszukiwanie darmowego hostingu obrazków z przyzwoitymi warunkami.

Dodatkową motywacją do poszukiwań była zmiana polityki imageshack, która wprowadziła jedynie płatną usługę.

Parametry brane pod uwagę

Najbardziej zwracałem uwagę na kilka cech:

  • całkowity rozmiar dostępnej przestrzeni,
  • limit parametrów pojedynczego pliku (wielkość, wymiary, czas w przypadku filmów),
  • limit transferu,
  • wygasanie obrazków
  • możliwość uzyskania bezpośredniego odnośnika do zdjęcia
  • konieczność rejestracji
  • dostęp do API w celu automatycznego uploadu,
  • (łatwość dodawania zdjęć i pobierania bezpośredniego URLa do wstawienia przez stronę lub aplikację – istotne, ale często nie da się sprawdzić bez rejestracji)

Poniżej zamieściłem rezultaty krótkich poszukiwań. Zamieszczone dane są zebrane bezpośrednio ze stron hostingów, FAQ, itp…

Charakterystyki darmowych hostingów obrazów

  • Photobucket 12 3
    • 2 GB przestrzeni na obrazy i filmy poniżej 10min
    • brak limitów parametrów zdjęć, film maks. 500 MB, 10 min, animowane gify do 5 MB i 800 ramek
    • 10 GB / miesiąc transferu
    • obrazy nie wygasają
    • API – dostępne, pewne ograniczenia dzienne, np 10 000 uploadów na dzień
    • konieczność rejestracji
  • Flickr 4 (yahoo)
    • 1TB przestrzeni
    • 200 MB / zdjęcie, 1 GB / film maks. 3 min
    • brak limitów transferu
    • obrazy nie wygasają
    • API dostępne
    • konieczność rejestracji
    • sporo aplikacji do zarządzania w The App Garden
    • edit: jednak nie lubią hostować obrazków innych niż zdjęcia, ani być hotlinkowanym link
  • imgur 5 – używany na reddicie
    • brak limitu przestrzeni – obrazki są w serwisie dopóki mają 1 odsłonę w ciągu ostatnich 6 miesiecy
    • 10 MB / zdjecie, ale jeśli będzie powyżej 1 MB to zostanie przekompresowane do 1 MB (animowane do 2 MB)
    • rejestracja niewymagana, ale przydatna do zarządzania zdjęciami
    • API dostępne
    • 1 250 uploadów / dzień, ok. 12 500 pobrań / dzień
  • TinyPic 6
    • nieograniczona przestrzeń
    • maks. 1600 wymiaru, 100 MB, 5 min filmu
    • brak API
    • zdjęcia wyświetlane dopóki mają odsłony w ciągu ostatnich 90 dni
    • rejestracja niewymagana, ale ostatnio wprowadzili captchę
  • Picasa 7 8
    • 15 GB dostępne na wszystkich usługach google
    • pojedyncze zdjęcie maks. 50 MB, wideo 1 GB, maksymalnie 20 000 albumów, w każdym do 2 000 zdjęć
    • API dostępne
    • zdjęcia nie wygasają
    • uwagi: przy ręcznym dodawaniu zdjęć uciążliwe dostawanie się do linku bezpośredniego.
  • fotosik.pl 9
    • maksymalnie 100 zdjęć
    • 1,5 MB na zdjęcie
    • limit transferu: 1 GB miesięcznie
    • brak API
    • zdjęcia nie wygasają
    • rejestracja niewymagana

Chmura

Sprawdziłem również jak hostingi typowo cloudowe radzą sobie z możliwością hotlinkowania plików i obrazków bezpośrednio na stronie.

  • dropbox
  • box.com
    • direct link jedynie w wersji premium
  • mega.co.nz
    • nie ma możliwości otrzymania bezpośredniego URLa
  • OneDrive (SkyDrive)
    • nie ma możliwości otrzymania bezpośredniego URLa, jedynie kod z IFRAME

Pozostałe, przejrzane ale niezbyt interesujące

  • http://iv.pl
    • 1 MB na zdjęcie
    • bez logowania zdjęcia są usuwane po 14 dniach, po rejestracji – po 2 latach
  • http://neepic.net
    • 5 MB na obrazek
    • pliki kasowane po roku od ostatniego obejrzenia
  • http://bayimg.com – imagesharer od thepiratebay, minimum funkcjonalności.
  • http://zapodaj.net – strona, nawet najprostsze faq, działała tak wolno w trakcie otwierania że bałbym się zamieszczać tam zdjęcia;). Dodatkowo brak możliwości hotlinkowania, zdjęcia są usuwane po 3 miesiącach
  • http://fotoo.pl info
    • 50 MB przestrzeni
    • 2 MB na zdjęcie
    • 1 GB limitu / miesiąc.
  • http://ifotos.pl
    • 4 MB na zdjęcie
    • zdjęcia są usuwane jeśli w ciągu 3 miesięcy będą miały mniej niż 10 wizyt
    • mało informacji
  • http://savepic.org / http://savepic.su – język mnie skutecznie odstraszył;)
  • http://www.garnek.pl
    • “na konta można dodawać tylko własne zdjęcia”
    • “nie ma opłat ani limitów, byle nie wrzucać 5 tys. zdjęć dziennie”
  • http://flog.pl – usługa dedykowana na zdjęcia
  • http://pixabay.com/ – zdjęcia umieszczane muszą spełniać quality standards
  • http://www.imgland.net
    • brak rejestracji
    • brak szczegółowych danych, ale niespotykane gdzie indziej rozpoznawanie użytkownika po IP

Niesprawdzone

Wnioski

Po sprawdzeniu wyżej wymienionych stron, porównując opisywane na nich parametry usługi z moimi oczekiwaniami, na czoło zdecydowanie wysuwa się Flickr, następnie Photobucket.

Po rejestracji mamy możliwość kompletnego zarządzania kolekcją zdjęć, oraz pobierania bezpośredniego odnośnika do wstawienia na stronę. Oba hostingi dostarczają bardzo dużą przestrzeń do wykorzystania i racjonalne limity parametrów plików oraz transferu danych.

Ostateczną decyzję pewnie podejmę po zapoznaniu się z działaniem po rejestracji :)

TODO

Aktualizacja w przyszłości, wrażenia po rejestracji, zebranie wyników w ładną tabelkę, opisanie pluginów do obsługi zewnętrznych serwisów np takiego do flickr’a

C# Generowanie obiektów z zakresu - Enumerable.Range()

| Comments

Czasami zachodzi potrzeba utworzenia kolekcji liczb/obiektów na podstawie zdefiniowanego zakresu liczbowego.

Zamiast definiowania tablicy oraz używania pętli:

 

1
2
3
4
5
6
7
public static List<YearClass> LoadData()
{
  List<YearClass> years = new List<YearClass>();
  for (int i = 2000; i < 2015; i++)
    years.Add(new YearClass(i));
  return years;
}

można wykorzystać Enumerable.Range(int, int) link MSDN

1
2
3
4
public static List<YearClass> LoadData()
{
 return Enumerable.Range(2000, 15).Select(x => new YearClass(x)).ToList<YearClass>();
}

Prawda że ładniej? Może nie jest to itertools z Pythona ale robi to co trzeba.

Oczywiście metodę można wykorzystać do tworzenia różnego rodzaju ciągów:

1
2
3
4
5
6
7
8
9
10
11
// ciąg arytmetyczny
var seq1 = Enumerable.Range(0, 5).Select(x => x * 3 + 2).ToList();
// 2, 5, 8, 11, 14

// kwadraty
var seq2 = Enumerable.Range(1, 6).Select(x => x * x).ToList();
// 1, 4, 9, 16, 25, 36

// potęgi dwójki
var seq3 = Enumerable.Range(0, 10).Select(x => (int)Math.Pow(2, x)).ToList();
// 1, 2, 4, 8, 16, 32, 64, 128, 256, 512

również znakowych:

1
2
var percentStrArray = Enumerable.Range(0, 10).Select(x => (10 * x) + "%" ).ToArray();
// "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%"

Eksperymentalne pobieranie wszystkich małych liter ASCII wygląda następująco:

1
2
var smallASCII = Enumerable.Range((int)'a', (int)'z' - (int)'a' + 1).Select(x => (char)x).ToArray();
// 'a', 'b', 'c', ..., 'y', 'z'