Przemek Bykowski
wczoraj, 17:28

Podczas świątecznych porządków znalazłem zadanie rekrutacyjne na stanowisko deva z przed ~5 lat. Jak zobaczyłem jego treść to się za głowę złapałem. Wystarczyło zrobić prostą appkę, aby sprostać oczekiwaniom pracodawców. Dla porównania zerknąłem na zadanie rekrutacyjne podesłane przez mojego kursanta z ostatnich miesiącach. Różnica kolosalna.
Postanowiłem zrobić research, obadałem rynek i mam wiele ciekawych wniosków na temat tego jak kształtuje się rynek i jakie są perspektywy tego na następne lata – i o tym będę miał wykład, na którym też dla kontrastu pokażę, że zadanie rekrutacyjne sprzed 5 lat da się zrobić w 15 min.
W trakcie promocji wydarzenia nadesłano mi jeszcze ciekawsze informacje, co wzbogaca moją bazę i zaciekawienie. Sprawa się tyczy wymagań, szkół programowania, studiów – tego jak było kiedy, teraz oraz co trzeba zmienić. Jestem ciekawy Waszych wniosków na ten temat. Czy programista to nadal zawód przyszłości? Czy opłaca się w nim kształcić, a jeśli tak to w jaki sposób? Czy wymagania na rynku pracy są za wysokie za niskie? Czy programista to zawód tylko dla wybranych? Czy patrząc na to jak kształtuje się rynek to czasem nie lepiej rzucić tego wszystkiego i wyjechać w Bieszczady?

_flamingAccount
wczoraj, 00:34

ed. Nicki w przykładzie został wybrane pod kontem zrobienia screena a nie treści czy użytkowników :)

Hejka, przy okazji afery mikroblogowej, napisałem skrypt czarnolistujący na mikroblogu do tamperMonkey . Czarnolistować można posty, klikając na nowy guzik #czarnolista lub użytkownika dopisując go ręcznie do zmiennej blackList. Posty czarnolistowane przez klikniecie są zapisywane w pamięci rozszerzenia. Czarnoliste można wyłaczyć odklikując guzik. Wygląda to tak i pozwala przeglądać mikrobloga bez scrollowania przez tone spamu:
screenshot-20200118002246.png

Zeby zainstalować skryp,, wystarczy zainstalowac rozszerzenie TamperMonkey i wkleić kod.
Ustawienie max-height na 67px w smallSizeStyle, pokaże nam kilka pierwszych lini postu, jest to chyba spoko opcja jeśli nie chcemy sie od kogoś odcinać całkowicie, w nadziei że kiedyś wrzuci coś fajnego.

Osobiście uważam że regulamin, powinien być dość luźny że by forum nie zmieniło się w elektrodę i nie warto przesadzać z opcjami siłowymi. Skrypcik napisałem żeby Ci którym najbardziej to przeszkadza mieli chwile ulgi i nie wymusili, drastycznych zmian, jak np. było z anonimami.

//nie jestem mistrzem js, wiec jak ktos ma uwagi, chętnie poprawie

// ==UserScript==
// @name         Czarno lista 4p
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  Dont ban me!
// @author       _flamingAccount
// @match        https://4programmers.net/Mikroblogi*
// @grant        GM.setValue
// @grant        GM.getValue
// @require https://code.jquery.com/jquery-3.4.1.js

// ==/UserScript==
//http://code.jquery.com/jquery-3.4.1.min.js

const blackList = []
const postsBlackList = [];
const btnCss = `.btn-czarnoLista {
    padding: 2px 7px 2px 2px;
    color: #777;
    position: relative;
}`
const smallSizeStyle = `max-height: 0px; display: block;overflow: hidden;position: relative;`;
const czarnoListaOnStyle =`font-weight: bold; color:#80a41a;`;

const headerSelector = `.media-heading`;
const toolsSelector = `.microblog-footer`;
const toMakeSmallerSelector = `.microblog-wrapper`;
const commentsSelector = `.microblog-comments-container`;
const commentSendSeletor = `.comment-form`;
const czarnoListaBtnSelector = `.btn-czarnoLista`;
const timeSelector =`.timestamp`;
const dummyPlusSelector = `.read-more`

const czarnoListaBtn = `<a href="javascript:" czarnoLista="" class="btn btn-czarnoLista"><b>#</b> CzarnoLista</a>`

const czarnoListaAttr = `czarnoLista`;
const czarnoPostyKey = `czarnoPosty`;

function addCss(cssContent){
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = cssContent;
    document.getElementsByTagName('head')[0].appendChild(style);
}

function hidePosts(){
    $('article').toArray().forEach(p =>{
      if(shouldBeBanned(p))
          hidePost(p)
    });
}
function showPosts(){
    $('article').toArray().forEach(p =>showPost(p));
}

function hidePost(post){
    var jq_post = $(post);
    jq_post.find(toMakeSmallerSelector).attr('style',smallSizeStyle)
    jq_post.find(commentsSelector).css('visibility','hidden').css('height','0px');
    jq_post.find(commentSendSeletor).css('visibility','hidden').css('height','0px');
    jq_post.find(dummyPlusSelector).css('visibility','hidden').css('height','0px');
    jq_post.find(czarnoListaBtnSelector).attr('style',czarnoListaOnStyle);
    compressDate(post);
    post.setAttribute(czarnoListaAttr, true);

}
function showPost(post){
   var jq_post = $(post);
   jq_post.find(toMakeSmallerSelector).attr('style',"")
   jq_post.find(commentsSelector).css('visibility','visible').css('height','auto');
   jq_post.find(commentSendSeletor).css('visibility','visible').css('height','auto');
   jq_post.find(czarnoListaBtnSelector).attr('style',"").css('height','auto');
   jq_post.find(dummyPlusSelector).css('visibility','visible')
   decompressDate(post);
   post.setAttribute(czarnoListaAttr, "");
}
function compressDate(post){
    var head = $(post).find(headerSelector).first();
    head.find('a').css('margin-right','7px');
    $(post).find(timeSelector).first().appendTo(head);
}
function decompressDate(post){
    var head = $(post).find(headerSelector).first();
    $(post).find(timeSelector).first().insertAfter(head);
}
const whiteList = ['_flamingAccount','cerrato']; //prosił żeby go nie dało się banować

function shouldBeBanned(post){
    return isPostBanned(post) || isAuthorBanned(post);
}

function isAuthorBanned(post){
    const userName = $(post).find(headerSelector).toArray()[0].innerText;
    if(whiteList.includes(userName))
       return false;
    return blackList.includes(userName);
}
function isPostBanned(post){
    return postsBlackList.includes(getPostId(post));
}
async function loadBannedPostsList(){
    var banned = await GM.getValue(czarnoPostyKey);
    var bannedPosts = JSON.parse(banned)
    if(bannedPosts)
    {
        console.log(bannedPosts);
        bannedPosts.forEach(b => {postsBlackList.push(b)});
    }
}

function getPostId(post){
     var id = post.getAttribute('id');
     return id;
}
async function saveBannedPostsList(){
   await GM.setValue(czarnoPostyKey, JSON.stringify(postsBlackList));
}
function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}

(async function() {
        'use strict';
        addCss(btnCss);
        $(toolsSelector).append( czarnoListaBtn );
        $(czarnoListaBtnSelector).click( async (event) => {
            var btn = event.target;
            var article = btn.closest('article');
            if(article.getAttribute(czarnoListaAttr)){
                showPost(article);
                removeA(postsBlackList,getPostId(article))
                await saveBannedPostsList();
                console.log(postsBlackList);
            }else{
                hidePost(article);
                postsBlackList.push(getPostId(article))
                await saveBannedPostsList();
                console.log(postsBlackList);
            }
        });
        await loadBannedPostsList();
        hidePosts();
})();
_flamingAccount

Brakuje synchronizacji moglbym dopisac jako stronke z rest api ale pojawi sie problem podtytulem jak rozpoznac kto wysyla zapytania a tworzenie konta do skryptu w temper monkey to chyba przesada.

Dregorio

Trzeba to jako feature zgłosić by było na stronie domyślnie.

Azarien
2020-01-17 19:07

Co komu w Góglu przyszło do głowy żeby slashe w URL-ach zamienić na znaki większości? :[

Azarien

@vpiotr: mnie to się ukazało wczoraj.To normalne że się segmentuje użytkowników i na początku tylko część widzi nowy feature.

vpiotr

Chodzilo mi o kopiowanie adresu

WeiXiao
2020-01-17 18:35

Macie unikatową możliwość śledzenia rozwoju współczesnego, low lvlowego języka już od samych początków projektowania, a mianowicie: Rust od M$

https://github.com/microsoft/verona

Project Verona is a research programming language to explore the concept of concurrent ownership. We are providing a new concurrency model that seamlessly integrates ownership.

Project Verona is a research project being run by Microsoft Research with academic collaborators at Imperial College London. We are exploring research around language and runtime design for safe scalable memory management and compartmentalisation. The prototype here only covers the memory management aspects of the research.

How is Project Verona related to other languages?

Project Verona is a research language that is inspired by ideas from other languages:

  • Rust
  • Cyclone
  • Pony

Many of the ideas we built on have been popularised by Rust, such as borrowing and linearity, and Pony, such as reference capabilities.

When will this be a product?

This is a research project not a product. Sometimes research projects turn into products, e.g. F#, but normally they do not! We hope the ideas we research can benefit other languages.

WeiXiao

@Cr0w: jak zaczniemy commitować już teraz, to będziemy mogli aplikować na te oferty, gdzie wymagają 3 lat dośw., a technologia wyszła rok wcześniej xD

WeiXiao
2020-01-16 23:16

Zanim wrzucanie linków będzie nielegalne, to nadużyje sobie i wrzucę dlaczego Kernel Windowsa jest lepszy

I Contribute to the Windows Kernel - It's de best Kernel

  • We can't touch named pipes. Let's add %INTERNAL_NOTIFICATION_SYSTEM%! And let's make it inconsistent with virtually every other named NT primitive.
  • We can't expose %INTERNAL_NOTIFICATION_SYSTEM% to the rest of the world because we don't want to fill out paperwork and we're not losing sales because we only have 1990s-era Win32 APIs available publicly.
  • We can't touch DCOM. So we create another %C#_REMOTING_FLAVOR_OF_THE_WEEK%!
  • XNA. Need I say more?
  • Why would anyone need an archive format that supports files larger than 2GB?
  • Let's support symbolic links, but make sure that nobody can use them so we don't get blamed for security vulnerabilities (Great! Now we get to look sage and responsible!)
  • We can't touch Source Depot, so let's hack together SDX!
  • We can't touch SDX, so let's pretend for four releases that we're moving to TFS while not actually changing anything!
  • Oh god, the NTFS code is a purple opium-fueled Victorian horror novel that uses global recursive locks and SEH for flow control. Let's write ReFs instead. (And hey, let's start by copying and pasting the NTFS source code and removing half the features! Then let's add checksums, because checksums are cool, right, and now with checksums we're just as good as ZFS? Right? And who needs quotas anyway?)
  • We just can't be fucked to implement C11 support, and variadic templates were just too hard to implement in a year. (But ohmygosh we turned >"^" into a reference-counted pointer operator. Oh, and what's a reference cycle?
WeiXiao

@furious programming: ale to nie jest dialog, a lista wypunktowana? czy mam raka :D

furious programming

Dobre i to – przynajmniej widać podział. ;)

Leroy
2020-01-16 20:41

Tylko mi troche przeszkadza, że 'Mikroblog' zmienił się ostatnio w 'Mikroreklama'? blogi, podcasty, kanaly na youtube, vlogi...

vpiotr

Mi przeszkadza hejt na mikroblogach.

lion137

Mnie kompletnie uwala, co kto wrzuca; ale, rzeczywiście, przy postach sponsorowanych przydała by się wyraźna informacja - inaczej jest to mylące, że może autor ma z tym coś w spólnego i wrzuca żeby się podzielić. Ale nie narzucałbym, to zalezy od kultury wrzucającego.

WeiXiao
2020-01-16 20:14

Donald Trump opublikował na swoim twitterze takie coś:

We are helping Apple all of the time on TRADE and so many other issues, and yet they refuse to unlock phones used by killers, drug dealers and other violent criminal elements. They will have to step up to the plate and help our great Country, NOW! MAKE AMERICA GREAT AGAIN.

https://twitter.com/realDonaldTrump/status/1217228960964038658

Może to oznaczać m.in dwie rzeczy:

  • Apple ma faktycznie niezłe zabezpieczenia

  • Trump chciał zrobić reklamę Applowi

axde

Rok 2020, a ludzie nadal wierzą, że producent zwłaszcza globalny nie zostawia sobie możliwości odblokowania urządzenia. Poza tym ślepa wiara w "dobre Apple". Odmawiać to oni mogą policji, a nie FBI czy innym organizacjom tego typu. Zresztą NSA ma na tyle duże możliwości, że bez potrzeby angażowania Apple sobie z tym poradzi.

vpiotr

Wybieram bramke 2. A w zasadzie to 3: Trump chce wylapac tych mniej ogarnietych zeby na ulicach bylo spokojniej.

mateuszrus
2020-01-16 19:22

Cześć!

Dziś mam dla Ciebie wyjątkowy, bo pierwszy odcinek mojego Vloga! Musisz mi uwierzyć - nagrywać vlogi nie jest wcale łatwo.🔥

Jest on odpowiedzią na prośby wielu osób. W odcinku pod tytułem "Dlaczego zacząłem nagrywać VLOGi" odpowiadam na następujące pytania:

1️⃣ Dlaczego zacząłem nagrywać materiały video?

2️⃣ Jaka będzie forma vlogów?

3️⃣ Jak często będą wydawane odcinki?

Początek był trudny, długo się do tego zabierałem. Efekt, jaki osiągnęliśmy przy profesjonalnym montażu Patryka jest naprawdę dobry.😎

Oczywiście nie obyło się bez wpadek. Mimo wszystko jestem zadowolony z pracy jaką udało się wykonać. 🤓

Nie zwlekaj i sprawdź ten odcinek już teraz zostawiając przy okazji coś po sobie! 😊
https://www.youtube.com/watch?v=r-28KuevPoI

dadad

dobre ale nie rob wiecej.

mateuszrus

Dzięki za komentarze, od czegoś trzeba zacząć :> @WhiteLightning nagrywałem IPhone X ale do Tajlandii planuje poleciec już ze sprzętem lepszym