poniedziałek, 29 maja 2017

[C++] Operators on binary numbers.

    int a = 123;
    a |= 1<<3; //set 1 on 3 bite
    a &= ~(1<<3); //set 0 on 3 bite
    if (a & (1<<3))//if 3 bite is 1?

niedziela, 30 kwietnia 2017

[C++]Static modifier

Local variables

Variables with static modifier are located in the same memory that global variables. Local static variables are not deleated. They remember their last values. Local static variables are initialized with 0 value.

#include <iostream>

int counter()
{
    static int a;
    a++;
    return a;
}

int main()
{
    std::cout<<counter()<<"\n"; // 1
    std::cout<<counter()<<"\n"; // 2
}

Static data members

Static data members of a class are created similarly like static local variables. Static data member is created earlier than first instance of this class. It doesn't matter from which object we can try to get acces to static data member, there is only one variable. Value is the same for all objects.

Also we can acces to static data member without any object. Static data member has to initialise like global variable.

#include <iostream>

class Foo
{
public:
    Foo ()
    {
        ++numberOfInstances;
    }
    static int numberOfInstances;
};

int Foo::numberOfInstances = 0;

int main()
{
    std::cout<<Foo::numberOfInstances<<"\n";// acces to member without object
    Foo a;
    std::cout<<a.numberOfInstances<<"\n";// 1
    Foo b, c;
    std::cout<<b.numberOfInstances<<"\n";// 3
}

Member functions

Static member functions are not associated with any objects. Static member functions have acces only to static data members. They cannot be: virtual, const and volatile.

#include <iostream>

class Foo
{
public:
    Foo ()
    {
        ++numberOfInstances;
    }

    static int getNumberOfInstances()
    {
        z = 4;// error, 'z' is not static!
        this-<numberOfInstances = 0;//error, cannot use 'this' in static functions
        return numberOfInstances;
    }

private:
    int z =3;
    static int numberOfInstances;
};

int Foo::numberOfInstances = 0;

int main()
{
    std::cout<<Foo::getNumberOfInstances()<<"\n";// acces to static function without object
    Foo a;
    std::cout<<a.getNumberOfInstances()<<"\n";// acces to static function with object
}

czwartek, 23 marca 2017

[C++]Virtual methods

#include <iostream>
const float pi = 3.14159;

class Shape
{
public:
    virtual float getArea()//"virtual" couses, compilator
    {                    //have to find out, on which object
        return -1.0;     //pointer points (base or derivative)
    }
};

class Square: public Shape
{
public:
    Square(const float side): a(side){}
    void pureVirtualMethod(){}
    float getArea()
    {
        return a * a;
    }

private:
    float a;
};

int main ()
{
    Shape *shape;
    Square square(3);
    shape = &square;
    std::cout<<square.getArea()<<std::endl;
    /*if in base class the getArea() method wasn't mark as virtual
    that following line will call method from base class(not derivative)*/
    std::cout<<shape->getArea()<<std::endl;
}

piątek, 3 marca 2017

[C++][Qt]How to sort QComboBox.

    combo->addItems(QStringList() << "B" << "C" << "A"); // "B","C","A"
    // for sorting you need the following 4 lines
    QSortFilterProxyModel* proxy = new QSortFilterProxyModel(combo);  // <--
    proxy->setSourceModel(combo->model());                            // <--
    // combo's current model must be reparented,
    // otherwise QComboBox::setModel() will delete it
    combo->model()->setParent(proxy);                                 // <--
    combo->setModel(proxy);                                           // <--
    // sort
    combo->model()->sort(0); // "A","B","C"

czwartek, 5 stycznia 2017

[C++] Symulator Lotto

Dzisiaj chciałbym zaprezentować malutki programik symulujący grę liczbową Lotto. Do napisania tego programiku zainspirowała mnie wczorajsza rozmowa z kolegą.

Program najpierw nas prosi o podanie sześciu liczb z przedziału 1..49. Program jest zabezpieczony przed tym, aby żadna liczba nie dublowała się oraz aby użytkownik nie podał liczby spoza przedziału 1..49. Program nie jest jeszcze odporny na wprowadzenie jakiegoś znaku przez użytkownika i potrafi się "wysypać".

Następnie "następuje zwolnienie blokady" i jest losowanych sześć liczb z zakresu 1..6. Oczywiście tu również sprawdzany jest warunek, czy liczby się nie dublują.

Program sprawdza ile liczb trafiliśmy, następnie pokazuje trafione liczby (usunąć wyświetlane zera) i jeśli coś zarobiliśmy to ta kwota jest dodawana do sumy naszych wygranych.

Program zlicza ilość losowań, po czym informuje ile wydaliśmy i ile wygraliśmy

Na koniec zostajemy zapytani o to czy wziąć udział w następnym losowaniu, czy zakończyć grę. Jeśli chcemy wziąć udział w następnym losowaniu, to kupon (liczby, które wytypowaliśmy) pozostaje ten sam, nie musimy ponownie wypełniać kuponu.

Tutaj jest do pobrania repozytorium: https://github.com/lukaszres/lotek oraz skompilowany plik na Windows: lotek.exe.

Screeny:

sobota, 17 grudnia 2016

[Java][Spring MVC] Najprostsza aplikacja webowa

Aby stworzyć najprostszą aplikację webową musimy utworzyć nowy projekt Mavena (wybieramy w oknie ProjectExplorera New/Other lub skrót klawiszowy Ctrl+N). W następnym okienku wybieramy Maven Project:

Klikamy Next i tutaj zaznaczamy Create a simple project (skip archetype selection)

Wybieramy Next i tutaj ustawiamy jak poniżej:

Teraz gdy klikniemy Finish Maven utworzy dla nas całą strukturę katalogów, a właściwie to nasze IDE (Eclipse, STS) za pomocą wtyczki Mavena tworzy hierarchię folderów. Powinna ci się pokazać w Project Explorer taka struktura:

Teraz musimy dodać zależności Springa MVC. W tym celu otwieramy plik pom.xml. Powinien się otworzyć w edytorze plików POM, a wygląda to mniej więcej tak:

Jeśli z jakichś powodów otworzył by się inny edytor należy kliknąć PPM na pliku pom.xml i wybrać Open with, a następnie Maven POM editor. Teraz mamy dwie możliwości edycji. Pierwsza wykorzystująca zakładkę Dependencies

Dodajemy nowe zależności:

Kolejnym krokiem jest ustawienie wersji Javy w pliku pom.xml. W tym celu w zakładce Overview w sekcji Properties wybieramy Create i wpisujemy:

Drugim sposobem na edycję pliku pom.xml, jest wykorzystanie zakładki pom.xml i ręczne wprowadzanie tekstu. Nasz plik pom.xml powinien wyglądać tak:


  4.0.0
  com.packt
  webstore
  0.0.1-SNAPSHOT
  war
  
   
    org.springframework
    spring-webmvc
    4.0.3.RELEASE
   
   
    javax.servlet
    jstl
    1.2
   
   
    javax.servlet
    javax.servlet-api
    3.1.0
    provided
   
  
  
   UTF-8
   1.7
   1.7
  

W katalogu src/main/webapp tworzymy folder WEB-INF/jsp, a następnie plik welcome.jsp o treści:


<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet"
 href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<title>Witaj</title>
</head>
<body>
 
  <div class="jumbotron">
   <div class="container">
    <h1>${greeting}</h1>
    <p>${tagline}</p>
   </div>
  </div>
 
</body>
</html> 

W Project Menager klikamy PPM na Java Resources/src/main/java i z menu kontekstowego wybieramy New/Package i tworzymy paczkę com.packt.webstore.controller.

W paczce com.packt.webstore.controller tworzymy nową klasę (PPM/New/Class) o nazwie HomeController wpisujemy do niego następującą treść:

package com.packt.webstore.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

 @RequestMapping("/")
 public String welcome(Model model) {
  model.addAttribute("greeting", "Witaj w naszym sklepie internetowym!");
  model.addAttribute("tagline", "Wyjątkowym i jedynym sklepie internetowym");
  
  return "welcome";
 }
}

Pozostało nam jeszcze utworzyć i skonfigurować serwlet przekazujący. Teraz stworzymy definicję serwleta. W katalogu src/main/webapp/WEB-INF/ utwórz plik web.xml o treści:


 
  DefaultServlet
  org.springframework.web.servlet.DispatcherServlet
 
 
  DefaultServlet
  /
 

Teraz pora na konfigurację serwleta. Tworzymy w tym samym katalogu plik o nazwie DefaultServlet-servlet.xml o treści:




 
 
 
 
  
  
 


Teraz mamy już wszystko, żeby wyświetlić naszą aplikację w przeglądarce.

Cała struktura oraz pliki wraz z treścią możecie pobrać na GitHubie pod adresem: https://github.com/lukaszres/webstore. O samym GitHubie opowiem wam później.

Podsumowując, aby aplikacja napisana z wykorzystaniem Springa zadziałała musimy utworzyć:

  • pom.xml (Project Object Model w tym pliku nakazujemy Mavenowi pobranie powiązanych ze Springiem plików JAR)
  • welcome.jsp (W tym pliku określamy, jak ma być wyświetlane, plik ten jest oparty na html.
  • controller.java (Kontroler jest klasą kontrolującą co ma być wyświetlane.
  • web.xml i servlet.xml (Definiowanie i konfiguracja serwletu przekazującego. Serwlet przekazujący analizuje adres URL podany w żądaniu i przekazuje kontrolerowi informację jakiej metody ma użyć do obsługi tego adresu URL).

encje

wtorek, 6 grudnia 2016

interscanner - skanuj swój ruch w sieci

Chciałbym zaprezentować tutaj mały programik, który powolutku sobie rozwijam. Co potrafi interscanner:
  • - skaner za pomocą komendy "netstat -e" pobiera informacje o ilości danych wysłanych i pobranych
  • - odczytuje dane z pliku dane.txt, a następnie wyświetla informację od kiedy program zaczął pomiar, ile system wysłał i odebrał danych z internetu
  • - zapisuje te dane do pliku dane.txt w tym samym katalogu, w którym znajduje się plik wykonawczy skanera
  • - jeśli pliku dane.txt jeszcze nie ma, to tworzy nowy plik

Program nie wymaga żadnej instalacji, wymaga jedynie zainstalowanego środowiska JRE.

Pobierz program

Jestem otwarty na wszelkie propozycje odnośnie tego programu, jeśli masz jakieś uwagi, zostaw komentarz na dole.

Jeśli podczas używania programu wystąpił jakiś błąd, to również proszę o kontakt ze mną w komentarzu, lub mailowo.

Screeny programu:

Do zrobienia:

  • formatowanie wyświetlania ilości danych (MB, albo chociaż dodanie spacji) aby łatwiej odczytać duże wartości.
  • zapisywanie danych podczas zamykania programu.
  • zresetowanie skanowania