Saturday, March 9, 2024

The last Andoid Studio version for Windows 7

'Officially' ...

The last version of Android Studio that supports Windows 7 was 4.1.3. Since version 4.2.1, at least according to the 'System requirements' section, Windows 8 (or newer) is required. Release notes ([1], [2]) do not mention any change in minimum OS requirements.

Actually ...

At the moment of writing this, the latest stable version of Android Studio is Iguana (2023.2.1.23). It can be installed on Windows 7, but if you run it, you will receive the following error message:

The procedure entry point CreateAppContainerProfile could not be located in the dynamic link library USERENV.dll

You can avoid this error by starting studio.bat instead of studio64.exe (both located in Android Studio\bin directory). If you desire more information regarding the cause of the error, further explanation is available here.

If you want to play it safe, the last Android Studio version that runs without such a workaround is Hedgehog 2023.1.1 Patch 2, released on January 23, 2024. It is available for download in the Android Studio download archives. (It supports gradle up to version 8.2.2.)

Also note ...

This might not be the only issue you'll experience with new Android Studio installations. Starting with the platform tools version 34.0.5, adb does not support Windows 7 either. Although not mentioned in the release notes, this limitation is documented in the issue tracker (no, the error won't be fixed). Therefore, if you've installed the latest platform tools, you'll need to uninstall them and manually install platform tools version 34.0.4. The archive is available here.

Note for myself:

Recent projects are saved in the following file:

C:\Users\Viktor\AppData\Roaming\Google\AndroidStudio2023.1\options\recentProjects.xml


Thursday, February 22, 2024

Using Python to post to reddit programmatically

My reddit account was banned after testing, so I'll leave experimenting and integration aside for some time. I am posting this short code snippet here anyway, just for my own convenience when I decide to pull it out again.

import praw

from config import REDDIT_CLIENT_ID
from config import REDDIT_CLIENT_SECRET
from config import REDDIT_USERNAME
from config import REDDIT_PASSWORD

reddit = praw.Reddit(
    client_id     = REDDIT_CLIENT_ID,
    client_secret = REDDIT_CLIENT_SECRET,
    user_agent    = "web:com.example:v1.0.0 (by u/your_username)",
    username      = REDDIT_USERNAME,
    password      = REDDIT_PASSWORD,
)

submission = reddit.subreddit("sub_name").submit(
    title    = "Post (link) title",
    url      = "https://example.com/url")

print(submission.permalink)

Sunday, February 18, 2024

Google Search Console for keyword research

Awesome trick for finding your gaps in content. The original post on reddit is here:
Google search console for keyword research is super powerful [archive]

For my own copy-paste convenience, the regex expression is:
(?i)^(who|what|where|when|why|how)

Open-ended:
(?i)^(.*who.*|.*what.*|.*where.*|.*when.*|.*why.*|.*how.*)

Few notes:

  • I didn't find 'Search Results', instead I clicked on 'Performance', chose 12 month period and added query by clicking on the '+ New' button.
  • One of the commenters is giving an additional tip here to cross-reference the impression and click data from Search Console with Google Trends.
  • One of the commenters is suggesting to use an 'open-ended' variation of regex here. In my test case I haven't noticed any difference.
  • This will not show you the keywords that your content is not ranking for. For that kind of research you need to use other tools, e.g. Google Ads.

Wednesday, February 14, 2024

Novine.eu - web portal sa kratkim vijestima, dizajn odluke

Web stranica je dostupna ovdje: Novine.eu - kratke vijesti

Slijedi nekakav tok misli vezanih uz UX/UI design projekta, kopiran iz komunikacije sa kolegama, da ga imam na jednom mjestu, a ne u 100 različitih chat-ova.

2024.02.14:

Kako je sve work in progress, ovo nije konačna verzija footera. U principu ... odlučio sam se riješiti headera jer želim da u prvom fokusu bude kraćenje vijesti, a u drugom tek čitanje ostalih vijesti koje su već skraćene. Pa je header (zajedno sa mode toggle-om) završio u footeru. Tako da su glavne kategorije ostale u većem fontu. Ali ... morat ću dodati i linkove na društvene mreže u footer, oni će biti manji, tako da još moram vidjeti kako će se sve to uklopiti.

Da, stalno vidljiv mode toggle ... u početku sam mislio - pa ne mijenjaju ljudi valjda cijelo vrijeme dark/light mode, valjda imaju neku preferencu i to je to. Ali onda sam shvatio da se vijesti čitaju i na otvorenom i na zatvorenom i kad tuče sunce i sl. ... pa je to plus argument za stalno dostupan toggle. Inače ideja je da se footer pojavi na prvom scroll-u i da ostane sticky na dnu ekrana. Tako da bi bio dostupan gotovo uvijek. Moguće i uvjek, imam neke ideje koji bi mi oslobodile više vertikalnog prostora.

2024.02.17:

Razmišljao sam o sidebaru! I to iz razloga što onaj trenutni burger na svome mobitelu zapravo ne mogu dohvatiti palcem. Što je u suprotnosti sa infographicsima koje smo vidjeli na predavanjima. Tako da bi sidebar najvjerojatnije bio sa desne strane. Ali, za sada ostaje burger menu. Generalno, 70% surfera dolazi sa mobitela, a trenutni copy-paste linkova na mobitelima je prekompliciran za korištenje, pa sam se odlučio prioritet ipak dati razvoju nekog jednostavnog app-a koji bi skratio taj proces. Mislim da mi je to trenutno najslabija karika. 

Da, prebacio sam blok za skraćivanje na vrh. Bio je sa strane zbog nekakvog zamišljenog boljeg iskorištavanja prostora na širokim ekranima. Ali, kako sam dodao novu (i najelegantniju) opciju unosa linkova za kraćenje (možeš pogledat), trebalo mi je više prostora. Na accordion ne bi išao, kad već korisnik ne krati vijesti, neka barem klikne na neku od već skraćenih. Stoga ih ne bi sakrivao iza ekstra klika, pogotovo što mi je ideja dodati stupac 'Najčitanije' ... ili čak zamijeniti 'Posljednje skraćeno' sa njim. Ali da, nisam se još odlučio bi li koristio klasičnu paginaciju, 'učitaj više' ili infinite scroll za ostatak vijesti.

Da, menu je trenutno prisutan samo prvoj stranici. Više razloga ... kategorije i pod-kategorije još nisu do kraja razrađene. Svaki portal ih ima nešto drugačije definirane, ja ih još nisam ni 'popisao' sve, pa sam ostavio to za kasnije. Inače, negdje sam pročitao da su mega-menu-i loši za SEO. Nisam siguran da li je to istina ili ne. Kao, nije dobro kad svaka stranica linka na svaku drugu. Pa sam kao neki eksperiment odlučio da 'leaf' stranice (u mom slučaju - članci) na dnu zapravo uopće nemaju menu sa rubrikama. U protivnom, npr. članak iz rubrike 'Znanost' bi imao link na rubriku 'Crna kronika'. Google-ov ranking algoritam je tajna, tako da nitko zapravo ne zna da li to znači šta ili ne.

Tuesday, February 13, 2024

UserWarning: Detected filter using positional arguments. Prefer using the 'filter' keyword argument instead.

If you are receiving that warning with your google datastore queries, you can resolve the it by using google.cloud.datastore.query.PropertyFilter(property_name, operator, value) (docs). The code snippet would be the following:

from google.cloud import datastore
from google.cloud.datastore.query import PropertyFilter

query = datastore.Client().query(kind="MyKind")
query.add_filter(filter=PropertyFilter("property", "=", value))

Sunday, February 11, 2024

OpenAI Whisper i hrvatski jezik

Nadopuna 2024.02.09:

Evo, godinu dana nakon originalnog posta, dao sam Whisperu novu šansu. Whisper je nije potratio. Dapače, novi zaključak je da daje poprilično dobre rezultate u transkripciji hrvatskog jezika!

Originalni post: 

Virtualni seks i zamjena za obitelj, naziv je posljednje epizode Explore [1] na kojoj sam odlučio isprobati OpenAI-ov Whisper [2] za prepoznavanje hrvatskog jezika. Moj zaključak: neupotrebljivo. Neupotrebljivo u smislu da se opet treba poslušati audio kako bi se korigirao prepoznati dialog i, u nekim slučajevima, da bi se shvatilo o čemu se uopće govori.

Kod prepoznavanja govora do sada sam najbolje rezultate imao s Google Transcribe-om, ali on postoji samo na mobilnim uređajima. Google Docs također ima voice input, ali on ne podržava naš jezik. Ako poznajete neki speech-to-text konverter koji ima besplatan API ili je open-source pa se može instalirati na vlastito računalo, a da radi s hrvatskim jezikom - molim javite. Ne radim ništa ozbiljno, samo eksperimentiram.

Ostaje mi da nekom drugom prilikom isprobam text-to-speech, ali o tom po tom.

Za ilustraciju Whisper-a, slijedi dio 'prepoznate' konverzacije (isti timestamp kojim počinje i [1]):

I ovi zepla koji sad stavili na tržište svoje VR? Ima nekoliko proizvođaćali bez niz ozemaca, japanaca, amerikanaca sa tenoradi. Znači Kina pokušava naprajeti svoj uređaj tog tipa, ali to je tehnologija, ono kaj zkažo, ovo je absolutno vrh tehnologije, su uređaj za litografiju mikroprocesore. Dobro, silicija? Silicija vrti šte čestice su daraši i gleda šta se desi. Mi om problem sa atomskom fizikom, da mi nemožemo doznaš šta je nutra. I onda zamisli se... U nutra gdje? U atomu. Zamislimo sad, mislimo netko koje gleda auti se voze po cesti, je zanimena skako ti automobili su napravljene, ali ti ne možeš sad doći razmontirati auto. I onda šta se radi ciclotron? Uzme dan auto s jedne strane, uzme auto s jedne strane, onda ih sudari velikom brzinom i gledaš koji komadi lete. Zagljuče, ha, kotac je dio auto. Onda leti karboraтор, karboraтор je dio auto, ali kako karboraтора, da treba moži jaće zaletiti te auto, da se bolje razbija, onda je zaletiti, i onda umisto karboraтора sad leti vijak, leti membrana, leti je opruga i ti svatiš kako funkcionira auto, tako da bezkonašno puta sudaraš auto i gledaš, da leti je ciclotron, naprosto zalječeš atome jednog drugoga ili čestice i gledaš, da letio. Dobro, taj boson Hicksov još. No i dalje, samost je trebalo zašto je to sve skupa zaljepljeno. Znači ko je ljepilo drži skupa, to sve skupa gravitacija, i onda ideš još ja će razbiti, da vidiš da lete je zavareni komadi, kažem, vidi ovo je zavareno, tu je ljepilo. Došli smo do kraja ovog audiodijela, hvala vam ljepa, poštavan i slušati ili eksplore i do slušanja čujemo se opeti i moćemo interaktivno uživati jedni u drugima sljedeći gutirka. Hvala ljepa i do slušanja. Do slušanja.

[1] https://www.youtube.com/watch?v=9QUQBYyUels&t=2829
[2] https://openai.com/research/whisper

Tuesday, February 6, 2024

Plus hosting alternativa

06:22 AM Pokušavam unijeti TXT record kako bi u Google Search Console-i autentificirao vlastitu domenu. Plus Hosting DNS editor daje poruku: "Greška pri spremanju zapisa!". Šaljem support request. Prilikom klika na "Send" pomislim kako su prošli dani kada su promptno reagirali i kako odgovor sigurno neću dobiti prije 09:00 AM.

10:45 AM Stiže odgovor. Da ja njima pošaljem DNS zapis i da će ga oni podesiti. Nope. Nemam namjeru čekati satima kad god poželim nešto ažurirati. Pitam zar ne mogu sam podesiti vlastitu domenu.

10:54 AM Da oni moraju vidjeti koja se pogreška javlja i da je svakako jednostavnije da oni podese domenu. Šaljem odgovor da sam im već rekao koja se pogreška javlja.

11:04 Stiže odgovor da im moram poslati DNS zapis kojeg želim podesiti, jer da možda postoji već isti pa da se promjene ne mogu spremiti. Inače, DNS editor nema niti jedan meni vidljiv zapis. Šaljem odgovor da otključaju domenu i da je prenosim kod nekog drugog registrara.

Sljedeći dan: odabrao sam spaceship. Domena prebačena u jednoj minuti, u drugoj minuti sam podesio DNS record. eu domene u spaceship-u su €4.64 dok su u Plus-u €9.29.

Plus Hosting, hvala još jednom što odluku o prelasku kod drugog registrara činite tako jednostavnom!