SlideShare a Scribd company logo
Electron + WordPress =
Tomasz Dziuda
❤
Dlaczego?
Umiem w Electrony...
Źródło: https://getpublii.com
w WordPressy trochę też ...
coraz bardziej cenię swoją prywatność
Czego użyjemy?
Electron + WordPress = ❤
Przyśpieszony Kurs Electrona
Źródło: https://atom.io/
Źródło: https://desktop.github.com/
=
Przyśpieszony Kurs Electrona
=
Przyśpieszony Kurs Electrona
= +
Przyśpieszony Kurs Electrona
= + +
Przyśpieszony Kurs Electrona
Przyśpieszony Kurs Electrona cz.2
Wątek główny
Przyśpieszony Kurs Electrona cz.2
Wątek główny
API systemu
Przyśpieszony Kurs Electrona cz.2
...
Wątki renderujące
Wątek główny
API systemu
Przyśpieszony Kurs Electrona cz.2
...
Wątki renderujące
Wątek główny
API systemu
IPC IPC IPC
Przyśpieszony Kurs Electrona cz.3
Build cross platform desktop apps with
JavaScript, HTML, and CSS
Przyśpieszony Kurs Electrona cz.3
Build cross platform desktop apps with
JavaScript, HTML, and CSS
XSS
Przyśpieszony Kurs Electrona cz.4
Brak możliwości ukrycia 

kodu źródłowego
Dlaczego WordPress?
Gotowe REST API
{REST API}
GET POST PUT DELETE
Gotowy panel zarządzania
Źródło: https://www.contentful.com/
Połowa pracy za nami a
jeszcze nie zaczęliśmy ;-)
1 WordPress = wiele aplikacji
Dlaczego React?
JSX
<App>
<Header />
<Content />
<Footer />
<Sidebar />
</App>
Ekosystem
Używają go w Automattic ;-)
Źródło: https://developer.wordpress.com/calypso/
Przydatne narzędzia
...mi pomogły ;-)
Postman
Źródło: https://www.getpostman.com/
Devtron
Źródło: https://electron.atom.io/devtron/
Założenia
WP Notes
WP Notes
• Synchronizacja notatek po uruchomieniu/zalogowaniu
• Obsługa wielu użytkowników
• Edytor Markdown
• Możliwość dodawania, edycji i usuwania notatek
• Wyszukiwarka notatek
WP Notes
• Synchronizacja notatek po uruchomieniu/zalogowaniu
• Obsługa wielu użytkowników
• Edytor Markdown
• Możliwość dodawania, edycji i usuwania notatek
• Wyszukiwarka notatek
WP Notes
• Synchronizacja notatek po uruchomieniu/zalogowaniu
• Obsługa wielu użytkowników
• Edytor Markdown
• Możliwość dodawania, edycji i usuwania notatek
• Wyszukiwarka notatek
WP Notes
• Synchronizacja notatek po uruchomieniu/zalogowaniu
• Obsługa wielu użytkowników
• Edytor Markdown
• Możliwość dodawania, edycji i usuwania notatek
• Wyszukiwarka notatek
WP Notes
• Synchronizacja notatek po uruchomieniu/zalogowaniu
• Obsługa wielu użytkowników
• Edytor Markdown
• Możliwość dodawania, edycji i usuwania notatek
• Wyszukiwarka notatek
Implementacja
Składowe
Składowe
Odpowiednie endpointy REST API Plugin + CPT
Składowe
Odpowiednie endpointy REST API
Autoryzacja komunikacji
Plugin + CPT
JWT
Składowe
Odpowiednie endpointy REST API
Autoryzacja komunikacji
Aplikacja napisana w Electronie
Plugin + CPT
JWT
Electron + React
Endpointy i CPT
Plugin dla aplikacji
Plugin dla aplikacji
• Tworzy dedykowany Custom Post Type dla danych
• Tworzy potrzebne endpointy
• Modyfikuje istniejące endpointy
Plugin dla aplikacji
• Tworzy dedykowany Custom Post Type dla danych
• Tworzy potrzebne endpointy
• Modyfikuje istniejące endpointy
Plugin dla aplikacji
• Tworzy dedykowany Custom Post Type dla danych
• Tworzy potrzebne endpointy
• Modyfikuje istniejące endpointy
Dlaczego Custom Post Type?
Dlaczego Custom Post Type?
• Możemy na jednym WordPressie oprzeć kilka
aplikacji
• CPT mogą mieć własne endpointy
• Możemy te endpointy bez obaw dostosować do
swoich potrzeb
Dlaczego Custom Post Type?
• Możemy na jednym WordPressie oprzeć kilka
aplikacji
• CPT mogą mieć własne endpointy
• Możemy te endpointy bez obaw dostosować do
swoich potrzeb
Dlaczego Custom Post Type?
• Możemy na jednym WordPressie oprzeć kilka
aplikacji
• CPT mogą mieć własne endpointy
• Możemy te endpointy bez obaw dostosować do
swoich potrzeb
Endpointy
/wp-json/wp/v2/wp-notes
$args = array(
// ...
'show_in_rest' => true,
'rest_base' => 'wp-notes'
);
register_post_type( 'wp_notes', $args );
/wp-json/wp-notes/v1/notes?author=X
[
{
"id": 36,
"modificationDate": 1495370276000
},
...
{
"id": 13,
"modificationDate": 1495295589000
},
{
"id": 9,
"modificationDate": 1495368831000
}
]
https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
Posty prywatne są przydatne ;)
Pobieranie prywatnych postów
1) Musimy być autoryzowani jako twórca wpisu
2) W URL-u REST API dodajemy:
wp-json/wp/v2/wp-notes/?status=private
Pamiętajmy o strefach czasowych
CEST UTC
:-(
[
{
...
"date_gmt": "2017-05-21T12:37:56",
...
"modified_gmt": "2017-05-21T12:37:56",
...
}
]
new Date().getTime() // Zwraca czas UTC
Modyfikacje endpointów
function dziudek_wp_notes_use_raw_content( $data, $post, $request ) {
$data->data['content']['plaintext'] = $post->post_content;
$data->data['title']['plaintext'] = $post->post_title;
$data->data['modified_gmt'] =
strtotime($post->post_modified_gmt . ' UTC') * 1000;
return $data;
}
add_filter(
'rest_prepare_wp_notes',
'dziudek_wp_notes_use_raw_content',
10, 3
);
function dziudek_wp_notes_use_raw_content( $data, $post, $request ) {
$data->data['content']['plaintext'] = $post->post_content;
$data->data['title']['plaintext'] = $post->post_title;
$data->data['modified_gmt'] =
strtotime($post->post_modified_gmt . ' UTC') * 1000;
return $data;
}
add_filter(
'rest_prepare_wp_notes',
'dziudek_wp_notes_use_raw_content',
10, 3
);
function dziudek_wp_notes_use_raw_content( $data, $post, $request ) {
$data->data['content']['plaintext'] = $post->post_content;
$data->data['title']['plaintext'] = $post->post_title;
$data->data['modified_gmt'] =
strtotime($post->post_modified_gmt . ' UTC') * 1000;
return $data;
}
add_filter(
'rest_prepare_wp_notes',
'dziudek_wp_notes_use_raw_content',
10, 3
);
function dziudek_wp_notes_use_raw_content( $data, $post, $request ) {
$data->data['content']['plaintext'] = $post->post_content;
$data->data['title']['plaintext'] = $post->post_title;
$data->data['modified_gmt'] =
strtotime($post->post_modified_gmt . ' UTC') * 1000;
return $data;
}
add_filter(
'rest_prepare_wp_notes',
'dziudek_wp_notes_use_raw_content',
10, 3
);
Autoryzacja
Źródło: https://jwt.io/
Źródło: https://jwt.io/
Dane w tokenie NIE SĄ
szyfrowane
Przy komunikacji z REST API
korzystaj z połączenia SSL
Źródło: https://pl.wordpress.org/plugins/jwt-authentication-for-wp-rest-api/
Gdy JWT nie działają dodaj w .htaccess:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Czasem może też być potrzebne dodanie:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Autoryzacja - krok 1
Wysyłamy zapytaniem POST do endpointa /wp-json/jwt-auth/v1/token 

login i hasło użytkownika, którego chcemy autoryzować:
{
username: 'admin',
password: 'password'
}
Autoryzacja - krok 1
Wysyłamy zapytaniem POST do endpointa /wp-json/jwt-auth/v1/token 

login i hasło użytkownika, którego chcemy autoryzować:
{
username: 'admin',
password: 'password'
}
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ...",
"user_display_name": "admin",
"user_email": "admin@localhost.dev",
"user_nicename": "admin"
}
Gdy dane są poprawne otrzymujemy token i dane użytkownika:
Autoryzacja - krok 2
Do każdego zapytania wymagającego 

autoryzacji dodajemy nagłówek:
Authorization: Bearer WARTOŚĆ_TOKENA
Aplikacja
Struktura aplikacji
<App>
Struktura aplikacji
<App>
<Editor><Sidebar>
Struktura aplikacji
<App>
<Editor><Sidebar>
<Search>
<List>
<ReactMarkdown>
Struktura aplikacji
<App>
<Editor><Sidebar>
<Search>
<List>
<Item>
<ReactMarkdown>
<Item>
<Item>
Komunikacja pomiędzy
komponentami
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
class App extends React.Component
class App extends EventEmitter
Wzorzec obserwatora
class EventEmitter extends React.Component {
dispatch(event, data) { ... }
subscribe(event, callback) { ... }
unsubscribe(event, callback) { ... }
}
class App extends React.Component
class App extends EventEmitter
<App>
<Editor><Sidebar>
<Search>
<List>
<Item>
<ReactMarkdown>
<Item>
<Item>
<App>
<Editor><Sidebar>
<Search>
<List>
<Item>
<ReactMarkdown>
<Item>
<Item>
<App>
<Editor><Sidebar>
<Search>
<List>
<Item>
<ReactMarkdown>
<Item>
<Item>
subscribe('delete-item', callback)
<App>
<Editor><Sidebar>
<Search>
<List>
<Item>
<ReactMarkdown>
<Item>
<Item>
distpatch('delete-item', itemID)
Przechowywanie danych
Przechowywanie danych
user_ID_1
1.md
2.md
3.md
files.json
user_ID_2
4.md
5.md
files.json
Przechowywanie danych
user_ID_1
1.md
2.md
3.md
files.json
user_ID_2
4.md
5.md
files.json
[
{
id: 10,
title: "Post title",
modificationDate: 123049044
},
{
id: 10,
title: "Post title",
modificationDate: 123049044
},
...
]
Przechowywanie danych
files.jsonuser_ID_1
1.md
2.md
3.md
files.json
user_ID_2
4.md
5.md
files.json
Synchronizacja danych
Pobranie danych z endpointa synchronizacji
dziudek-wp-notes/1/
1.md
2.md
3.md
files.json
[{
"id": 1,
"modificationDate": 102
},

{
"id": 4,
"modificationDate": 105
}]
wp-json/wp-notes/v1/notes?author=1
Porównanie dat modyfikacji postów
[{
"id": 1,
"modificationDate": 102
},

{
"id": 4,
"modificationDate": 105
}]
[{
"id": 1,
"modificationDate": 101
},

{
"id": 2,
"modificationDate": 102
},
{
"id": 3,
"modificationDate": 103
}]
Lokalnie Zdalnie
Usunięcie nieistniejących plików
dziudek-wp-notes/1/
1.md
2.md
3.md
files.json
[{
"id": 1,
"modificationDate": 102
},

{
"id": 4,
"modificationDate": 105
}]
Pobranie i zaktualizowanie zmienionych wpisów
dziudek-wp-notes/1/
1.md
4.md
files.json
[{
"id": 1,
"modificationDate": 102
},

{
"id": 4,
"modificationDate": 105
}]
Zaktualizowanie pliku files.json
dziudek-wp-notes/1/
1.md
4.md
files.json
[{
"id": 1,
"modificationDate": 102
},

{
"id": 4,
"modificationDate": 105
}]
Pobieranie danych: node-fetch
Źródło: https://github.com/bitinn/node-fetch
Fetch API: https://developers.google.com/web/updates/2015/03/introduction-to-fetch
fetch('http://httpbin.org/post', {
method: 'POST', 

body: stream 

})
.then(res => res.json())
.then(json => console.log(json));
Edytor
Źródło: https://github.com/JedWatson/react-md-editor
render: function() {
return <Editor
value={this.state.code}
options={configObject}
onChange={this.updateCode} />
}
Źródło: https://codemirror.net/
Skróty klawiaturowe
import {remote} from 'electron';
const template = [{
label: "Edit",
submenu: [{
label: "Zapisz zmiany",
accelerator: "CmdOrCtrl+S",
click: function() {
// ..
}
]}
];
const menu = remote.Menu.buildFromTemplate(template);
remote.Menu.setApplicationMenu(menu);
DEMO
Electron + WordPress = ❤
Co dalej?
Offline mode
Generowanie PDF-ów
let win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file://file-to-load.html')
win.webContents.on('did-finish-load', () => {
win.webContents.printToPDF({}, (error, data) => {
fs.writeFile('/tmp/print.pdf', data, (error) => {
console.log('Write PDF successfully.')
});
});
});
Bezpieczne przechowywanie tokenów
node-keytar
Źródło: http://atom.github.io/node-keytar/
Natywny moduł do przechowywania haseł 

z użyciem Keychain (macOS), 

Credential Vault (Windows) 

i libsecret (Linux)
Do przejrzenia
• https://nodesource.com/blog/fifteen-essential-packages-to-get-started-with-electron/
• https://openfin.co/2016/11/04/openfin-slashes-electron-memory-78/
• http://blog.atom.io/2017/04/18/improving-startup-time.html
• https://openfin.co/2016/02/17/openfin-addressing-security-and-performance-challenges-with-
electron/
• https://github.com/pojala/electrino
• https://github.com/MacGapProject/MacGap1
Plugin: https://github.com/dziudek/WordCampPolska-WP-Notes-Plugin
Aplikacja: https://github.com/dziudek/WordCampPolska-WP-Notes-App
Artykuły warte uwagi:
Pytania?
tomasz@dziuda.com
@dziudek
http://dziudek.pl
http://www.slideshare.net/dziudek
Tomasz Dziuda

More Related Content

What's hot

REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp Warszawa
Tomasz Dziuda
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane koszta
Tomasz Dziuda
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
Tomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Tomasz Dziuda
 
Wielomilonowy ruch na wordpressie wordpress wordcamp gdynia 2016
Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016
Wielomilonowy ruch na wordpressie wordpress wordcamp gdynia 2016
Lukasz Wilczak
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET Wrocław
Tomasz Dziuda
 
Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
Tomasz Dziuda
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
Tomasz Dziuda
 
Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Statycznie czy dynamicznie?
Statycznie czy dynamicznie?
Tomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Tomasz Dziuda
 
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego blogaUnikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
Bartosz Romanowski
 
WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4
Tomasz Dziuda
 
Bezpieczna i szybka strona statyczna z funkcjonalnością Wordpressa. Czy to m...
Bezpieczna i szybka strona statyczna  z funkcjonalnością Wordpressa. Czy to m...Bezpieczna i szybka strona statyczna  z funkcjonalnością Wordpressa. Czy to m...
Bezpieczna i szybka strona statyczna z funkcjonalnością Wordpressa. Czy to m...
Lukasz Wilczak
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
Dawid Urbański
 
WordUp Wrocław #3 2015
WordUp Wrocław #3 2015WordUp Wrocław #3 2015
WordUp Wrocław #3 2015
Tomasz Dziuda
 
20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać
Wojciech Klocek
 
Gdzie są umiejscowione polskie wordpressy
Gdzie są umiejscowione polskie wordpressyGdzie są umiejscowione polskie wordpressy
Gdzie są umiejscowione polskie wordpressy
Arkadiusz Stęplowski
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
Wojciech Klocek
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
Tomasz Dziuda
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
Tomasz Dziuda
 

What's hot (20)

REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp Warszawa
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane koszta
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
Wielomilonowy ruch na wordpressie wordpress wordcamp gdynia 2016
Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016
Wielomilonowy ruch na wordpressie wordpress wordcamp gdynia 2016
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET Wrocław
 
Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
 
Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Statycznie czy dynamicznie?
Statycznie czy dynamicznie?
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
 
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego blogaUnikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
Unikaj falstartów - o czym warto pamiętać przed uruchomieniem nowego bloga
 
WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4
 
Bezpieczna i szybka strona statyczna z funkcjonalnością Wordpressa. Czy to m...
Bezpieczna i szybka strona statyczna  z funkcjonalnością Wordpressa. Czy to m...Bezpieczna i szybka strona statyczna  z funkcjonalnością Wordpressa. Czy to m...
Bezpieczna i szybka strona statyczna z funkcjonalnością Wordpressa. Czy to m...
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
WordUp Wrocław #3 2015
WordUp Wrocław #3 2015WordUp Wrocław #3 2015
WordUp Wrocław #3 2015
 
20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać
 
Gdzie są umiejscowione polskie wordpressy
Gdzie są umiejscowione polskie wordpressyGdzie są umiejscowione polskie wordpressy
Gdzie są umiejscowione polskie wordpressy
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 

Similar to Electron + WordPress = ❤

WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2
Tomasz Dziuda
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1
Kamil Fojuth
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
bm9ib2r5
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
Arkadiusz Stęplowski
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
Laravel Poland MeetUp
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
Mariusz Nowak
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Tomasz Kopacz
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
Wojciech Lichota
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
Tomasz Dziuda
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp Lublin
Tomasz Dziuda
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendium
Tomasz Dziuda
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
3camp
 
Android i REST
Android i RESTAndroid i REST
Android i REST
Roman Woźniak
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOAS
Mateusz Stępniak
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
Lukas Lesniewski
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
secman_pl
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?
Bartlomiej Zass
 
Developing native-like Windows application using JavaScript, SSE, eZ Platform...
Developing native-like Windows application using JavaScript, SSE, eZ Platform...Developing native-like Windows application using JavaScript, SSE, eZ Platform...
Developing native-like Windows application using JavaScript, SSE, eZ Platform...
Piotr Nalepa
 
Efektywnie i efektownie
Efektywnie i efektownieEfektywnie i efektownie
Efektywnie i efektownie
Kasia Świderska
 
WP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinarWP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinar
merlin9274
 

Similar to Electron + WordPress = ❤ (20)

WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp Lublin
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendium
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOAS
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?
 
Developing native-like Windows application using JavaScript, SSE, eZ Platform...
Developing native-like Windows application using JavaScript, SSE, eZ Platform...Developing native-like Windows application using JavaScript, SSE, eZ Platform...
Developing native-like Windows application using JavaScript, SSE, eZ Platform...
 
Efektywnie i efektownie
Efektywnie i efektownieEfektywnie i efektownie
Efektywnie i efektownie
 
WP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinarWP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinar
 

More from Tomasz Dziuda

Trello w praktyce
Trello w praktyceTrello w praktyce
Trello w praktyce
Tomasz Dziuda
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Tomasz Dziuda
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administrators
Tomasz Dziuda
 
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistomWordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
Tomasz Dziuda
 
Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?
Tomasz Dziuda
 
Jak tworzyć motywy przyjazne użytkownikom i programistom?
Jak tworzyć motywy przyjazne użytkownikom i programistom?Jak tworzyć motywy przyjazne użytkownikom i programistom?
Jak tworzyć motywy przyjazne użytkownikom i programistom?
Tomasz Dziuda
 
JSztuczki
JSztuczkiJSztuczki
JSztuczki
Tomasz Dziuda
 
Introduction to ECMAScript 2015
Introduction to ECMAScript 2015Introduction to ECMAScript 2015
Introduction to ECMAScript 2015
Tomasz Dziuda
 

More from Tomasz Dziuda (8)

Trello w praktyce
Trello w praktyceTrello w praktyce
Trello w praktyce
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administrators
 
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistomWordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
 
Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?
 
Jak tworzyć motywy przyjazne użytkownikom i programistom?
Jak tworzyć motywy przyjazne użytkownikom i programistom?Jak tworzyć motywy przyjazne użytkownikom i programistom?
Jak tworzyć motywy przyjazne użytkownikom i programistom?
 
JSztuczki
JSztuczkiJSztuczki
JSztuczki
 
Introduction to ECMAScript 2015
Introduction to ECMAScript 2015Introduction to ECMAScript 2015
Introduction to ECMAScript 2015
 

Electron + WordPress = ❤