WeiXiao

WeiXiao
2019-12-09 21:03

Jakiś

I'm a programmer, working for Google, focusing on optimization and reliability. Nothing's more fun than making code run 10x as fast. Unless it's eliminating large numbers of bugs

Ma ciekawe wpisy nt. debugowania

Why do I hit so many crazy problems?

I work on the Windows version of Chrome, and one of my tasks is optimizing its build system, which requires doing a lot of test builds. Building chrome involves creating between 28,000 and 37,000 processes, depending on build settings. When using our distributed build system (goma) these processes are created and destroyed very quickly – my fastest full build ever took about 200 seconds. This aggressive process creation has revealed a number of interesting bugs, mostly in Windows or its components:

Zombie Processes are Eating your Memory

I held my breath and killed CcmExec.exe, unsure of what would happen:
The results were as dramatic as I could imagine. As I said earlier, the Windows kernel is well written and when a process is killed then all of its resources are freed. So, those 508,000 handles that were owned by CcmExec.exe were abruptly closed and my available memory went up by 32 GB!

O(n^2), again, now in WMI

O(n^2) is the sweet spot of badly scaling algorithms: fast enough to make it into production, but slow enough to make things fall down once it gets there.

:D

63 Cores Blocked by Seven Instructions

24-core CPU and I can’t move my mouse

Klojtex

Rozbolała mnie głowa. Bajer :D

WeiXiao
2019-11-29 23:12

Za 30 godzin rozpoczyna się jedna z najbardziej intensywnych i prestiżowych rywalizacji programistycznych online, gdzie topowi zawodnicy właściwie otrzymują darmową przepustkę do FAANGa i innych podobnych firm typu SpaceX / ESEA / IBM (quant R&D) / Tencent itd.

Wielu zawodników w czasie eventu stawia rywalizację na najwyższym priorytecie i nawet decyduje się wziąć urlop lub totalnie olewa wszystko inne, a to powoduje drastyczny spadek aktywności w projektach open source tj. kernel Linuxa czy Tensorflow.

Nawet tutaj na forum jest kilku zawodników, którzy po wysłaniu wszystkich zadań zmagają się przez 2 miesiące z usuwaniem emaili od rekruterów i ofert na linkedinie. Oczywiście chodzi o finalistów 2018 - @kq @katelx

AoC - Join the competition

Afish

Haha, po pierwszych zdaniach myślałem, że mówisz o Top Coder Open :D

WeiXiao

@Afish: No cóż, musisz się przyzwyczaić, że my tutaj na forum celujemy w imprezy mające trochę wyższy kaliber niż Top Coder ;)

kzkzg

Serio rekruterzy się odzywają do tych najlepszych?

InterruptedException

Pierwszy raz słyszę, żeby coś innego niż pozytywne zakończenie standardowego procesu rekrutacyjnego dawało przepustke do pracy w faang. Mogę jakieś źródło tej rewelacji, może wcale nie muszę leetkodzić

katelx

@WeiXiao autor aoc powinien cie zatrudnic do marketingu ;)

WeiXiao

Ja to chciałbym się dowiedzieć gdzie jest 4powy leaderboard :D

katelx

ja jestem na stworzonych przez @hauleth @kq @Afish, czas na kolejny? ;)

several

@InterruptedException: Wydaje mi się, że potraktowałeś ten wpis zbyt poważnie ;)

WeiXiao
2019-11-27 01:33

The RIPE NCC has run out of IPv4 Addresses

Today, at 15:35 (UTC+1) on 25 November 2019, we made our final /22 IPv4 allocation from the last remaining addresses in our available pool. We have now run out of IPv4 addresses.

https://www.ripe.net/publicat[...]has-run-out-of-ipv4-addresses

Gdyby tylko na początku ktoś tym rozsądniej zarządzał, a nie rozdawał całych podsieci /8 dla uczelni, firm itd. gdzie np. MIT ma kilka milionów adresów IPv4.

C9K7PwZ.png map_of_the_internet.jpg

List of assigned /8 IPv4 address blocks

https://xkcd.com/195/

somekind

MIT to nic, ale taki Ford albo Eli Lilly to jakaś bzdura.

cerrato

Powinni wdrożyć jakaś procedurę odzysku niepotrzebnie przydzielonych adresów. Wiem, że zabrzmi to dziwnie, ale inspiracją/wzorem tutaj może być Poczta Polska. Przez wiele lat mieli podobną politykę w zakresie skrytek pocztowych - dawali za free i bezterminowo każdemu, kto chciał. W efekcie praktycznie nie było opcji wykupić jakąś dla siebie. W końcu, jakieś 2 lata temu uruchomili akcję czyszczenia i zabrali skrytki wszystkim tym, którzy z nich realnie nie korzystali.

WeiXiao

Naprawiłem screena z wiki. @cerrato i tak prędzej czy później trzeba będzie przejść na v6 ze względu na IoT, ale mogło to być później :P

WeiXiao

@somekind: a tam, departament obrony stanów ma jakoś 12 lub 13 pełnych /8 (>200 milionów adresów IPv4)

cerrato

@WeiXiao: wiem, że kiedyś v6 nadejdzie. Ale jakoś mnie to wcale nie cieszy. Adres IP w obecnej postaci jesteś w stanie dość łatwo zapamiętać, natomiast v6 wygląda jak hieroglif ;)

WeiXiao

@cerrato: dlatego mamy adresy opisowe i DNS ;)

cerrato

DNS? U mnie nie działa. Mam za słabego kompa :(

nalik

To nie tak, że wszyscy od razu przejdą na IPv6. Oba stosy mogą funkcjonować obok siebie jeszcze długo. Mamy dual stack, tunelowanie, nat-pt, nat64 i inne bajery: https://en.wikipedia.org/wiki/IPv6_transition_mechanism

Wibowit

E tam, nie nadejdzie. Dzietność spada, kto będzie tych adresów potrzebował? :P

RootCause

Żarówki i gniazdka elektryczne w Twoim domu :D

AreQrm

@Wibowit: Chinczycy i Muzułmanie :P

WeiXiao
2019-11-24 21:40

https://www.html5rocks.com/en[...]howbrowserswork/#Introduction

Jak działa przeglądarka

Introduction
    The browsers we will talk about
    The browser's main functionality
    The browser's high level structure
The rendering engine
    Rendering engines
    The main flow
    Main flow examples
Parsing and DOM tree construction
    Parsing: general
        Grammars
        Parser–Lexer combination
        Translation
        Parsing example
        Formal definitions for vocabulary and syntax
        Types of parsers
        Generating parsers automatically
    HTML Parser
        The HTML grammar definition
        Not a context free grammar
        HTML DTD
        DOM
        The parsing algorithm
        The tokenization algorithm
        Tree construction algorithm
        Actions when parsing is finished
        Browser error tolerance
    CSS parsing
        WebKit CSS parser
    The order of processing scripts and style sheets
        Scripts
        Speculative parsing
        Style sheets
Render tree construction
    The render tree relation to the DOM tree
    The flow of constructing the tree
    Style Computation
        Sharing style data
        Firefox rule tree
            Division into structs
            Computing the style contexts using the rule tree
        Manipulating the rules for an easy match
        Applying the rules in the correct cascade order
            Style sheet cascade order
            Specificity
            Sorting the rules
    Gradual process
Layout
    Dirty bit system
    Global and incremental layout
    Asynchronous and synchronous layout
    Optimizations
    The layout process
    Width calculation
    Line breaking
Painting
    Global and incremental
    The painting order
    Firefox display list
    WebKit rectangle storage
Dynamic changes
The rendering engine's threads
    Event loop
CSS2 visual model
    The canvas
    CSS box model
    Positioning scheme
    Box types
    Positioning
        Relative
        Floats
        Absolute and fixed
    Layered representation
Resources
cerrato

nie rozumiem - wkleiłeś tutaj spis treści z jakiegoś artykułu/prezentacji? WTF???

WeiXiao

@cerrato: dałem linka oraz dodatkowo spis treści, aby zaoszczędzić komuś klikania :P

cerrato

no dobra, niech Ci będzie :D

furious programming

@WeiXiao: łaski bez – jak coś cytujesz to obowiązkiem jest podanie źródła, bo tak wypada.

PS: brakuje punktu sucking RAM as much as possible.

cerrato

No ale przeciez podał link. A co do RAM - to są ogólne mechanizmy, a nie opis działania Chrome ;)

Tomek Pycia

Od czasu powstania Javy i językom im podobnych sucking RAM as much as possible jest traktowane jak norma, a nie odchylenie od normy.

furious programming

@cerrato: no właśnie – o tym piszę. ;)

vpiotr

Dajcie jakas instrukcje do tego (zartu?).

WeiXiao

@furious programming: wtf? często ludzie wrzucają sam link, więc spis treści to taki bonus tutaj :P

furious programming

No właśnie WTF polega na tym, że ludzie wrzucają różne rzeczy, nie myśląc o tym, że dobry zwyczaj nakazuje dać link do oryginału. Zresztą to już nie pierwszy Twój wpis/post, w którym nie podałeś źródła – stąd mój komentarz. ;)

WeiXiao

@furious programming: nie mam kompletnie pojęcia o czym piszesz :P przeglądnąłem swoje 10 ostatnich wpisów i dosłownie każdy miał url, tak samo jak ten. Nie wiem o co chodzi, bo zwracasz uwagę na ten url już drugi raz w tym comment chainie, a url był tam od samego początku.

WeiXiao

@furious programming: czyżby cerrato nieświadomie strollował cię swoim pierwszym komentarzem? :D

cerrato

ej no, ode mnie się odczepcie :P

furious programming

O widzisz – @cerrato najwyraźniej mnie strollował! :D

cerrato

powtórzę - proszę się ode mnie odczepić :P

WeiXiao
2019-11-17 22:24

Parallel* CSS Engine

160K LoC w C++ ---> 85K LoC w Ruscie

* w nowej wersji

https://www.joshmatthews.net/rbr17/

https://blog.rust-lang.org/20[...]rency-In-Firefox-Quantum.html

<heycam> one of the best parts about stylo has been how much easier it has been to implement these style system optimizations that we need, because Rust

<heycam> can you imagine if we needed to implement this all in C++ in the timeframe we have

<heycam> yeah srsly

<bholley> heycam: it's so rare that we get fuzz bugs in rust code

<bholley> heycam: considering all the complex stuff we're doing

*heycam remembers getting a bunch of fuzzer bugs from all kinds of style system stuff in gecko

<bholley> heycam: think about how much time we could save if each one of those annoying compiler errors today was swapped for a fuzz bug tomorrow :-)

<heycam> heh

<njn> you guys sound like an ad for Rust
WeiXiao
2019-10-27 16:51

Understanding searches better than ever before

If there’s one thing I’ve learned over the 15 years working on Google Search, it’s that people’s curiosity is endless. We see billions of searches every day, and 15 percent of those queries are ones we haven’t seen before--so we’ve built ways to return results for queries we can’t anticipate.

When people like you or I come to Search, we aren’t always quite sure about the best way to formulate a query. We might not know the right words to use, or how to spell something, because often times, we come to Search looking to learn--we don’t necessarily have the knowledge to begin with. 

At its core, Search is about understanding language. It’s our job to figure out what you’re searching for and surface helpful information from the web, no matter how you spell or combine the words in your query. While we’ve continued to improve our language understanding capabilities over the years, we sometimes still don’t quite get it right, particularly with complex or conversational queries. In fact, that’s one of the reasons why people often use “keyword-ese,” typing strings of words that they think we’ll understand, but aren’t actually how they’d naturally ask a question. 

With the latest advancements from our research team in the science of language understanding--made possible by machine learning--we’re making a significant improvement to how we understand queries, representing the biggest leap forward in the past five years, and one of the biggest leaps forward in the history of Search. 

(...)
WeiXiao
2019-10-23 01:12

Scientists have trained rats to drive tiny cars to collect food

:D

Can they be trained to drive an Uber? Would be a lot cheaper than developing an autonomous driverless car.

Are you suggesting the rats shouldn't earn a comparable wage for doing the same job as a human? They've got mouths to feed too!

cerrato

W Poznaniu tego tak nie widać, ale np. w WWA ludzie narzekają, że Uberem jeżdżą Hindusi czy inni emigranci, którzy nawet po polsku nie potrafią gadać. Ten artykuł dowodzi, że ...dobra, ugryzłem się w język, bo wyjdę na rasistę :D

danek

@cerrato: są w Poznaniu polscy kierowcy? :o

cerrato

ale mówisz o Uber Eats czy uber-taxi?

cerrato

ja nie korzystam, ale podczas rozmów ze znajomymi, kiedy wspominam o hindusach itp, to mówią, że oni tego nie zauważyli - na tym się opieram.

bootcamp_z_czarnej_listy

Co będzie następne? Nauczą szczury moderować dział Kariera?

vpiotr

Ciekawe czemu nie myszy. Czyzby juz wszystkie uciekly z Ziemi?

czysteskarpety

Niebawem "Zatrudnię szczura na naczepę typu Inloader C+E UE do przyuczenia" :D

cerrato

no do tego jeszcze długa droga. Zwróć uwagę, jak te szczurki walą w ścianę, zamiast ładnie i grzecznie wyhamować. Nie chciałbym, żeby szczurek moim TIR'em tak za każdym razem walił w rampę załadowczą :D

czysteskarpety

@cerrato: Zwróć uwagę, jak te szczurki walą w ścianę - nie tylko szczurki niestety: https://ocdn.eu/pulscms-trans[...]y5qcGeSlQLNA8AAwsOVAgDNA8DCww

cerrato

jaki morał z tego zdjęcia? Powinni całe samochody robić z tego materiału, z jakiego są zasłonki na okna robione. Zauważ, że auto zupełnie pogniecione, a te różowe maty/zasłonki nienaruszone ;)

vpiotr

Moral moze tez byc taki: nie wchodz na 4p jadac ekspresowka na lysych oponach.

WeiXiao
2019-09-28 08:33

Dobrej zabawy przy podnoszeniu EF do 3.0+ :)

Breaking changes included in EF Core 3.0

40 Breaking Changes in EF Core 3

somekind

To raczej do trochę humoru pasuje.

WeiXiao

Szkoda że ciebie na archytekta nie wzięli, bo nigdy nie zdarzyło ci się nie zaprojektować czegoś w najlepszy możliwy sposób ;) Większość z tych zmian ma "low" impact, a te największe typu LINQ queries are no longer evaluated on the client to jeżeli ktoś ma z tym problem, to niezłe, że polega na client query evaluation. albo The EF Core command-line tool, dotnet ef, is no longer part of the .NET Core SDK i FromSql, ExecuteSql, and ExecuteSqlAsync have been renamed to jakieś pierdoły.

somekind

jakieś pierdoły to nawet dobre określenie na EF.

WeiXiao

@somekind: Znalazłem. Nie no, pewnie, że lepiej używać tego ORMa, który nie ma cache drugiego poziomu, nie potrafi generować id, nie obsługuje różnych rodzajów kolekcji, nie daje żadnej kontroli nad generowanym SQL, nie pozwala na wysyłanie kilku zapytań w ramach jednego polecenia, i nie ma prawie żadnych możliwości rozszerzania. Tylko EF!

WeiXiao

Przecież EF potrafi generować ID ValueGeneratedOnAdd, potrafi wysyłać kilka zapytań (teraz chyba nawet ich zbyt dużo wysyłał i chcą to lepiej ogarnąć) nie daje żadnej kontroli nad generowanym SQL a co, nagle SQL zaczął Ci się generować w inny sposób? wystarczy się nauczyć kiedy leci client side query evaluation (w zależności od drivera) oraz chociaż raz odpalić kod, który się napisało i zerknąć na generated query.

somekind
  1. No i jakie sposoby generowania ID mam dostępne w ramach EF? Mogę zapewnić unikalność liczbowych ID w ramach bazy albo sekwencję guidów? 2. Generowanie ogromnego zapytania z podzapytaniami to nie jest to samo, co wysyłanie kilku zapytań na raz. 3. nagle SQL zaczął Ci się generować w inny sposób - czy rozumiesz na czym polega kontrolowanie generowanego SQL? Bo ta odpowiedź sugeruje, że ani trochę.
WeiXiao

@somekind: Możesz kazać bazie(ValueGeneratedOnAdd) wygenerować, która używa np. sequences, a później Id zostanie wstrzyknięty do tej encji (chociaż teraz chyba się to zmieniło) 2. https://www.entityframeworktu[...]core/querying-in-ef-core.aspx to wytłumacz dlaczego w sekcji ThenInclude masz 2 SELECTY albo tu https://stackoverflow.com/que[...]-element-selected-with-efcore ? 3. Trudno mi zgadnąć co masz na myśli. przewidywalność? niezmienność? no bo chyba nie możliwość edycji, bo od tego masz albo Raw albo może sam sobie napisz driver do EF :D

somekind
  1. Mogę kazać - czyli nie ma wbudowanego rozwiązania? No łał po prostu. 2. W sekcji ThenInclude jest przecież jedno wyrażenie. Nie o to chodzi, ile patozapytań SQL sobie EF wygeneruje i wyśle, chodzi o to, żeby kilka zapytań napisanych przez programistę mogło pójść na raz. 3. Chociażby możliwość wyboru typu joina, którym łączy się tabele. I ogólnie, żeby SQL wyglądał czytelnie.