Pokazywanie postów oznaczonych etykietą it. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą it. Pokaż wszystkie posty

sobota, 30 września 2017

Trikatuka moved

Due to Openshift2 sunset, I had to move Trikatuka to the other server. Unfortunately the url has changed too.
Now its:

http://www.trikatuka.aknakn.eu/

http://trikatuka-aknakn.rhcloud.com/ will be no longer available.

sobota, 20 sierpnia 2016

Usuwanie wielu adresów z wyników wyszukiwań Google

Jedna ze stron na wordpressie, którą kiedyś komuś postawiłem, padła ofiarom ataku, co poskutkowało wysypem urli do chińskich stron w wynikach wyszukiwania google. Oczywiście nie jest to coś, co chciałbym, żeby było tam widoczne, więc coś trzeba było z tym zrobić.

Wyczyściłem wordpressa, ustawiłem przekierowania na status HTTP 410, dla tych wadliwych linków (na szczęście dało się to zrobić wyrażeniem regularnym w .htaccess), ale linki dalej wisiały i wisiały. Swoją drogą, te 410 chyba tak czy siak dobrze ustawić, nawet jeśli będziemy usuwać urle.

Ponieważ jest tego dobre kilka stron, to nie bardzo chciało mi się usuwać to ręcznie i pojedynczo przez narzędzie w Google Search Console. Niestety Google nie udostępnia nam możliwości wpisania wielu adresów i pozbycia się ich jednym kliknięciem i trzeba wpisywać link za linkiem. Na szczęście, ktoś napisał wtyczkę do Chrome'a, która zrobi to za nas. Jest dostępna w tym projekcie na githubie: https://github.com/noitcudni/google-webmaster-tools-bulk-url-removal Trzeba tylko przygotować plik tekstowy z adresami, które chcemy usunąć.

Opisana na githubie instrukcja instalacji narzędzia jest ok (czyli włączamy tryb programisty w chrome://extensions/, a potem wgrywamy pobrane i wypakowane pliki wtyczki), natomiast link z instrukcji do opisu tego jak zebrać wszystkie linki do swojej strony z google nie działa, dlatego opiszę tutaj jak to zrobić. Może komuś się przyda.

1. Zaczynamy od dodania do zakładek tego bookmarkleta: http://www.onlinesales.co.uk/tools/tools/bookmarklet-serps.php - czyli przesuwamy ten zielony przycisk na pasek zakładek.

Bookmarklety to nic innego jak kod javascript odpalony z paska adresu. Tutaj mirror1 i mirror2 kodu tej zakładki, gdyby tamta strona się zmieniła. Trzeba pamiętać, że google czasem zmienia sposób wyświetlania wyników, wiec nie wiadomo, czy w momencie w którym czytasz ten wpis, te bookmarklety jeszcze działają. Jeśli nie, to pozostaje Ci znaleźć jakąś alternatywną metodę.

2. Wpisujemy w google site:<adres strony>, czyli np site:wp.pl i dostajemy wszystkie wyniki związane z nasza stroną


 

3. Teraz trzeba kliknąć bookmarklet'a i otworzy nam się nowa karta, na której będzie lista linków do naszej witryny. Niestety operacje trzeba powtórzyć na każdej stronie z wynikami w google. Linki wrzucamy do pliku tekstowego (oczywiście tylko te, których chcemy się pozbyć), który później wgramy do search console. 




4. Dalej postępujemy zgodnie z instrukcją na githubie. To znaczy przechodzimy do Google Search Console > Indeks Google > Usuń adresy url. Dzięki włączonej wtyczce z githuba pojawia się lista wybieralna i przycisk do wgrania przygotowanego pliku z urlami.


5. Po w graniu pliku trzeba poczekać, aż google to sobie przetworzy. Strona odświeży się tyle razy ile było linii w pliku. I to wszystko, co trzeba zrobić.


U mnie w przeciągu 24h niechciane linki zniknęły z wyników wyszukiwania w Google.

środa, 11 maja 2016

RaspberryPI Python service - exit nicely with GPIO.cleanup()

I have my python script used as a linux service. It is started by start-stop-daemon from /etc/init.d/myservice script. Because my program uses GPIO, I was thinking how to call GPIO.cleanup() when I stop my service with sudo service myservice stop command.

The solution I've found is to register signals handlers. It looks like:
 
import signal
handle_exit(signal_number,stack):
    GPIO.cleanup()
    exit()

signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)

You may find great explanation of signals here, but what you need to know is that SIGTERM is sent for example when you simply kill your program with kill command (without -9) and SIGINT is a result of pressing Ctrl+C. The handler is called with two arguments: the signal number and the current stack frame (but it doesn't matter in this example - you only have to define them as arguments to avoid the error "TypeError: handle_exit() takes no arguments (2 given)")

If you don't know how to create script starting your python app when system starts up, you should read this tutorial: http://blog.scphillips.com/posts/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/

To make this tutorial's code work with your signal handlers you should change the following line:
start-stop-daemon --stop --pidfile $PIDFILE --retry 10  
to
start-stop-daemon --stop --pidfile $PIDFILE --retry TERM/30/KILL/5 --oknodo --user $DAEMON_USER  

This will send TERM signal when you type sudo service myservice stop, and because of registered handlers, your app will exit nicely.


This is a full code of my script placed in /etc/init.d/
#!/bin/sh

### BEGIN INIT INFO
# Provides:          startgate
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Put a short description of the service here
# Description:       Put a long description of the service here
### END INIT INFO

# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/home/pi/bmxstartgate13-02-2016/bmxstartgate
DAEMON=$DIR/startgate.py
DAEMON_NAME=startgate

# Add any command line options for your daemon here
DAEMON_OPTS=""

# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=pi

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$DAEMON_NAME.pid

. /lib/lsb/init-functions

do_start () {
    log_daemon_msg "Starting system $DAEMON_NAME daemon"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
    log_end_msg $?
}
do_stop () {
    log_daemon_msg "Stopping system $DAEMON_NAME daemon"
    #start-stop-daemon --stop --pidfile $PIDFILE --retry 10
    start-stop-daemon --stop --pidfile $PIDFILE --retry TERM/30/KILL/5 --oknodo --user $DAEMON_USER
    log_end_msg $?
}

case "$1" in

    start|stop)
        do_${1}
        ;;

    restart|reload|force-reload)
        do_stop
        do_start
        ;;

    status)
        status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
        ;;

    *)
        echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
        exit 1
        ;;

esac
exit 0


I've found also another solution with using atexit (it is mentioned here in comments) but for me it worked only on ctrl+c.
Solution I've described in this post is based on this topic: https://www.raspberrypi.org/forums/viewtopic.php?t=63051


Feel free to ask if you have any questions :)

środa, 23 marca 2016

Trikatuka 2

Trikatuka czyli moja aplikacja do przenoszenia playlist i utworów w Spotify dostała nowe życie. Poprzednia wersja miała ponad 240 pobrań, co mnie cieszy - bo znaczy, że ktoś używał. Szkoda tylko, że feedback słaby, no ale nic na to nie poradzę. W każdym bądź razie poprzednia wersja była tak na prawdę taka sobie. Robiła to co miała robić, ale była nieco toporna. No i trzeba było ją pobierać i odpalać na kompie.

Na szczęście w najnowszej wersji pozbyłem się tych problemów. Nic już nie trzeba pobierać, a aplikacja wg mnie działa płynniej i lepiej. Wszystko dlatego, że napisałem ją w angularze, którego jako tako znam. Szkoda tylko, że aplikacja potrzebuje serwera http z powodu flow logowania w spotify. Z przyjemnością wyeliminowałbym node.js z tej układanki i zostawił tylko apke w angularze. A tak, to jakaś część logiki musiała być napisana po stronie serwera. Nie chciałem przechowywać żadnych informacji o użytkownikach w bazie, więc dane autoryzacji otrzymane w callbacku ze spotify, są przesyłane do aplikacji klienckiej socketami i tam trzymane w przeglądarkowym session storage, więc generalnie od momentu zalogowania, wszystko dzieje się już po stronie klienta.

Aplikację hostuje na https://www.openshift.com/. Ekstra sprawa! Aplikacja jest malutka, ja nie mam żadnego wykupionego hostingu, a openshift oferuje darmowe konto, które w zupełności wystarczy do hostingu tej aplikacji. Na Heroku, jest podobnie, ale tam aplikacja wyłączała sie przy bezczynności. Tutaj tego nie zauważyłem więc chyba openshift jest trochę lepszy :)

W samej aplikacji niewiele się zmieniło. Dalej robi to co mam robić, czyli przenosi playlisty i przenosi utwory. W planach mam jeszcze subskrybowanie artystów, których subskrybowaliśmy na poprzednim koncie, ale to dorobię w wolnej chwili.

Tak to wygląda. Użyty framework css to uikit


Aplikacja dostępna tutaj: http://trikatuka-aknakn.rhcloud.com/
Instrukcja (jeśli komuś potrzebna) jest tutaj: http://aknowakowski.blogspot.com/p/trikatuka-spotify-migration-tool.html
A projekt na githubie tu: https://github.com/aartek/trikatuka2

Czekam na wszelkie uwagi!


wtorek, 15 grudnia 2015

Folder "Pobrane", powolne ładowanie - Rozwiązanie problemu

Ostatnio doświadczyłem problemu z powolnym ładowaniem folderu "Pobrane". Mimo, że folder mam na dysku SSD, jego zawartość wyświetlała się po upływie dobrych kilku sekund. Było to na tyle uciążliwe, że zaczęło mnie męczyć, więc konieczne stało się znalezienie rozwiązania.

Na szczęście okazuje się, że rozwiązanie jest bardzo proste. Folder "pobrane" ładuje się długo, wtedy kiedy Windows myśli, że to folder z obrazkami. Żeby to zmienić wystarczy wejść we właściwości folderu, kliknąć zakładkę "Dostosowywanie" i z listy rozwijalnej "Optymalizuj ten folder dla:" wybrać "Elementy ogólne". W moim przypadku pomogło i folder nareszcie działa normalnie.


http://i.imgur.com/xTlpjPn.png

czwartek, 22 października 2015

Hibernate 5 + Maven + MySQL - "Hello World" app in Java

This is short example of hello world app in java with hibernate 5 and maven. It doesn't describe the details, but might be useful if you just want to see the working code. It shows example maven's pom.xml, hibernate configuration file and code for creating one table with one record.

1. Creating project with Maven

in your console run command:
mvn archetype:generate -DgroupId="com.blogspot.aknowakowski
ski" -DartifactId="Hibernate-Hello-World" -DarchetypeArtifactId="maven-archetype-quickstart"


(you can confirm suggested 1.0-SNAPSHOT version if maven asks)

Edit pom.xml and add dependencies for hibernate and for mysql connector:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.0.2.Final</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.37</version>
</dependency>

Add exec plugin which will make running app easier:
<build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <mainClass>com.blogspot.aknowakowski.App</mainClass>
                    <cleanupDaemonThreads>false</cleanupDaemonThreads>
                </configuration>
            </plugin>
        </plugins>
    </build>
Take a look at line <mainClass>com.blogspot.aknowakowski.App</mainClass>. You need to specify there class with your main method.

Full example of pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.blogspot.aknowakowski</groupId>
    <artifactId>Hibernate-Hello-World</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>IOR-Testy</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <mainClass>com.blogspot.aknowakowski.App</mainClass>
                    <cleanupDaemonThreads>false</cleanupDaemonThreads>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2. Coding

Create entity class:

package com.blogspot.aknowakowski;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="task")
public class Task {
    @Id
    @Column(name="task_id")
    Long id;

    @Column(name="name")
    String name;

    public Task(Long id, String name, String description) {
        this.id = id;
        this.name = name;
        this.description = description;
    }

    public Task() {
    }

    @Column(name="description")
    String description;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

Create hibernate configuration file hibernate.cfg.xml and put it to src/main/resources directory. (Because maven copies files from main/resources to target)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate-hello</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <!-- DB schema will be updated if needed -->
        <property name="hbm2ddl.auto">update</property>
        <property name="show_sql">false</property>
        <property name="format_sql">false</property>

        <mapping class="com.blogspot.aknowakowski.Task"></mapping>


    </session-factory>
</hibernate-configuration>

Don't forget to add mapping in configuration file (<mapping class="com.blogspot.aknowakowski.Task"></mapping>)


Create class with application main method:

package com.blogspot.aknowakowski;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class App 
{
    public static void main( String[] args )
    {
        SessionFactory sessionFactory;
        sessionFactory = new Configuration()
                .configure() // configures settings from hibernate.cfg.xml
                .buildSessionFactory();

        Session session = sessionFactory.openSession();

        Transaction tx = session.beginTransaction();
        Task task = new Task();
        task.setId(new Long(1));
        task.setName("Hello world task");
        task.setDescription("Hello world task description");
        session.save(task);
        tx.commit();
        session.close();
    }
}

3. Running app

Run commands
mvn package
mvn exec:java

first command will build your app,
second command will run your main method
(you can combine them - mvn package exec:java)

If everything is ok you should see added table and record in the database:

czwartek, 1 października 2015

Finder 43.41 Eagle schematic + footprint

There are some "Finder" relays in Cadsoft Eagle 7.3 by default, but there is missing Finder 43.41 symbol + footprint, so I had to do it by myself.




You can download it from my github repo. It is available in file akn-finder.lbr

It is my first ever element in Eagle so feel free to improve it if you know how.
 

sobota, 26 września 2015

Trikatuka 0.3

Zaktualizowałem Trikatukę. Od teraz można przenosić także piosenki z kolekcji "Twoja muzyka/Utwory" między naszymi kontami w Spotify.

Żeby to zrobić wystarczy zaznaczyć "ptaszka" nad listą playlist. Program zawsze skopiuje wszystkie utwory. Uwaga, żeby nie zrobić tego dwa razy, bo programik nie patrzy na duplikaty, więc zrobi się bajzel ;)

Poprawiłem również followowanie współtworzonych playlist, bo nie działało jeśli lista była utworzona przez kogoś innego niż poprzedni użytkownik.

Następną wersję być może przerobię na Angulara, więc powinno trochę lepiej działać.

Trikatuka 0.3 do pobrania tutaj.

poniedziałek, 29 czerwca 2015

Trikatuka - aplikacja do migracji playlist Spotify

Ten post dotyczy starej wersji aplikacji. Nowa dostępna jest tu:
http://aknowakowski.blogspot.com/p/trikatuka-spotify-migration-tool.html


Przez ostatnie kilka dni pisałem proste narzędzie do migracji playlist w Spotify z jednego konta na drugie. Zrobiłem działającą wersję, nazwałem ją Trikatuka, wrzuciłem na githuba i postanowiłem się podzielić :)

Trikatuka - screenshot


Początkowo miał to być prosty skrypt który zrobiłby wszystko od początku do końca, ale z powodu ograniczeń API Spotify zwykłym konsolowym skryptem nie jest. Tzn może nie tyle z powodu ograniczeń co po prostu ze sposobu działania api. Ponieważ api spotify potrzebuje do autentykacji zwrotnego urla, to i tak musiałem postawić jakiś serwer, a jak już postawiłem to dorobiłem interfejs i ostatecznie wyszła z tego mini web aplikacja.

Aplikację napisałem w Pythonie, z którym nie mam zbyt wiele doświadczenia. Odczucia jak zwykle po pracy z Pythonem mam mieszane. Niby wszystko fajnie ale przez to, że nie do końca znam różne triki i właściwości, cały czas towarzyszy mi poczucie, że można lepiej. Ciągle nie wiem czy lubię Pythona. Mam wrażenie, że jest ekstra do szybkich małych skryptów, ale do większych rzeczy już tak przyjazny nie jest. Dobrze, że jest tak popularny, więc w razie problemów, szybko można znaleźć rozwiązanie.

Do obsługi requestów użyłem lekkiej biblioteki "web.py". Dość łatwa w obsłudze, wspiera template'y i ma różne przydatne funkcjonalności, ale niestety ma średnio czytelną dokumentację. Dla takiej małej aplikacji chyba nadaje się lepiej niż np. Django, którego co prawda nigdy nie używałem, ale takie mam przeczucie :P Świadomie nie użyłem Angulara (a mam z nim już trochę doświadczenia), żeby spróbować czegoś nowego. A w zasadzie starego, bo nie dołączyłem nawet jQuery, więc w kodzie jest czysty JavaScript :) Na szczęście JavaScriptu jest bardzo mało, więc nie było to jakoś mocno uciążliwe. Żeby to wszystko jako tako wyglądało użyłem UIkita - bo lubię, go bardziej niż Bootstrapa.
Myślę jednak, że następnym razem jak będę pisał coś podobnego to chyba zdecyduję się na pisanie w Groovy'm, do części serwerowej użyje dość młodego projektu Ratpack no i jednak nie zrezygnuję z Angulara ;) Ale co będzie następne i kiedy to będzie, nie mam pojęcia.

Co do samej aplikacji, to generalnie działa na tyle, że można używać jej do tego do czego została stworzona. Na moich playlistach działała tak jakbym tego oczekiwał. Współtworzone playlisty zaczyna obserwować, a publiczne i prywatne kopiuje. Także jeśli komuś jest potrzebne narzędzia do przenoszenia playlist w spotify między dwoma różnymi kontami, to myślę, że ten programik będzie przydatny i pomoże zaoszczędzić trochę czasu. Gdyby coś nie działało to proszę o zgłoszenie na githubie lub tweeta. Jeśli ktoś ma jakieś pomysły to też czekam.

Aplikacja i instrukcja użycia jest tutaj: http://aknowakowski.blogspot.com/p/trikatuka.html

Pozdrawiam

czwartek, 21 maja 2015

Adapter Wifi Ralink i Raspberry Pi

Kupiłem kilka dni temu nano adapter wifi na usb z aliexpressu - po prostu jakiś najtańszy chiński noname (na allegro sprzedawane są po ok. 15zł). Zapłaciłem niecałe 2 dolary z wysyłką i o dziwo paczka dotarła w 7 dni. Zakupu dokonałem z myślą włożenia modułu do mojego Raspberry Pi 2 B, po to żeby generalnie ułatwić sobie z nim pracę.

Nano adapter wifi który otrzymałem. Wyświetla się jako Ralink


O ile moduł zadziałał bez problemu z Windowsem 8, o tyle w przypadku Raspbiana już tak kolorowo nie było. Problem polega na tym, że nie ma sterowników pod linuxa dla tych najtańszych "dongli". Ale trochę googlowania, pytanie na raspberrypi stackexchange i problem udało się rozwiązać.

Po kolei:

polecenie lsusb wyswietliło moje urządzenie jako 148f:7601, więc zacząłem na jego temat szukać informacji. Na githubie jest projekt ze sterownikami (https://github.com/porjo/mt760) i instrukcją jak je zainstalować, ale w moim przypadku się to nie udawało bo po wywołaniu polecenia make 
dostawałem błąd :
/lib/modules/3.18.7-v7+/build No such file or directory.

Nie jestem mistrzem linuxa, więc nie bardzo wiedziałem co z tym zrobić, pewnie istnieje kilka sposobów żeby to naprawić (chyba coś z linux-update-headers kompilacją modułów itp), ale w moim przypadku pomogło po prostu użycie:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install rpi-update
sudo rpi-update

Po wykonaniu tych operacji mój kernel został zaktualizowany do aktualnie najnowszej wersji 3.18.13-v7 (wersję kernela można sprawdzić wywołując polecenie uname -a).

Po tym być może udałoby się już wykonać instrukcje z wyżej wspomnianego projektu na githubie ale znacznie łatwiej było skorzystać ze skryptu przygotowanego przez MrEngman'a. Są to skompilowane już sterowniki do dongla i skrypt który je dla nas zainstaluje. Procedura jest bardzo prosta:

Na początek sprawdzamy wersję kernela przy pomocy uname -a i notujemy ją (u mnie było to na przykład 3.18.7-v7 #785). W niektórych wersjach rPi nie ma tego przyrostka "-v7". Sterowniki możeby pobrać poleceniem wget a url to

https://dl.dropboxusercontent.com/u/80256631/mt7601-<wersja kernela>.tar.gz

W moim przypadku było to więc:

https://dl.dropboxusercontent.com/u/80256631/mt7601-3.18.13-v7-785.tar.gz 

Jeżeli nie ma przyrostka v7, to się go nie dodaje. Jeżeli uname -a pokazał np 3.18.11 #782, to url będzie:
https://dl.dropboxusercontent.com/u/80256631/mt7601-3.18.11-782.tar.gz (bez "-v7" i z 782 zamiast 785). Jeżeli pobierze się złą wersję, to sterownik po prostu nie zadziała.

Czyli pobieramy, wypakowujemy i uruchamiamy skrypt ./install.sh:
wget https://dl.dropboxusercontent.com/u/80256631/mt7601-3.18.13-785.tar.gz
tar xzf mt7601-3.18.13-785.tar.gz
./install.sh
Potem restart komputera i powinno działać :)
U mnie działa. Teraz chciałbym zrobić przy jego pomocy Access Point żeby łączyć się przez ssh z telefonu, ale wiem czy z tym dinksem się to uda. Pozdrawiam.




Tutaj link do pytania, w którym gość pomógł mi rozwiązać ten problem: http://raspberrypi.stackexchange.com/questions/31706/error-lib-modules-3-18-7-v7-build-no-such-file-or-directory-when-compiling-d

A tutaj link do tematu w którym udziela się MrEngman i pomaga jeśli są problemy ze skryptem: https://www.raspberrypi.org/forums/viewtopic.php?p=760070#p760070 (poprzednie i kolejne posty)