Definicja i inicjalizacja struktury w C

Definicja typu:

typedef struct
{
	volatile uint8_t *port;
	uint8_t pin_bm;
	volatile uint16_t pulse_high;
	volatile uint16_t pulse_low;
} aparat;

Użycie:

aparat canon = {&PORTC, _BV(PC3),100,200};

Lub w postaci tablicy:

aparat aparaty[4] = {
		{&PORTC, _BV(PC3),10,100},
		{&PORTC, _BV(PC2),20,100},
		{&PORTC, _BV(PC1),30,100},
		{&PORTC, _BV(PC0),40,100}
	};

Źródło: http://stackoverflow.com/questions/2641473/initialize-static-array-of-structs-in-c

Optiboot bootloader i Atmega88 – wgranie, używanie, kompilacja.

TL;DR dla Atmega88(PA), F_CPU=16MHz upload baudrate: 115200:
1. Wgraj hex’a programatorem z Fusebitami: LOW = 0xFF; HIGH= 0xDF; EXT= 0xFC; optiboot_atmega88
2. Odpal upload.bat z paczki, wgrywając wcześniej do niej swój program jako firmware.hex, oraz ustawiając w pliku upload.bat odpowiedni port szeregowy optiboot_upload

Kompilacja Optiboot z konsoli w folderze z Arduino:

C:\Program Files (x86)\Arduino\Arduino ERW 1.0.5\hardware\arduino\bootloaders\optiboot
omake AVR_FREQ=16000000UL LED_START_FLASHES=0 atmega88

Kostka Rubika – kilka sekwencji

Notacja:
M – ruch środkową ścianką pomiędzy prawą i lewą tak jak ruch L
E – ruch środkową ścianką pomiędzy górną i dolną tak jak ruch D
S – ruch środkową ścianką pomiędzy przednią i tylną tak jak ruch F
X – obrót całą kostką w taki sam sposób jak ruch R
Y – obrót całą kostką w taki sam sposób jak ruch U
Z – obrót całą kostką w taki sam sposób jak ruch F

Superkostka 3x3x3 orientacja środków:

  • Środek u x 2: R’ L’ U’ R L U2 R’ L’ U’ R L U2:
    3x3x3_supercube_u2x
  •  Środek u’ i b’: (L’ R U L R’ U’) X 5
  • Środek u i b: (L’ R U’ L R’ U) X 5

Emokwiatek; 4 krzyże + biedronka:
3x3x3_emoflower

Szybkie scramble: L R U D L R 2U 2D

Wąż: U R B’ R’ D U’ B D’ F B’ L D L’ F’:
3x3x3_snake

Odwrócony róg: F L F U’ R U 2F 2L U’ L’ B D’ B’ 2L U

 

Kostka 5x5x5:

(Rr)’ F’ (Ll)’ (Rr) U (Rr) (U)’ (Ll) (Rr)’:
5x5x5_1

(Rr) U (Rr)’ U (Rr) U2 (Rr)’:
5x5x5_2

(Dd) R U R’ F R’ F’ R (Dd)’:
5x5x5_3

(Dd)’ L’ U’ L F’ L F L’ (Dd):
5x5x5_4

Błąd parzystości

Rr2 B2 U2 Ll U2 Rr’ U2 Rr U2 F2 Rr F2 Ll’ B2 Rr2

 

Grafiki wykonałem w programie sketchup z użyciem pliku: https://3dwarehouse.sketchup.com/model.html?id=b1d74f23627344317f01c23a4d8b8e38

 

Największa dotychczas poznana liczba pierwsza

W styczniu 2016 projekt GIMPS ( Great Internet Mersenne Prime Search) ogłosił odnalezienie rekordowej liczby pierwszej. Jak i poprzednie rekordy, ta także jest liczbą Mersena. W tej postaci prezentuje się tak:

274,207,281 − 1

Jeżeli chcemy poznać jak wygląda ona naprawdę w notacji dziesiętnej, należy ją obliczyć. Można to wykonać na przykład skryptem w języku Python:

file_ = open('biggest_prime.txt','w')
file_.write(str(pow(2,74207281)-1))
file_.close()

Użyłem języka Python, ponieważ ma on wbudowaną obsługę tzw. dużych liczb. Skrypt na moim komputerze wykonywał się kilka godzin, a więc nie jest to jakiś niesamowicie długi czas.

Wygenerowany plik tekstowy zawierający podaną liczbę umieszczam tutaj do pobrania:

biggest_prime (22 338 618B)

74HC595 w Eagle – opisy pinów „po ludzku”

Przedstawiam grafikę z etykietami pinów takimi, do jakich się przyzwyczaiłem z protokołu SPI:
74hc595

Opis tekstem:

  • 9 QH* – MISO
  • 10 SCL – /RESET (aktywowany stanem niskim; jeżeli nie używasz, podepnij do VCC)
  • 11 SCK – CLK
  • 12 RCK – LATCH /CS (zbocze na tym pinie powoduje przepisanie stanu rejestru na wyjścia)
  • 13 G – /OE (ustaw stan niski, jeżeli chcesz żeby wyjścia działały; można podpiąć na stałe do GND)
  • 14 SER – MOSI

 

Kilka wskazówek przy tworzeniu stron WWW

1. Dodaj znacznik

<meta name="viewport" content="width=device-width, initial-scale=1" />

aby przeglądarka wiedziała, jak wyświetlić stronę w urządzeniach mobilnych.
2. Dodaj sekcje w arkuszu stylów CSS, aby usprawnić wyświetlanie na mniejszych ekranach:

@media screen and (max-width: 800px) {
    #conrtainer 
            width: 100%;
        
}

3. Dodaj powiązanie ze stroną Google plus

<link href="https://plus.google.com/113761537454505774372" rel="publisher" />

4. Jeżeli aktualizujesz pliki css lub js, zaktualizuj linki do nich, aby przeglądarka pobrała je ponownie:

<script src="js/scripts.js?v=2" type="text/javascript"></script>

5. Użyj przekierowania adresu z „bez www” na „z www.” w swoim pliku .htaccess:

RewriteCond %{HTTP_HOST} !^www.twoja-strona.pl
RewriteRule ^(.*)$ http://www.twoja-strona.pl/$1 [R=301,L]

6. Jeżeli używasz mod_rewrite i jednocześnie weryfikacji w Google Webmasters za pomocą pliku .html, dodaj do .htaccess:

RewriteCond %{REQUEST_URI} !google
RewriteRule ^([a-z0-9\-]+)\.html$ index.php?s=$1 [L]

7. Nie zapomnij o znacznikach meta keywords, description itd.
8. Sprawdź pod tym adresem, czy Twoja strona jest wykrywana przez Google jako mobilna, jeżeli nie, to popraw ją (Pkt 1,2).
9. Dodaj ikonkę (favicon) do swojej strony:

<link rel="shortcut icon" href="favicon.ico" />
[code]
10. Sprawdź stronę walidatorem, aby mieć pewność że kod jest poprawny.
11. Stwórz plik robots.txt, który nie będzie blokował Google dostępu do plików CSS oraz JS. Pamiętaj przy tym, aby niechcący nie ujawnić wrażliwych danych np. takim wpisem:
[code]
User-agent: googlebot
Disallow: haselka.txt

12. Aby uniknąć listowania zawartości folderów przez Apache, czyli np. takiego widoku:
indexof
Wstawiaj do każdego folderu pusty plik o nazwie index.html
13. Stwórz mapę witryny w pliku sitemap.xml

Jak zrobić piksel konwersji / piksel śledzący?

Potrzebujemy hostingu z serwerem Apache (na innych mogą być potrzebne zmiany dot. pliku .htaccess) i PHP. PHP powinien mieć dostępną bibliotekę GD. Dodatkowo musimy móc korzystać z mod_rewrite.

1.Przygotowujemy obrazek wielkości 1x1px o nazwie 1.jpg.

2.Tworzymy katalog na serwerze i umieszczamy tam obrazek oraz następujące pliki:

-.htaccess – za pomoca mod_rewrite ukryje za wywołaniem obrazka image.jpg nasz kod w pliku index.php, opcjonalnie przekazując parametr w postaci liczby, np. image20.jpg wywoła nam skrypt index.php?i=20

RewriteEngine On
RewriteBase /t
RewriteRule ^image([0-9]+).jpg$ index.php?i=$1 [L]
RewriteRule ^image.jpg$ index.php [L]

-index.php – kod odpowiedzialny za odebranie i zapisanie do pliku statystyki.csv danych uzyskanych przez serwer dot. użytkownika, a następnie wysłaniu obrazka jpg.

//Data, id usera, IP, REFERER, user agent,host,remote_host
//';'.$_SERVER['REMOTE_HOST'].
$zapis = date('d.m.y H:i:s').';'.$_GET['i'].';'.$_SERVER['REMOTE_ADDR'].';'.$_SERVER['HTTP_REFERER'].';"'.$_SERVER['HTTP_USER_AGENT'].'";'.$_SERVER['HTTP_HOST'].';'.$_SERVER['REMOTE_HOST']."\n";
$plik = fopen("statystyki.csv","a");
fputs($plik, $zapis);
fclose($plik);
$image = imagecreatefromjpeg('1.jpg');
header('Content-Type: image/jpeg');
imagejpeg($image, null, 100);
?>

Umieszczamy także pusty plik tekstowy o nazwie statystyki.csv, z uprawnieniami do zapisu. W terminalu linuksowym wyglądałoby to tak:

touch statystyki.csv && chmod 777 statystyki.csv

Dodatkowo dla wygody przeglądania zapisów wejść można wrzucić taki skrypt:

<!doctype html>
<html lang="pl">
<head>
	<meta charset="UTF-8">
	<title>Podgląd statystyk wejścia</title>
	<style style="text/css">
		.hoverTable{
		width:100%; 
		border-collapse:collapse; 
		}
		.hoverTable td{ 
		padding:7px; border:#4e95f4 1px solid;
		}
		/* Define the default color for all the table rows */
		.hoverTable tr{
		background: #b8d1f3;
		}
		/* Define the hover highlight color for the table row */
		.hoverTable tr:hover {
		background-color: #ffff99;
		}
	</style>
</head>
<body>
<a href="statystyki.csv">Pobierz plik CSV</a>
	<?php
		echo "<table class=\"hoverTable\">\n\n";
		$f = fopen("statystyki.csv", "r");
		while (($line = fgetcsv($f,0,";")) !== false) {
			echo "<tr>";
			foreach ($line as $cell) {
                echo "<td>" . htmlspecialchars($cell) . "</td>";
			}
			echo "</tr>\n";
		}
		fclose($f);
	echo "\n</table>";?>
</body>
</html>

Całość w paczce zip można pobrać tutaj: piksel_konwersji.zip