Google Chrome optimization

open the page on the given link and set status to ENABLED

Multiple connections for downloaded file
chrome://flags/#enable-parallel-downloading

Forced memory saving function, unactive tab freezing
chrome://flags/#proactive-tab-freeze-and-discard

Another GPU hardware acceleration for whole pages (gpu status avaible on chrome://gpu/ page)
chrome://flags/#enable-gpu-rasterization

fully optimized chrome with GPU acceleration

Pixel redner optimization
chrome://flags/#enable-oop-rasterization

Write directly to the GPU memory
chrome://flags/#enable-zero-copy

Overrides the built-in software rendering list and enables GPU-acceleration on unsupported system configurations (force GPU mode)
chrome://flags/#ignore-gpu-blacklist

Open chrome://settings > System -> Enable GPU Acceleration

Enable HTTP/2

Why? because is faster than old HTTP/1 from 1997. You can chcek your website here and test it.

  • HTTP/2 is binary, instead of textual.
  • Fully multiplexed, sending multiple requests in parallel over a single TCP connection, asynch
  • It uses header compression
  • It allows servers to “push” responses proactively into client caches instead of waiting for a new request for each resource
  • It uses the new ALPN extension which allows for faster-encrypted connections since the application protocol is determined during the initial connection.
  • It reduces additional round trip times (RTT), making your website load faster without any optimization.
  • Domain sharding and asset concatenation is no longer needed with HTTP/2.

Prepare

phpver=php7.3
sudo apt update
sudo apt upgrade
sudo apt-get install $phpver-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf $phpver-fpm
sudo a2dismod $phpver
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod http2
sudo service apache2 restart

Add at bottom following line to /etc/apache2/apache2.conf:

Protocols h2 h2c http/1.1
H2Push on
H2PushPriority * after
H2PushPriority text/css before
H2PushPriority image/jpg after 32
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority application/javascript interleaved

Explanation: h2 is TLS-encrypted HTTP/2, h2c is cleartext HTTP/2, and http/1.1 is ordinary HTTP/1.1. H2Push on – force HTTP/2 usage. H2PushPriority – defines the priority handling of pushed responses based on the content-type of the response

Go to https://tools.keycdn.com/http2-test and test against your’s website

ePuapExtractor – odczytywanie pism z e-Paupap XML

Program służy po odczytania pism pobranych (także awaryjnie) z serwisu ePuap, które są w zapisane w formacie XML.  Po otwarciu programu wystarczy pobrany plik przeciągnąć na guzik w aplikacji, a ten przetworzy go i wydobędzie załączniki, które zapisze w osobnych folderach, natomiast treść pisma zostanie wyświetlona w odpowiednim miejscu. Wersja bez-instalacyjna, prywatna, ale myślę, że i wam się przyda. W przypadku problemów lub sugestii usprawniających jej działanie – piszcie w komentarzach.

wygląd aplikacji ePuapExtractor
Link do POBRANIA w rozwinięciu, kliknij tu

Raid-1 installation & recovery start

How to start with raid-1, by musznik.

  • * You neeed separate ext2 /boot partition – easest way is to add pendrive or third disk with that mount point
  •  /boot partition should be on stable ground, connect hdd to sata-1 input! to prevent from disk name change after failure.
  1. create software raid druing debian installation
  2. create exactly same partitions on /dev/sdc1 and /dev/sdd2 (disk one and two)
  3. assign proper mount point to raid partitions (/ for /dev/md0, /var for /dev/md1 etc)
  4. create small partition for /boot on external drive (additional hdd or usb)
  5. assign grub to partition where is /boot
  6. thats is..

ok? but my one disk fail! how to start with one disk in raid-1 on debian?

  1. grub cannot start system, but it still able to load linux kernel (ufff) from external /boot partition
  2. you can run system on one disk using below procedure
    1. stop all md* devices
      [code]mdadm –stop /dev/md*[/code]
    2. recreate raid-1
      [code]mdadm –assemble –scan[/code]
    3. we need “mkconf” command from /usr folder
      1. ​find partition where is /usr
      2. mount that folder
        [code]mkdir /tmp/help
        mount -t ext4 /dev/md0 /tmp/help[/code]
      3. backup current configuration and create new one
        [code]mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
        /tmp/help/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf[/code]
  3. prepare new disk
    1. create exactly same partition size as working hdd (you can use degradated disk with old data, which was removed for test?)
    2. using this command
      [code]sfdisk -d /dev/sda > sfdisk /dev/sdb[/code]
    3. associate new hdd with raid-1
      [code]mdadm –manage /dev/md0 –add /dev/sdb1
      mdadm –manage /dev/md1 –add /dev/sdb5
      mdadm –manage /dev/md2 –add /dev/sdb6[/code]
    4. and so one…
    5. watch rebuilding process
      [code]watch -n 1 cat /proc/mdstat[/code]

 

There might be problem with SWAP partition. First stop whole swap (swapoff) or just restart system.

Mikrotik AP-Client Bridge i problemy

Mikrotiki nie są aż tak user-freidnly dla użytkownika domowego jak np. ovislink 5470AP gdzie tryb AP-Client załatwia praktycznie nam wszystko. Oprogramowanie Gargoyle w trybie WDS też nie jest praktycznie kompatybilne z WDS routerboard, co w moim przypadku przy próbie wymiany danych kończyło się kernel warningiem w Gargoylowym routerze. Pozostała nam zabawa tylko z opcjami STATION naszego klienta MT.

Czytaj dalej Mikrotik AP-Client Bridge i problemy

Atmega328 via Arduino IDE 1.5.x/1.0.x

Jak dobrze wiecie, albo i nie wiecie, nie musicie zakupywać “całych zestawów Arduino Uno,mini etc”, a sami zakupić scalak Atmega328p za kilka złoty, wgrać bootloader Arduino i cieszyć się półprawnym arduino.

Czego potrzebujemy?

Konfiguracja dotyczy pracy układu z zewnetrzny kwarcem 16Mhz!

  1. Atmega328 (np. od Seguro, tak obsługują paczkomaty :) )
  2. Programator USBasp (np. od electropark, brak paczkomatów :()
  3. Opcjonalnie konwerter USB<->UART (electropark) – jeżeli zamierzamy wygrywać soft klasycznie, czyli przez RX/TX via bootloader arduino, co nie jest konieczne i zależne od poniższej konfiguracji
  4. Modyfikacja pliku C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt

Dopisujemy na końcu pliku

Czytaj dalej Atmega328 via Arduino IDE 1.5.x/1.0.x

Atmega/Arduino – odczyt AVC

Jak odczytać własny poziom napięcia przez atmegę? w cale nie tak łatwo. Posiadam Atmegę32 z bootloaderem Arduino (liby są dostępne tutaj dla chcących dokonać takiej modyfikacji – wystarczy zwykły programator np. USBasp, aplikacja Arduino GUI) chciałbym aby mikroprocesor sam zmierzył napięcie jakie jest mu dostarczane – dotyczy to w większości projektów z zasilaniem bateryjnym, solarnym i każdym innym budzącym wątpliwości (bądź nie?). W pierwszej kolejności polecam bezwzględnie ujarzmić atmegę i jej napięcia – ja to zrobić dowiemy się tutaj, szczególnie zalecam zastosować się do wersji 2 tzw. “Podłączanie zalecane”.  Po co nam pomiar napięcia? a no po że gdy zachcemy np wykorzystać przetwornik analogowo-cyfrowy do mierzenia np. przepływu prądu to niezbędnym będzie nam mieć właściwe napięcie odniesienia, które domyślnie wynosi 5.0v. A więc, gdy dostarczamy prądu np. 5.1v i przetwarzamy to przez 5.0 – to otrzymamy błędne wyniki. Takie coś przyda nam się gdy zechcemy zasilać atmegę solarnie z zapasem akumulatorów z opcją rejestrowania przepływu prądu i stanu napięć (więcej o tym w przyszłych artykułach).  Poniższy kod służy jako gotowiec, wystarczy go wkleić, wgrać, a do pinu PA1 podłączyć + z szyny zasilającej samą atmegę. Strojenie: polecam spojrzeć na parametr 1238816L –  w idealnych warunkach powinien wynosić 123500L, niestety, z winy low-endu, komponentów lub innych niepożądanych czynników należy dobrać go tak by wskazywał poprawne wartości (w porównaniu z jakimś niezależnym miernikiem).

//pin napięcia - PA1 (ADC1), drugi pin od góry z prawej
void setup(void)
{
	Serial.begin(4800);
	delay(2000);
}

void loop(void)
{
	Serial.print("Input Voltage =  ");
	float AvrVcc = readVcc();
	Serial.println(AvrVcc);  //mV
}

long readVcc() {
	ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
	delay(10);
	ADCSRA |= _BV(ADSC);
	while (bit_is_set(ADCSRA,ADSC));
	uint8_t low  = ADCL;
	uint8_t high = ADCH;
	long result = (long)(high<<8) | low;
	result = 1238816L / result; // Calculate Vcc (in mV); 1125300~ = 1.1*1023*1000
	return result;
}

Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć

Trzeba przyznać, że Java nie najlepiej radzi sobie z zarządzaniem pamięcią, a już całkowicie kuleje w aplikacjach typowo interaktywnych, natomiast Ci co korzystają z takich modów jak FTB lub po prostu mają 100 dodatków – wymagania wzrastają o całe GB ramu! a to powoduje ze Garbage Collector nie wyrabia. Poniższy artykuł postara się namówić Javę do lepszego zarządzania sobie z pamięcią i śmieciami w niej. Skupiamy się na optymalizacji pod “Low Pause” i lepszym GC, domyślnie Java skonfigurowana jest pod przepustowość. Zobaczmy więc czy optymalizacja minecraft lub innej aplikacji przyniesie skutek.

Czytaj dalej Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć