TODOIST: nie mogę pisać polskich ogonków

Problem

Jednym ze skrótów jest:
Alt + a” lub “Ctrl + Alt + a“, odpowiada za tworzenie nowego zadania. Ten skrót również odpowiada za nasze piękne, polskie “ą“. Częściej korzystam z tego drugiego 🙂

Jak wyłączyć?

Nie da się!

Jak żyć?

Wystarczy zmienić skrót 🙂

Prawym klawiszem wybieramy Todoist:

I wybieramy konfigurację:

Zmieniamy skrót, pracujemy dalej.

Pozdrawiam 🙂

Twoja własna strona internetowa / pomoc przy komputerze

Hej, taki krótki post reklamowy. Sam się zareklamuje:

  • zakładanie – tworzenie stron internetowych (konfiguracja domeny, serwera, CMS: WordPress, Drupal, Joomla i inne): strony wizytówki, sklepy internetowe, strony z kursami online;
  • pomoc techniczna z komputerem (przez zdalny pulpit): hardware i software: Windows, Linux, antywirusy, oprogramowanie użytkowe i inne
  • pomoc przy obróbce audio jak również video (pakiet Adobe, DaVinci Resolve)
  • zakładanie własnego podcastu (obróbka audio, wybór usługi)
  • inne niewymienione powyżej: jeśli masz problem z branży IT i pokrewnych to zadzwoń, na pewno się dogadamy.
Read more “Twoja własna strona internetowa / pomoc przy komputerze”

Regeneracja chłodzenia

Jak to działa?

Komputery oprócz tego, że liczą dla nas wiele rzeczy to jeszcze przy okazji oddają nam trochę swego ciepła, prosto z serca. CPU, GPU to dwa serca, które dają najwięcej. Jeśli go nie oddadzą, to zamkną je w sobie razem z obliczeniami.

Aby oddawały ciepło cały układ chłodzenia musi być sprawny. Radiator i wentylator rzadko się psują, najczęstszym problemem jest przewodzenie ciepła z rdzenia układu do radiatora. A za to odpowiada pasta termoprzewodząca.

Regeneracja chłodzenia

Pasta niewymieniana przez kilka lat wygląda jak poniżej:

Ryc. 1. Stara, wyschnięta pasta termo na procesorze
Ryc. 2. Stara, wyschnięta pasta termo na odbiorniku ciepła.

Starą pastę termo, która już nie nadaje się do użytku należy dokładnie usunąć. Można to zrobić delikatnie plastikową szpatułką, a resztę przy pomocy alkoholu na czystej szmatce.

Po odczyszczeniu nakładamy świeżą porcję pasty termo.

Ryc. 3. Świeża porcja pasty termo na rdzeniu CPU.

Po nałożeniu możemy cały układ skręcić.

Ryc. 4. Złożony układ chłodzenia.

Czy chłodzenie w moim komputerze wymaga regeneracji?

Sposobem na sprawdzenie czy wymaga jest uruchomienie programu, który pokaże nam jaka jest aktualna temperatura procesora. Najczęściej podczas spokojnej pracy powinniśmy widzieć temperaturę poniżej 50 stopni Celsjusza. W dobrych układach chłodzenia może ona wynieść poniżej 30 stopni.

Jeśli temperatura przekracza 50 stopni to należy regenerować układ poprzez wymianę pasty. Po wymianie pasty i ponownym sprawdzeniu temperatury od razu zobaczymy zmianę.

Oczywiście oprócz wymiany pasty należy również usunąć kurz jaki znajduje się na radiatorze oraz na wentylatorze. Można to zrobić przy pomocy sprężonego powietrza. Podczas tego zabiegu nie powinno się rozpędzać wentylatora gdyż (podobno) może ulec uszkodzeniu. Mi się to jeszcze nie zdarzyło a regeneracji robiłem w setkach.

DELL Inspiron Beeps on startup

1 beep means everything is ok.

2 beeps: no memory detected.

3 beeps: chipset error

4 beeps: memory failure

5 beeps: CMOS battery failure

6 beeps: videochip failure

7 beeps: CPU failure

8 beeps: LCD failure.

Same at: Vostro, XPS, latitude, precision.

AMD APU Windows 10 freezing for 1 second

Dotyczy procesorów

  • E1-2100 APU with Radeon HD (2000, 3000, 4000, 8210)

Problem

Objawem jest zamrażanie wskaźnika myszki na niecałą sekundę, poźniej dwie sekundy normalnej pracy.

W tym samym czasie zużycie procesora przez proces System jest na poziomie ok 50-98%, nie ma możliwości normalnej pracy na komputerze.

Winnym jest sterownik karty graficznej. konieczne jest jego usunięcie i zainstalowanie sterownika Podstawowe urządzenie VGA. Niestety nie mamy wtedy dostępnej akceleracji sprzętowej grafiki, ale to jedyne rozwiązanie. AMD ani Microsoft znają problem od conajmniej 2017 roku i nikt zz tym nic nie robi, ponieważ lista urządzeń nie jest długa a okres wsparcia dla nich już miną.

Na zagranicznych formach można znaleźć podobne informacje zamiennie z zachętą do wymiany komputera na nowy :).

Rozwiązanie

Konieczne jest usunięcie sterownika urządzenia aby korzystał z podstawowego urządzenia VGA.

  1. Usuwamy urzadzenie w menadżerze urządzeń z zaznaczoną opcją usunięcia oprogramowanie.
  2. Pauzujemy aktualizacje automatyczne w ustawieniach systemu.
  3. Skanujemy w poszukiwaniu nowych urządzeń.
  4. Uruchamiamy narzędzie od MS Windows Update Show Hide (download.microsoft.com)
  5. Wybieramy opcję ukryj aktualizacje: wybieramy Advenced Micro Devices…. i dalej. Spowoduje to zablokowanie aktualizacji która powoduje instalację sterownika który jest odpowiedzialny za nasz problem.
  6. Enjoy AMD shit!

Asus f555l, k555 nie widzi dysku, nie odtwarza dźwięku, nie świecą lampki na obudowie

Objawy (Symptoms)

  • W BIOS nie widać dysku (BIOS: hard drive is not present)
  • brak dźwięku w systemie pomimo prawidłowo zainstalowanych sterowników (jeżeli system się już uruchomi) [no sound in system even drivers are installed propoerly]
  • trzeszczący dźwięk mimo nowych głośników (jeżeli system się już uruchomi) [scrachy sound even speakers are new]
  • nieprawidłowo pracują kontrolki (lampki) stanu notebooka [“blinkers?” not working properly]

I jeszcze kilka innych modeli. Konstrukcja ta w środku wygląda jak poniżej:

Przyczyny

Problemem jest złącze znajdujące się tutaj:

Samo złącze wyglada tak:

Naprawa

Złącze to ulega uszkodzeniu, podejrzewam, że niewielki udar (upadek, uderzenie) lub trzymanie otworzonego notebooka za jeden z narożników może powodować naprężenia również w środku które powodują uszkodzenie złącza.

Złącze to ma kilkadziesiąt połączeń na długości ok centymetra. Sam koszt złącza (nieoryginalne) to ponad 70zł (02.2020), wymiana to ok 150zł.

Lista modeli

Konstrukcja ta występuje również w innych notebookach. Poniżej będzie aktualizowana lista:

  • F555L
  • K555L
  • K556L

Algorytm Dijkstry (w trakcie pisania)

Wyszukiwanie najkrótszej drogi między parą wierzchołków w grafie

Algorytm Floyda-Warshalla w przeciwieństwie do algorytmu Dijkstry można było zastosować w grafach z ujemnymi wagami krawędzi, warunkiem było aby w grafie nie występowały ujemne pętle.

Algorytm Dijkstry jest algorytmem zachłannym czyli w celu wyznaczenia rozwiązania w każdym kroku dokonuje zachłannego, najlepiej rokującego w danej chwili rozwiązania częściowego. Podczas pracy algorytmu nie jest dokonywana ocena odnośnie całokształtu jedynie ocena lokalna i wybierane jest rozwiązanie lokalnie optymalne.

Przykładowe zastosowanie algorytmu Dijkstry

Algorytm ten może być wykorzystywany przy obliczaniu najkrótszej drogi na mapie zakładając, że każde skrzyżowanie to wierzchołek a odległości między nimi to wagi. Również jest wykorzystywany przy trasowaniu w sieciach komputerowych w protokole OSPF (wiki).

Działanie algorytmu

Algorytm polega na wybieraniu drogi, która w danej chwili ma najniższy koszt. Startując z wierzchołka s szukamy wagi która jest najniższa i przechodzimy do wierzchołka po tej krawędzi.

Algorytm ten również ma złożoność O(n2) zaś Floyda-Warshalla O(n3). Również jego zaletą jest to, że nie są obliczane wszystkie odległości tylko wyszukiwana ta do celu, dzięki czemu może algorytm zakończyć się wcześniej, co nie ma miejsca w Floydzie-Warshallu. Również tam gdzie graf się zmienia warto rozważyć ten algorytm, przy niezmiennych Floyd-Warshall.

Implementacja kodu

Do testowania implementacji zastosujemy ten sam graf co w algorytmie Floyda-Warshalla:

Ryc. 1. Graf do testowania implementacji kodu
Ryc. 2. Macierz sąsiedztwa grafu z Ryc. 1.
using System;

namespace Dijkstra
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Przykładowa implementacja algorytmu Dijkstry");

            //przygotowanie danych
            //utworzenie tablicy
            int rozmiar_tablicy = 5; //ilosc wierzchołków grafu
            var tablica = new int[rozmiar_tablicy, rozmiar_tablicy];

            //wypełnienie tablicy

            for (int i = 0; i < rozmiar_tablicy; i++)
                for (int j = 0; j < rozmiar_tablicy; j++)
                {
                    tablica[i, j] = Dijkstra.INFINITI;
                }

            //uzupełnienie macierzy sąsiedztwa
            //tablica zaharkodowana, najlepiej by było przekazywać macierz jako parametr
            tablica[0, 1] = 2;
            tablica[0, 2] = 3;
            tablica[1, 3] = 3;
            tablica[1, 4] = 7;
            tablica[2, 3] = 4;
            tablica[3, 4] = 1;

            //utworzenie instancji klasy
            var dijkstra = new Dijkstra(tablica);

            //pobranie ścieżki między wierzchołkami podanymi w parametrze metody
            var test = dijkstra.GetPath(0, 4);

            foreach (var item in test)
            {
                Console.WriteLine(item.ToString());
            };

            Console.ReadLine();
        }

        class Dijkstra
        {
            //stała - nieskończoność
            public const int INFINITI = int.MaxValue;
            public int[,] Tablica { get; set; }
            public Dijkstra(int[,] tablica)
            {
                Tablica = tablica;
            }


            public int[] GetPath(int start, int meta)
            {
                int rozmiarTablicy = Tablica.GetLength(0);
                int[] odleglosc = new int[rozmiarTablicy];
                int[] poprzednik = new int[rozmiarTablicy];
                int[] wezel = new int[rozmiarTablicy];

                for (int i = 0; i < odleglosc.Length; i++)
                {
                    odleglosc[i] = poprzednik[i] = INFINITI;
                    wezel[i] = i;
                }

                odleglosc[start] = 0;

                do
                {
                    int najmniejszy = wezel[0];
                    int najmniejszyIndex = 0;
                    for (int i = 0; i < rozmiarTablicy; i++)
                    {
                        if (odleglosc[wezel[i]] < odleglosc[najmniejszy])
                        {
                            najmniejszy = wezel[i];
                            najmniejszyIndex = i;
                        }
                    }

                    rozmiarTablicy--;
                    wezel[najmniejszyIndex] = wezel[rozmiarTablicy];

                    if (odleglosc[najmniejszy] == INFINITI || najmniejszy == meta)
                    {
                        break;
                    }

                    for (int i = 0; i < rozmiarTablicy; i++)
                    {
                        int j = wezel[i];
                        int nowaOdleglosc = odleglosc[najmniejszy] + Tablica[najmniejszy, j];
                        if (nowaOdleglosc < odleglosc[j])
                        {
                            odleglosc[j] = nowaOdleglosc;
                            poprzednik[j] = najmniejszy;
                        }
                    }
                }
                while (rozmiarTablicy > 0);

                return RekonstruktorSciezki(poprzednik, start, meta);
            }

            public int[] RekonstruktorSciezki(int[] prev, int start, int meta)
            {

                int[] ret = new int[prev.Length];
                int currentNode = 0;
                ret[currentNode] = meta;
                while (ret[currentNode] != INFINITI && ret[currentNode] != start)
                {
                    ret[currentNode + 1] = prev[ret[currentNode]];
                    currentNode++;
                }
                if (ret[currentNode] != start)
                    return null;
                int[] reversed = new int[currentNode + 1];
                for (int i = currentNode; i >= 0; i--)
                    reversed[currentNode - i] = ret[i];
                return reversed;
            }
        }
    }
}

Algorytm Floyda-Warshalla (w trakcie pisania)

Wyszukiwanie najkrótszej drogi między parą wierzchołków w grafie

Problem

Aby znaleźć drogę do celu musimy drogę zaplanować. Możemy wyszukać najszybszą, najtańszą, ekonomiczną. A jak sprawdzić która to która? Mamy wiele algorytmów pomagających nam to obliczyć i jednym z nich jest algorytm Floyda-Warshalla. Algorytm ten pozwala odnaleźć najkrótszą drogę między dwoma wierzchołkami w grafie ważonym.

Jak działa algorytm?

W grafie jeżeli najkrótsza droga między wierzchołkami a i c prowadzi przez wierzchołek b to znaczy, że jest ona połączeniem najkrótszych dróg między a i b oraz b i c.

Na początku algorytmu definiowana jest tablica najkrótszych ścieżek, tak że dla każdej pary wierzchołków mamy:

  • 0 gdy a = c (ten sam wierzchołek)
  • w(a, c) gdy istnieje krawędź między a i c
  • nieskończoność gdy nie istnieje krawędź między a i c

Złożoność algorytmu

Implementacja algorytmu

Sposobem przechowywania grafu w pamięci komputera są różne struktury danych. Jedną z nich jest macierz. Za pomocą macierzy możemy opisać które wierzchołki sąsiadują z innymi.

Przykładowa macierz może wyglądać następująco:

Ryc. 1. Macierz sąsiedztwa dla grafu z ryc. 2

A graf który przedstawia to:

Ryc. 2. Przykładowy graf nieskierowany

Do opisu grafów ważonych wykorzystuje się również macierz wag.

Ryc. 3. Macierz wag dla grafu z ryc. 4.

W implementacji wykorzystamy graf opisany macierzą:

Ryc.5. Macierz sąsiedztwa grafu wykorzystanego w implementacji kodu.

Graf będzie się przedstawiał następująco:

Ryc. 6. Graf wykorzystany w przykładowej implementacji kodu.
using System;
using System.Collections.Generic;

namespace FloydWarshall
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Przykładowa implementacja algorytmu Floyda-Warshalla");

            //przygotowanie danych
            //utworzenie tablicy
            int rozmiar_tablicy = 5; //ilosc wierzchołków grafu
            var tablica = new int[rozmiar_tablicy, rozmiar_tablicy];

            //wypełnienie tablicy

            for (int i = 0; i < rozmiar_tablicy; i++)
                for (int j = 0; j < rozmiar_tablicy; j++)
                {
                    tablica[i, j] = Floyd.INFINITI;
                }

            //uzupełnienie macierzy sąsiedztwa
            //tablica zaharkodowana, najlepiej by było przekazywać macierz jako parametr
            tablica[0, 1] = 2;
            tablica[0, 2] = 3;
            tablica[1, 3] = 3;
            tablica[1, 4] = 7;
            tablica[2, 3] = 4;
            tablica[3, 4] = 1;

            //utworzenie instancji klasy
            var floyd = new Floyd();
            //wyliczenie odległości między wierzchołkami
            floyd.Evaluate(rozmiar_tablicy, tablica);

            //pobranie ścieżki między wierzchołkami podanymi w parametrze metody
            var test = floyd.GetPath(0, 4);

            foreach (var item in test)
            {
                Console.WriteLine(item.ToString());
            };

            Console.ReadLine();
        }
    }

    class Floyd
    {
        //stała - nieskończoność
        public const int INFINITI = int.MaxValue;

        //tymczasowa zmienna, podczas iteracji przechowuje wartosc obliczaną wg algorytmu
        int[,] nastepnik;

        //ścieżka 
        int[,] sciezka;

        //wyliczenie odległości między wierzchołkami w grafie
        public void Evaluate(int rozmiar_tablicy, int[,] sciezka)
        {
            this.sciezka = sciezka;
            nastepnik = new int[rozmiar_tablicy, rozmiar_tablicy];
            for (int i = 0; i < rozmiar_tablicy; i++)
                for (int j = 0; j < rozmiar_tablicy; j++)
                    if (sciezka[i, j] == INFINITI)
                        nastepnik[i, j] = INFINITI;
                    else
                        nastepnik[i, j] = i;
            for (int k = 0; k < rozmiar_tablicy; k++)
                for (int i = 0; i < rozmiar_tablicy; i++)
                    for (int j = 0; j < rozmiar_tablicy; j++)
                        if (sciezka[i, k] != INFINITI && sciezka[k, j] != INFINITI &&
                sciezka[i, k] + sciezka[k, j] < sciezka[i, j])
                        {
                            sciezka[i, j] = sciezka[i, k] + sciezka[k, j];
                            nastepnik[i, j] = k;
                        }

            //sprawdzenie czy nie ma ujemnych ścieżek
            for (int i = 0; i < rozmiar_tablicy; i++)
                if (sciezka[i, i] < 0)
                    throw new ArgumentException("Negative cycles");
        }

        //pobranie najkrótszej ścieżki 
        public List<int> GetPath(int start, int meta)
        {
            var path = new List<int>();

            if (nastepnik == null)
                return null;
            if (nastepnik[start, meta] == INFINITI)
                return new List<int>();
            if (start == meta)
                return new List<int>() { start };
            getPathRekonstruktor(path, start, meta);
            path.Add(meta);

            return path;
        }

        //metoda rekursywna do pobierania ścieżki między węzłami
        private void getPathRekonstruktor(List<int> sciezka, int start, int meta)
        {
            int posredni = nastepnik[start, meta];
            if (posredni == start)
            {
                sciezka.Add(start);
                return;
            }
            getPathRekonstruktor(sciezka, start, posredni);
            getPathRekonstruktor(sciezka, posredni, meta);
        }
    }
}

Ulubione podkasty w 2019 roku

Podkasty są to nagrania (audio lub video), które możemy słuchać sprzedawców, pasjonatów, magików i świrów. Podkast wyróżnia się tym, że zastosowany jest tutaj kanał RSS.

Jeśli nie wiesz jak słuchać to link z podstawami tutaj: klik! . Prezentuje tam co prawda tylko jeden program i to na Androida ale znalezienie innych nie powinno sprawić Ci problemów.

Sam aktualnie korzystam z aplikacji PocketCast z której jestem bardzo zadowolony i którą również polecam, ponieważ ma klienta na iOS, Android i Windows a urządzenia mogą się między sobą synchronizować.

Część z podkasterów sprzedaje różne produkty a część po prostu dzieli się swoją pasją. Nie ważne czy trafimy na pierwszego czy na drugiego to zawsze otrzymamy coś ciekawego:

  • darmową wiedzę (którą można uzupełnić tą płatną oferowaną właśnie przez podkastera) – czasem będzie więcej a czasem mniej;
  • poznanie pasji innych ludzi;
  • miłe spędzenia czasu podczas czynności których nie lubimy: pranie, gotowanie, prasowanie;
  • jeszcze milsze spędzenie czasu który i tak nam sprawia przyjemność: jazda samochodem, jazda rowerem, bieganie 🙂
  • i wiele innych…

Moje słuchanie zaczęło się od audiobooków właśnie za kierownicą a później do tego doszły podkasty.

Bez Montażu, Bez Cenzury (RSS)

Nie wiem w sumie o czym to jest, bardzo miło się tego słucha bo jest o wszystkim. Polecam ponieważ trafiłem tam na grupę ludzi z którymi można się powymieniać doświadczeniami, opiniami, pożartować a czasem razem pomilczeć 🙂 Jeśli ktoś chciałby dołączyć to zapraszam również. Link poznacie po przesłuchaniu 🙂

Podkaster ten stwierdził, że kończy nadawanie tutaj i wraca do filmów na YT ale podejrzewam, że szybko mu się to zmieni 😉

Imagined Life (RSS)

W języku angielskim: 45 min przyjemnie zrobionego podkastu o kimś kogo zapewne znasz, może podziwiasz albo przeciwnie. Ale dopiero na końcu się dowiesz o kim to było. Ciekawa koncepcja, przyjemna realizacja.

Kontestacja (RSS)

Trochę polityki, podsumowań tego co się dzieje na świecie a także wiele innych ponieważ udostępniają również wiele innych podkastów.

Kryminatorium (RSS)

Nocą boisz się wyjść z domu bo możesz zostać napadnięty? Posłuchaj a będziesz się bał jeszcze bardziej 🙂

Książki które uczą (RSS)

Wszystko co w tytule.

Mała Wielka Firma (RSS)

Jeden z pierwszych podkastów jakie miałem okazję słuchać a słucham do dziś. Dużo wiedzy dla przedsiębiorców.

Na podsłuchu – Niebezpiecznik.pl (RSS)

W sieci czyha na nas wiele niebezpieczeństw. Ekipa Niebezpiecznika jest zawsze na bieżąco i dlatego warto ich słuchać. Większość ataków jest skuteczna ze względu na najsłabszy czynnik czyli nas samych. Wiedza pozwala nam się zabezpieczyć.

Na Sofie

Dużo przyjemnej muzyki “po której spróbujemy być dla siebie mili.”

Nerdy Nocą (RSS)

Historia, gorzelnictwo, zwiedzanie Stanów Mało Zjednoczonych Azji: Kurdystan, Afganistan, Pakistan i inne. Tematów nie brakuje a jakość materiałów na wysokim poziomie.

Otwieracz (RSS)

Masz pustkę w głowie i chcesz nad czymś porozkminiać? Odpal Otwieracz i będziesz miał tematy.

Podcast RADIOaktywny (RSS)

Dziewczyna ma pojęcie o reportażach, tematy różne, przyjemnie się słucha. Polecam

Pogaducha (RSS)

O życiu, o wszystkim. Tak na rozluźnienie

Stacja Zmiana

Trochę przemyśleń nad życiem, jak być lepszym człowiekiem.

Chaszcze and Thuja Haters (RSS)

Trochę prepperingu, podróży, przygotowań na trudne czasy, gadania o bzdurach. Się polecam 🙂

Po wachcie pod masztem (RSS)

I jeszcze jeden podkast, którego jestem uczestnikiem/autorem. Tym razem żeglarstwo.

Są to według mnie najciekawsze podkasty z tych które miałem okazję słuchać. Na liście mam ich oczywiście zdecydowanie więcej i wszystkie chętnie bym polecił ale jest ich ponad 300 i sam słucham tylko wybrane na podstawie tytułu odcinka. Jeżeli mnie zainteresuje to zaczynam, jeśli nie to archiwizuje i lecę dalej.

Ciebie również zachęcam do słuchania.

Wrzuć również w komentarzu co sam polecasz, chętnie sprawdzę.