Połączenie z MySQL w Windows Phone 8.1

Połączenie z MySQL w Windows Phone 8.1
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Witam serdecznie,

Chciałem przetestować sobie dostęp do bazy danych w aplikacjach pod Windows Phone. Wiem, że nie można odwoływać się bezpośrednio do bazy danych, dlatego do tego celu utworzyłem próbną usługę sieciową za pomocą WCFa. Poniżej kod:

Kopiuj
public class Service1 : IService1
{

    public string PobierzHandlowca()
    {
        String sql = "SELECT nazwa FROM Handlowcy WHERE id_handlowcy=1";
        MySqlConnection connection = new MySqlConnection("Server=localhost; Database=msoh; Uid=root; Pwd=;");

        try
        {
            connection.Open();
            MySqlCommand command = new MySqlCommand(sql, connection);
            MySqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                return (string)reader["nazwa"];
            }
        }
        catch { }
        finally   
        {
            connection.Dispose();
        }

        return null;
    }
}

Następnie utworzyłem drugi projekt (Windows Phone Silverlight Application) i dodałem do niego service reference, którym była oczywiście moja wcześniej utworzona testowa usługa. Ma to działać tak, że po naciśnięciu przycisku ma się pobrać z bazy i wyświetlić nazwa handlowca zgodnie z podaną na sztywno kwerendą. Poniżej kod:

Kopiuj
public partial class MainPage : PhoneApplicationPage
{
    ServiceReference1.Service1Client proxy;


    public MainPage()
    {
        InitializeComponent();

        proxy = new Service1Client();
        proxy.PobierzHandlowcaCompleted += proxy_PobierzHandlowcaCompleted;          
    }


    void proxy_PobierzHandlowcaCompleted(object sender, PobierzHandlowcaCompletedEventArgs e)
    {
        if (e.Result != null)
        {
            tbHandlowiec.Text = e.Result;   // tbHandlowiec to TextBox
        }
        else
        {
            tbHandlowiec.Text = "Error!";
        }
    }

    // button
    private void btnPobierzHandlowca_Click(object sender, RoutedEventArgs e)
    {
        proxy.PobierzHandlowcaAsync();
    }
}

Po nacisnięciu przyciku, po około 5-6 sekundach następuje błąd: System.ServiceModel.CommunicationException' occurred in System.ServiceModel.ni.dll but was not handled in user code. Czy ktoś jest w stanie powiedzieć mi co tutaj jest źle ?


edytowany 1x, ostatnio: XardasLord
gr0m
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:21
1

Dodaj sobie testy do serwisu by sprawdzić czy dziala lub sprawdź na zwykłej aplikacji konsolowej. Możesz jeszcze dodać do WCF trace by widzieć więcej szczegółów.

DibbyDum
Do takich testów myślę że Wcf Test Client w zupełności wystarcza.
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Serwis działa, metoda pobiera nazwę handlowca. Tylko tutaj pytanie - może być przyczyną fakt, że usługa sieciowa łączy się z bazą na moim komputerze zamiast gdzieś na serwerze? Bo używam tutaj localhosta do połączenia i może dlatego nie mogę się z telefonu połączyć do niej?

Poniżej screen z błędem, który otrzymuję:
BdPNG_whwrnxr.PNG


edytowany 4x, ostatnio: XardasLord
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 19 godzin
1

Sprawdź, do jakiego serwera WCF (do jakiego hosta) próbuje się podłączyć telefon, bo jak do localhost, to localhost wskaże przecież na 127.0.0.1, czyli na telefon, nie na twój komputer.

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

No właśnie! W pliku konfiguracyjnym aplikacji Windows Phone - ServiceReferences.ClientConfig widnieje coś takiego:

Kopiuj
<endpoint address="http://localhost:9728/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                name="BasicHttpBinding_IService1" />

Czyli przypuszczam, że jest tak jak piszesz, czyli próbuje się telefon połączyć do localhosta, a nie do komputera
I ogólnie adres usługi to: http://localhost:9728/Service1.svc?wsdl


edytowany 2x, ostatnio: XardasLord
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 19 godzin
1

Tak, telefon próbuje łączyć się sam ze sobą. Zmień adres endpointa na adres IP (numeryczny) swojego komputera (zarówno z wirtualnej karty sieciowej łączącej z telefonem, jak i tej łączącej z internetem) i powinno działać.

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Wystarczy wewnętrzny adres w sieci? Bo zarówno telefon jak i komputer są w tej samej sieci. Komputer ma w takim razie adres 192.168.1.20. Gdy zmieniam i wpisuję w endpoincie zamiast localhosta ten adres to błąd jest dalej ten sam. Ale myślę że źle tutaj trochę rozumuję... Ten port 9728, skąd on się wziął? Czy ten port wchodzi po prostu w zakres portów dotyczących usług? Jeśli zmieniam endpointa na http://192.168.1.20:9728/Service1.svc to dalej jest to samo. Natomiast w przeglądarce 192.168.1.20/phpmyadmin to normalnie odpala się MySQL.

Proszę naprowadź mnie jak to ugryźć.


edytowany 1x, ostatnio: XardasLord
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 19 godzin
1

Tak, jeżeli są w tej samej sieci, to wystarczy wewnętrzny adres sieci.

Jeżeli masz inny komputer, to spróbuj się z niego podłączyć do 192.168.1.20:9728 (na przykład przez Telnet, czy inne narzędzie tego typu), bo ja mam proste przypuszczenie, że po prostu firewall blokuje ci połączenia z zewnątrz na taki port. Możesz wejść w ustawienia Firewalla Windows i ręcznie dodać wyjątek dla swojej aplikacji albo portu.

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Ciekawa sprawa:
Przy włączonym firewallu otrzymuję komunikat taki jak na screenie był widoczny wyżej, czyli : Additional information: The remote server returned an error: NotFound.
Natomiast po wyłączeniu całkowitym firewalla, dostaję taki oto komunikat: Additional information: There was no endpoint listening at http://192.168.1.20:9728/Service1.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. In Silverlight, a 404 response code may be reported even when the service sends a different error code.

Błąd ten otrzymuję dużo szybciej, gdzieś po 2-3 sekundach. Sprawdzę zaraz jeszcze tak jak napisałeś z innego komputera podłączyć się do 192.168.1.20:9728 i zdam relację.

EDIT:
Właśnie spróbowałem połączyć się pod ten adres z laptopa, który jest też w tej samej sieci co komputer. Użyłem do tego putty. Co ciekawe, w pole adres wpisuję 192.168.1.20, w port wpisuję 9728 i zaznaczam typ połączenia Telnet. Pojawia się te czarne okienko i po sekundzie znika. Nie wiem co to może oznaczać...


edytowany 2x, ostatnio: XardasLord
karoL
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

Rozwiązanie problemu znajduje się na stronie MS link

Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 19 godzin
1
XardasLord napisał(a):

Ciekawa sprawa:
Przy włączonym firewallu otrzymuję komunikat taki jak na screenie był widoczny wyżej, czyli : Additional information: The remote server returned an error: NotFound.
Natomiast po wyłączeniu całkowitym firewalla, dostaję taki oto komunikat: Additional information: There was no endpoint listening at http://192.168.1.20:9728/Service1.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. In Silverlight, a 404 response code may be reported even when the service sends a different error code.

Błąd ten otrzymuję dużo szybciej, gdzieś po 2-3 sekundach. Sprawdzę zaraz jeszcze tak jak napisałeś z innego komputera podłączyć się do 192.168.1.20:9728 i zdam relację.

EDIT:
Właśnie spróbowałem połączyć się pod ten adres z laptopa, który jest też w tej samej sieci co komputer. Użyłem do tego putty. Co ciekawe, w pole adres wpisuję 192.168.1.20, w port wpisuję 9728 i zaznaczam typ połączenia Telnet. Pojawia się te czarne okienko i po sekundzie znika. Nie wiem co to może oznaczać...

Sprawdź, na jakim adresie nasłuchuje twoja usługa WCF. Bo skoro była skonfigurowana na localhost, to może słucha (binduje się) tylko do localhost i nie przyjmie połączeń przychodzących z zewnątrz.

W Windows Phone błąd "NotFound" to niestety może oznaczać dowolny błąd sieciowy, wliczając w to Connection Refused. I to chyba jest twoja sytuacja z firewallem - komputer docelowy aktywnie odmawia połączenia.

putty powinno oczekiwać - powinna być możliwość podania tekstu i wykonania zapytania HTTP.

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Dzięki za zainteresowanie tematem :)

Sprawdź, na jakim adresie nasłuchuje twoja usługa WCF. Bo skoro była skonfigurowana na localhost, to może słucha (binduje się) tylko do localhost i nie przyjmie połączeń przychodzących z zewnątrz.

Pytanie dość błahe, ale jak to sprawdzić mam?


Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 19 godzin
0

Sprawdź plik konfiguracyjny swojej usługi - App.config, czy tam Web.config. Tam powinny być zdefiniowane adresy endpointów, które wystawia usługa - spróbuj zmienić "localhost" na adres IP swojego komputera i powinno śmigać.

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

No właśnie w pliku Web.config usługi mam tylko takie coś jak poniżej. Nie ma tutaj nic o adresach.

Kopiuj
<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

Ale znalazłem w Properties WCFa coś takiego:
propertie_whwqwpn.PNG

Tylko nie mogę bezpośrednio zmienić na sztywno z localhost na mój adres IP komputera bo dostaję komunikat :
blad2PNG_whwqwpw.PNG


edytowany 3x, ostatnio: XardasLord
DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
1

Zamiast się męczyć z tym durnym IIS Express zamień konfiguracje i postaw aplikację lokalnym IIS o ile masz zainstalowany.
Uruchom VS jako administrator. Ustaw jak poniżej:
VSSet.png
Utwórz kliknij create virtual dictionary. I możesz wtedy łączyć się po localhost jak i adresie IP komputera w sieci:
WcfClient.png


Yubby dibby dibby dibby dibby dibby dibby dum..
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Dzięki za odpowiedź! Nie miałem zainstalowanego lokalnego IIS więc zainstalowałem w Windowsie. W Visual Studio jako administrator pojawiło mi się Local IIS zrobiłem tak jak kazałeś. Po kliknięciu create virtual directory dostałem pomyślny komunikat.

I gdy chcę wystartować usługę dostaję taki oto błąd w przeglądarce:
Bladtworz_whspspn.PNG


edytowany 3x, ostatnio: XardasLord
DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
1

Zainstalowałeś oprócz IIS:

  1. Internet Information Service -> World Wide Web Service -> Application Development -> ASP.NET x.x

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-using-aspnet-35-and-aspnet-45


Yubby dibby dibby dibby dibby dibby dibby dum..
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0
DibbyDum napisał(a):

Zainstalowałeś oprócz IIS:

  1. Internet Information Service -> World Wide Web Service -> Application Development -> ASP.NET x.x

Rzeczywiście, nie zainstalowałem tego wcześniej. Teraz doinstalowałem tak jak widać to na poniższym screenie:
IIS-optio_whsrneq.PNG

Teraz dostaję kolejny błąd:
blad-http_whsrnwh.PNG

Wiem że zawracam głowę każdym błędem, ale wolę go tutaj przedstawić a sam też w swoim zakresie teraz tego poszukać jak rozwiązać.


edytowany 1x, ostatnio: XardasLord
DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
0

Jaki podajesz adres
http://XXX.XXX.X.XXX/Nazwa/NazwaSerwisu.svc
czy
http://XXX.XXX.X.XXX/Nazwa

Dla pierwszego powinno działać zawsze dla drugiego nie koniecznie.


Yubby dibby dibby dibby dibby dibby dibby dum..
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

No właśnie adres jest pełny, wraz z .../Service1.svc


DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
0

Okej to możesz jeszcze sprawdzić ustawienia w:
Internet Information Services (IIS) Manager -> Twój IIS -> ISAPI or CGI Restriction. Sprawdź czy .NET v4 masz "zezwolony".
Untitled.png


Yubby dibby dibby dibby dibby dibby dibby dum..
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0

Wielkie dzięki za zainteresowanie tematem i że chcesz mi pomóc :)

Sprawdziłem tak jak kazałeś i mam "dozwolone" co widać na poniższym screenie:

ISAPI-i-C_whsxwhx.PNG


DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
1

Noto nic ci nie pozostaje jak tylko lecieć po kolei i próbować aż któreś rozwiązanie u Ciebie zadziała, o ile już nie próbowałeś . Mnie się pomysły skończyły.
https://www.google.pl/search?hl=en&output=search&sclient=psy-ab&q=HTTP+Error+404.3-Not+Found+in+IIS+7.5&btnG=&oq=&gs_l=&pbx=1&gws_rd=cr&ei=l1KHVNzMHZLqaJPTgrgF


Yubby dibby dibby dibby dibby dibby dibby dum..
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
1

Wielkie dzięki. Doszedłem do rozwiązania dzięki niezawodnemu stackowi. Problemem okazało się, że nie miałem aktywowanego HTTP w usługach zaawansowanych programu .NET Framework 4.5:
wcfPNG_whsnpnp.PNG

Później jeszcze pokazał się błąd 404.17 i musiałem zgodnie z zaleceniami ze stacka zainstalować ręcznie mapowanie bodajże, aż tak się nie znam na tym no ale ważne że zadziałało.
Wpisujemy to w CMD: C:\Windows\Microsoft.NET\Framework\v3.0\"Windows Communication Foundation"\ServiceModelReg.exe -i

Dziękuję bardzo DibbyDum oraz Ktos. Bez Was mogłoby mi się nie udać :)

  • wcf.PNG (18 KB) - ściągnięć: 94

edytowany 2x, ostatnio: XardasLord
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)