micfil94
2018-12-07 12:46

@JustJoinIT: Siemanko, podrzucam Prasówkę Technologiczną. Polecam zerknąć, bo w minionym tygodniu było sporo ciekawych artykułów.

01) Zastanawiasz się co robi Twoja dziewczyna kiedy jesteś w pracy? Chciałbyś to sprawdzić? - Nie, w tym artykule nie podpowiemy Ci jak śledzić swoją dziewczynę, ale możesz stworzyć proste śledzenie lotów za pomocą #Python
Link: https://www.geodose.com/2018/[...]e-flight-tracking-python.html

02) #CTO (Chief Technology Officer), jak sama nazwa wskazuje, jest osobą zarządzającą technologią w firmie. Proste? Nie do końca. Już samo stwierdzenie ‘zarządzanie technologią’ nie jest zbyt precyzyjne. Zobaczcie na czym polega ta rola.
Link: https://geek.justjoin.it/wygladac-rola-cto-software-housie/

03) Masz problemy ze snem? Naukowcy z Salk Institute wyjaśniają dlaczego powinieneś obwiniać swój telefon
Link: https://www.gadgetsnow.com/te[...]oded/articleshow/66931327.cms

04) Aplikacje desktopowe istnieją od początku rewolucji komputerów osobistych. Bywało różnie, ale ostatecznie przetrwały erę internetu i rewolucję mobilną. - Pytanie brzmi: dlaczego?
Link: https://blog.hiri.com/why-des[...]-are-coming-back-b1699ac168c5

05) Twoja dziewczyna nie wie co kupić Ci na gwiazdkę? Wyślij jej to zestawienie najlepszych świątecznych prezentów 2018 dla miłośników gadżetów!
Link: https://www.iflscience.com/te[...]mas-presents-for-tech-lovers/

06) Poznajcie #Amplify — zestaw narzędzi wiersza poleceń, który wykorzystasz w #AWS
Link: https://geek.justjoin.it/pozn[...]lecen-ktory-wykorzystasz-aws/

07) Nie kupuj #Apple #MacBook! ...bez sprawdzenia tych 21 rzeczy:
Link: https://www.gadgetsnow.com/sl[...]online/photolist/66931558.cms

08) #Google planuje zmianę w technologii dual-SIM w smartfonach z #Android. W jaki sposób chcą to zrobić dowiecie się z artykułu
Link: https://www.gadgetsnow.com/te[...]ones/articleshow/66930957.cms

09) AWS z radością ogłasza, że #Ruby jest językiem obsługiwanym przez AWS Lambda. W artykule omówiono jak dokładnie działa interakcja z zasobami AWS bezpośrednio z Twoich funkcji.
Link: https://aws.amazon.com/blogs/[...]-ruby-support-for-aws-lambda/

10) [Video] Andrew Louis opowiada o wykorzystaniu Ruby do budowy nowoczesnego Memexa!
Link: https://www.youtube.com/watch?v=NTG5UMSQR8E

11) Dane 100 milionów użytkowników #Quora zhakowane! Najpopularniejsza strona z pytaniami i odpowiedziami poinformowała, że skradzione dane obejmowały publiczną i niepubliczną treść. Co to oznacza? - O tym w artykule
Link: https://www.c-sharpcorner.com[...]llion-quora-users-data-hacked

12) Wydano #Azure Service Fabric 6.4. Nowe wydanie zostało ogłoszone na konferencji Ignite we wrześniu. Wydanie zawiera wiele poprawek, ulepszeń stabilności i poprawek wydajności
Link: https://www.c-sharpcorner.com[...]re-service-fabric-64-released

13) Jakiś czas temu #Amazon zapowiedział Corretto, bezpłatną dystrybucję standardowej Javy, dając użytkownikom potencjalną alternatywę dla własnego JDK firmy Oracle. Dziś Amazon wprowadza Corretto. Jak pierwsze wrażenia?
Link: https://www.c-sharpcorner.com[...]ocost-distribution-of-openjdk

14) Niektórzy ludzie myślą o nim jak o nowej wersji języka, choć nie do końca tak jest. - Czym właściwie jest Rust 2018?
Link: https://hacks.mozilla.org/2018/12/rust-2018-is-here/

15) #Blockchain rozwija się szybciej, niż się spodziewano. Każda znacząca firma technologiczna, w tym dostawcy usług w chmurze, zaczęła oferować usługi blockchain. - W odpowiedzi na to Amazon wprowadza Quantum Ledger Database.
Link: https://www.c-sharpcorner.com[...]duces-quantum-ledger-database

16) Jest ekspresyjny, zwięzły, czysty i wydajny - #Go stał się jednym z najpopularniejszych języków programowania. Google zapowiada już #Go 2!
Link: https://www.c-sharpcorner.com/news/google-plans-go-2

17) Każdy już wie, że #Facebook zbiera i przetwarza ogromne ilości danych swoich użytkowników. Kilka słów o tym, co się z nimi dzieje i jak FB podchodzi do firm konkurencyjnych
Link: https://www.technewsworld.com[...]l-User-Data-Report-85713.html

18) Google nie dotrzymał obietnicy. - Nadal trzyma konsumentów w bańce filtrującej - pakiecie spersonalizowanych wyników wyszukań
Link: https://www.technewsworld.com[...]pping-Users-Report-85717.html

19) Ogłoszenie przez AWS Lambda Layers oznaczało dla nas coś wielkiego. Jak napisać #Lambda w #PHP? O tym, oraz wiele więcej w artykule!
Link: https://www.stackery.io/blog/aws-lambda-php/

20) Nowoczesne aplikacje #JS mają ogromne drzewka zależności, które dają dużo zaufania osobom trzecim. Niewłaściwie powierzone zaufanie może zagrozić naszej firmie, użytkownikom, czy reputacji. Jak się zabezpieczyć ekosystem #javascript ?.
Link: https://medium.com/@nickheine[...]the-js-ecosystem-55f87a4a2ceb

21) Urządzenia coraz częściej wyposażone są w szereg czujników pozwalających im określić jak są używane i co się wokół nich dzieje. Jak inteligentne muszą być inteligentne urządzenia medyczne?
Link: https://medium.com/@danielpje[...]vices-need-to-be-76f8f3735f81

22) [Video] Jason Yu wyjaśnia jak zbudować prosty wirtualny DOM od Scratch
Link: https://www.youtube.com/watch[...]JMUEcnkc&feature=youtu.be

23) Mogą być miejscem testowania nowych funkcji devops, mini ćwiczeń onboardingowych itd. - Budowanie szkieletu aplikacji Python 3.6 z użyciem #Docker, #Tox i #Pylint.
Link: https://joecmarshall.com/posts/python-app-seed/

24) Chmura staje się niezwykle popularna i wszechobecna. Pierwotna koncepcja tego czym jest i jak powinna być wykorzystana, zmieniała się z biegiem czasu. - Jeszcze inne spojrzenie na na architekturę aplikacji Cloud-Native.
Link: https://medium.com/@grapeup/y[...]pps-architecture-dc35c34d1ab8

25) Podczas nauki programowania być może natknąłeś się na pojecie competitive programingu. Określa się nim zlecenie na stworzenie oprogramowania w określonym czasie i o określonych warunkach. Często spotyka się je podczas olimpiad „informatycznych” czy innych konkursach, sprawdzających wiedzę studentów.
Link: https://geek.justjoin.it/bezp[...]ogramowanie-potrzeby-klienta/

#naukaprogramowania #programowanie #programista15k #technologia #informatyka

siloam

Nowe Go zapowiadano już z miesiąc temu. Zachęcano do uwag ze strony społeczności na oficjalnej stronie Go. To już suchar, a nie news.

micfil94

@siloam: Dzięki za info, ogarnę lepiej żeby informacje były bardziej aktualne.

lion137
2017-12-01 02:21

Wygląda na to, że praktyczne zastosowanie lambda calculus będzie działać, czyli zmasakrowanie Pythona i lambda na ciąg Fibonacciego:)
A jako smaczek, Y combinator:
https://github.com/lion137/bl[...]b/master/bit_of_lambdas.ipynb
#lambda

lion137

@jarekr000000: Ładnie, a skoro type system scali jest Turing Complete, to można w nim napisać interpreter samego siebie, tylko co będzie wtedy runtimem?:-)

lion137
2017-11-28 13:07
Prosty Symulator Maszyny Turinga w Pythonie i Ograniczenia Obliczalności

Dawno nie było tu żadnych ciekawostek teoretycznych, a z algebrą liniową to już straszna posucha:) Ale nie jest źle, chociaż jest Python:) i TM symulowane w nim, najpierw kod:

Code = {
    ("1", "S1"): ("0", "R", "S2"),
    ("0", "S1"): ("0", "R", "S4"),
    ("1", "S2"): ("0", "L", "S3"),
    ("0", "S3"): ("0", "R", "S4"),
    ("0", "S4"): ("0", "L", "S1"),
        }

def simulate_tm(program):
    tape, head, state = ["1", "1"], 0, "S1"

    for _ in range(7):
        print("".join(tape))
        tape[head], d_head, state = program[tape[head], state]
        head += 1 if d_head == "R" else -1

simulate_tm(Code)

Krótko o Maszynie Turinga, symuluje ona (w ogromnym uproszczeniu) pracę komputera, na wejściu ma potencjalnie nieskończona taśmę z zapisanymi symbolami (po jednym na kratkę), u mnie taśma jest skończona, ale koncept pozostaje ten sam - to jest tape w kodzie; zbiór stanów S1, S2, ... stan mówi maszynie co ma robić w danym miejscu taśmy, i głowicę head poruszającą się raz w lewo, raz w prawo, w kodzie jest to pointer do pamięci head.

Na wejściu jest program zapisany jako Pythonowy dict, taka struktura jak hash w innych językach. Składa się z par key, value, kluczem jest Tuple: (czyli lista, która nie może zmieniać długości) Obserwowany symbol na taśmie, stan, a wartość to instrukcje dla maszyny co robić, też Tuple (3 elementowa): Symbol jaki mamy zostawić, czy udać się w lewo czy prawo L R i do jakiego stanu przejść.

Jeśli program podaje spójne instrukcje, co robić w każdej sytuacji, to mamy działającą maszynę. Ta symulacja nie robi wiele: Taśma składa się tylko z dwóch symboli (start ["1", "1"]) , które są zmieniane na zera, po czym maszyna skacze pomiędzy nimi aż skończy się pętla.
Idzie to tak: Jak w stanie S1 widzimy 1, nadpisujemy zerem i idziemy w prawo do sanu S2 (jak zero to też w prawo i do stanu S4), jak w stanie S2 widzimy jeden, nadpisujemy zerem i idziemy w lewo do stanu S3, w stanie S3 widząc zero zostawiamy je i idziemy w prawo do S4, a z S4 do S1 i tak dalej... Taśma została zmieniona.
Realizowane jest to za pomocą dwóch instruckji w pętli, najpierw tzw. ""Tuple Assignment": tape[head], d_head, state = program[tape[head], state], aktualnemu symbolowi, kierunkowi głowicy i stanowi przypisujemy nową Tuple: Wartość dla klucza tape[head], stateze słownika program. Potem coś jak ternary operator z innych języków - realizowany za pomocą if else, do inkrementacji lub dekrementacji wskażnikahead.
W konsekwencji uruchomienie tej symulacji drukuje:

11
01
00
00
00
00
00

Mając tak ograniczony model, można symulować działanie komputera, mamy już instrukcje warunkowe, iterację, biorąc jakieś kodowanie liczb (pamietająć, że liczba symboli taśmy musi być skończona - kolejne ograniczenie Turinga), uzyskamy arytmetykę, struktury danych, operacje na stringach, czyli wszystko co można liczyć... Nie bedę tego robił, liczenie Maszynami Turinga nie jest najciekawszym zajęciem:), ale zobaczmy jakie są ograniczenia obliczeń, czego nie moga zrobić TM - y.

Wiadomo, problem stopu:
Znajdź program, który odpowie na pytanie czy dowolny program na wejściu się zatrzyma

Mamy program:

def halt(f):
    pass

Zakladamy, że działa, to znaczy daje poprawną odpowiedź na tezę, tworzymy dwa dodatkowe programy:

def infinite():
    while True:
        pass

def contradict():
    return halt(contradict) and infinite()

infinite to, jak sama nazwa wskazuje, nieskończona petla, a contradict to program badany, oczywiście wszystko to to poprawny, kod Pythona.

Funkcja contradict zwraca wyrażenie logiczne: halt(contradict) [dziwne, ale poprawne: halt od samej siebie] AND infinite() - nieskończona petla. W Pythonie and jest ewaluowane w ten sposób, że gdy pierwsze wyrażenie jest fałszywe, to AND zwraca automatycznie fałsz (short circuit) i drugi człon nie jest ewaluowany.

Zgodnie ze specyfikacją funkcji halt (zakładamy, że jest poprawna), mamy dwie mozliwości:

  • half(contradict) zwraca prawdę, znaczy, że contradict się zatrzymuje, wtedy w AND musi być ewaluowany drugi człon (nieskończony), więc contradict się nie zatrzymuje, w opozycji do założenia wcześniej - więc mamy sprzeczność, halt(contradict), nie może zwracać prawdy, czyli...
  • half(contradict) zwraca fałsz - czyli contradict się nie zatrzymuje, wtedy AND zwraca prawdę, Python nawe nie dotyka infinite, czyli contardict się zatrzymuje, znowu sprzeczność, a że Teritum non datur, funkcja contradict nie może istnieć. Oczywiście, nie było w niej nic złego (kompilowała się), jedynym miejscem gdzie powstała sprzeczność była funkcja halt, inaczej :contradict był tylko opakowaniem dla halt, co kończy dowód reductio ad absurdum.

Jeśli to sie wydaje trochę zbyt abstarkcyjne, toz tego wynika niemozliwość obliczenia innych bardziej praktycznych rzeczy jak równoważność dwóch funkcji (do refactoringu jak znalazł:)). Załómy, że jak zwykle, mamy poprawnie działający program sprawdzający równoważność dwóch dowolnych funkcji:

def are_fun_equiv(f, g):
    pass

Definiujemy funkcję halt w ten sposób:

def halt(f):
    def internal0():
        f()
        return 1
    def internal1():
        return 1
    return are_fun_equiv(internal0, internal1)

halt ma zdefiniowane dwie funkcje pomocnicze, pierwsza woła funkcję wejściową f i jak ta się ewentualnie zatrzyma, zwraca jeden, druga zwraca jeden; a na końcu zwracamy test na równoważność tych funkcji. Teraz, jeśli wejściowa funkcja (f) się zatrzymuje, to internal0 zwraca jeden i are_fun_equiv rozpoznaje poprawnie, że obie są te same i zwraca prawdę, natomiast gdy f się nie zatrzymuje, to interval0 nigdy nie zwróci jeden i are_fun_equiv znowu rozpozna - tym razem, że funkcje są różne i zwróci falsz - w ten sposób mielibyśmy rozwiązanie problemu stopu! A to jest niemożliwe, więc również niemożliwe jest istnienie poprawnej are_fun_equiv. To tyle, dziękuję za cierpliwość:)
#theory #computation #lambda

furious programming

W końcu wpis o programowaniu – tego mi ciągle tu brakuje. ;)