Thursday, December 22, 2022

How to ensure that Android displays non-ascii unicode characters properly

I was trying to show a button that has an leftwards arrow character as it's text. The leftwards arrow is unicode character u2190. The relevant code snippet is the following:

<Button
    app:layout_row="0"
    app:layout_column="2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="\u2190"
    android:textSize="@dimen/font_size"
    app:layout_columnWeight="1"
    style="?android:attr/buttonBarButtonStyle"
    android:onClick="onKeyPressed"
/>

On most devices I was getting the expected result (left image), while on Nokia 1 API Level 27 (available on Firebase Test Lab) I got something that might be some han glyph (right image).

I have resolved the problem by finding a TTF font with permissive license that had leftwards arrow correctly mapped. I have added it in res/font directory and referenced it from the layout file in the following way:

<Button
    android:fontFamily="@font/custom"
    app:fontFamily="@font/custom"
    app:layout_row="0"
    app:layout_column="2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="\u2190"
    android:textSize="@dimen/font_size"
    app:layout_columnWeight="1"
    style="?android:attr/buttonBarButtonStyle"
    android:onClick="onKeyPressed"
/>

Now the leftwards arrow is displayed properly on testing devices, including the one that previously was showing a different symbol.

Additionally, I used FontForge to subset the font so that it contains only the necessary character.

Also answered on StackOverflow.

 

Wednesday, November 30, 2022

How to get APK files from your Android phone

Make sure that you have ADB installed and phone connected via USB cable. 

The following command will list all packages that are installed on your phone:
./adb shell pm list packages

The following command will give you the path to the APK for a given package name:
./adb shell pm path your.package.name

Use the obtained path name to pull the APK file from the device:
./adb pull /directory/path/example/WantedApp.apk .

That should be it!


How to connect Nokia 6.1 phone to ADB (Android Debug Bridge)

Recently I got Nokia 6.1 android phone. ADB was not able to see it after I plugged it in via USB cable. At least not with default drivers that were installed on my Windows 7 machine. In order to make it work i needed to:

  1. Install the Google USB Driver through Android Studio's SDK Manager

  2. Edit the android_winusb.inf file:
    • Go to C:\Users\[User]\AppData\Local\Android\Sdk\extras\google\usb_driver folder
    • Find the file android_winusb.inf 
    • In both [Google.NTx86] and [Google.NTamd64] sections add the following:
      ;Nokia 6.1
      %SingleAdbInterface%    = USB_Install, USB\VID_0489&PID_C001&MI_02
      %CompositeAdbInterface% = USB_Install, USB\VID_0489&PID_C001&REV_0404&MI_02


      These values are obtained from your PC's Device Manager and they should be the same for all Nokia 6.1 devices. Once in Device Manager, Nokia 6.1 should be listed under 'Other devices'. Right-click on it, then select 'Properties'. Under 'Details' tab chose 'Hardware Ids' property.

  3.  Edit the adb_usb.ini file
    • Go to C:\Users\[User]\.android folder
    • Find the file adb_usb.ini
    • Add the line with the following content: 0x0489

  4. 'Install' drivers:
    • Go back to Device Manager and find the Nokia 6.1 there (under 'Other devices'). 
    • Right click, Update drivers and select the folder from the step 2.
     
  5. Restart the ADB

That should be it!


Monday, November 28, 2022

Challenges in Replacing Fossil Fuels with Green Energy: Mineral Shortages and Timelines

Do you know why fossil fuels will never be fully replaced with green energy at the current rate of consumption? It's because there isn't enough minerals available for renewable tech devices, not even for the first generation that is supposed to phase out the old machines. For example, we need 4.5 billion tonnes of copper, while global reserves are less than 0.9 billion tonnes (20% of our needs). The situation is even worse with lithium, as our planet only has 2.3% of what we need.

Even if we had access to the necessary minerals, it's already too late to mine them. It would take approximately 190 years to extract all the necessary copper, and around 10,000 years for lithium.

I am including the data tables in this post, which are from the presentation given by Professor Simon Michaux. I highly recommend watching it here: https://www.youtube.com/watch?v=MBVmnKuBocc

In any case, we can forget about achieving 'net zero.' It simply cannot happen within the timeline we are all supposed to pledge to. This will have numerous and severe consequences, but I will stop here and allow you to contemplate the implications.




Tuesday, November 22, 2022

Growing your business - podcast summary

Listen to the complete Andrew Warner's (Mixergy) interview with Kevin Sahin, founder of ScrapingBee (from $0 to $1.5 million USD annual recurring revenue in 3 years). Archived downloadable podcast is here.

Tactics Kevin used to grow his business:

  • Learn from guys who made it. Ask them for advice.
  • Build the audience first. Your first customers will come from this group of people. Blog about the subject before building the product/service. That way you'll build the search engine ranking. 
  • Once you have enough content, write an e-book covering the subject. For help with self-publishing, see the book recommendation below.
  • Now that you have an audience and know their needs, now is the time to create the software.
  • Market it on forums (sub-reddits) that cover the subject. 
  • Be active with your customers, talk with them, discover their problems and keep on blogging about it. Creating more niche content will further improve your web page rank.
  • To get your customers on the phone - offer them a discount (for example, you can announce it via banner on the website).

Book recommendation (Amazon affiliate link):

Saturday, November 19, 2022

How to sync your website via GitHub

This 'tutorial' is for my own convenience. Whenever I am launching a new web site I tend to repeat the same procedure. It's much easier to follow it if it's written down at one place. So here it is ... (no more looking at .bash_history and browser history to figure out what I did the last time!)

I am assuming that you have just created your dummy/hello world website, perhaps even by some tool or script (e.g. cPanel's 'new python app' or something similar). The steps you need to take now are the following:

  1. Create (private) project on GitHub.
  2. Import the created project in your preferred IDE.
  3. Clean your (remote) website directory.
    Delete all empty/unused directories, if any.
  4. Transfer all remaining files to your project's directory.
    Pick your preferred method. For me the easiest is compress/download/uncompress.
  5. Add 'usual' files to .gitignore:
    e.g. project files and directories, compiled binaries, server generated temp files, etc.
  6. Add files to git index.
  7. Commit and push. 

We are done with the first part. Since we won't be doing code changes on our web server, we'll configure it in a way that it can only pull from our repository. So, on our server:

  1. Generate public/private RSA key pair:
    1. Start ssh-keygen.
    2. Enter the file name, for example your project's name.
    3. We won't need the passphrase.
  2. Add deploy key to your GitHub repository:
    Under Settings, click on Deploy keys and  copy-paste your public key there.
  3. Authenticate from your server to GitHub via SSH:
    ssh -i ~/.ssh/private_key_file -T git@github.com
  4. Since neither the repository nor our destination directory are empty, we will execute the following command sequence (in destination directory!):
    git init
    git remote add origin git@github.com:username/project.git
    git pull
    git checkout master -f
    git branch --set-upstream-to origin/master

We are done. Now we can add the following bash script for easier pulling from our web server's directory:
#! /bin/bash

eval `ssh-agent -s`
ssh-add ~/.ssh/private_key_file
git pull

That would be all!
P.S.: Don't forget to change file permissions once you sync them!

Promoting your product or service - podcast summary

My notes on Rebel Entrepreneur Podcast episode named Promote, promote, promote (interview with Jaymie Dylan). Downloadable episode is here.

If you build it, they will come no one will come. In order to grow your business you need to sell. In order to sell, you need to promote.

Reach to people you know. Reach to people you don't know but are following you on your social networks. (You might need to follow them back in order to message them directly.)

Example message:

Hello [name],

thank you for [following my channel | liking my posts]. Did you know that I am launching  [product | service] on [date]? It is [more about your product or service] and I am really [excited | nervous | ...]. It would mean so much to me if you could check it out and share it with people that you think might be interested. Here is the link ... Do you mind if I send you a reminder again on the actual launch date?

As well, reach those who have been in the same shoes before (needed to promote, launched similar product or service) and ask for advice. If you don't know such a person directly, ask a common connection for an intro.

Sales, marketing and promotion should be daily activity.  Don't do them on and off.

Don't make generic requests. Give people instructions for sharing. Describe how to share, make draft text for sharing. The more specific your request is, the easier for them is to help you - the more likely they will help you.

 

Monday, November 14, 2022

Summer of 2022 swimming

For my own record: the summer of 2022. ended two days ago. Sad to finally admit it. 🙃 That day I heard a cricket and day before I went for a swim. Sea temperature was 20°C still. To sum it all up, I swam:
 
1 × 3.5 km (that distance took me too long)
67 × 2.5 km
23 × 0.5 km (decided to shorten the distance after I came back home with purple lips - sea temperature wasn't a problem but it was hard to warm up afterwards ... and I didn't like the idea of going to the beach in socks and long sleeves).
 
Overall, 91 times (which is more than last year) and 182.5 km (which is less than last year). In my virtual voyage I swam back from Italy to Croatia. Next year I plan to reach Montenegro. 🤣
 
P.S.: If you want to lose 10 kg in two seasons and get yourself ripped, there you have a recipe. 😎



Successful presentation template - podcast summary

My takeouts from amazing Mixergy interview (from 2013) with Hugh Culver.

The website they are talking about is not alive anymore, but it has been archived. The page with useful resources (tools, videos, PDFs, book recommendations, etc.) is available here.

Hugh Culver's youtube channel is also worth checking out. It is full with short videos on speaking, presentations, business growth, etc. 

So, on presentation ...

Presentation should start with a problem

"
You have to tell the audience the problem that you know that they have. Everybody has a problem. If you’re speaking to an audience of entrepreneurs, they’ve got problems around profit, net returns, staffing, technology, overwhelm, doubt, self-confidence. [...]

They need to know in the first three minutes that you understand them. [...]

You need to start with a story or statistics or an example that makes the audience lean in and say to themselves, “Wow, he really knows me. That’s exactly what I’m going through.”

Then you tell your story

"
Then you go into your story, and your story is how you’ve been there, you’ve had that problem, and ideally the story should be from when I had it to now I don’t have it.

Ideally it should be, “I had that problem, and now I’ve come up with some insights, and I don’t have it as much anymore, so I’m not as overwhelmed. My profit is better. I’ve had these client breakthroughs. I’ve solved this issue around technology.”

Then you move into the solution overview

"
And the solutions is, first of all, “Let me give you an overview. Let me give you some context. There’s a better way to run your business. This is the way you should think about business. Here’s the metaphor. Here’s the analogy I use.” It’s an overview.

Then you go into your lessons (story - lesson - application)

"
Then you go into your lessons, and the lesson, or the points, you want to share with them would follow this formula: story, lesson, application. So you say, “Let me tell you a story.” You tell them a little vignette, a little client story, something that happened, and then you say, “This is what I learned.” That’s lesson number one. Then you say, “Here’s how you apply it. Let me give you examples.”

Now you go back to the problem

"
Now you go back to the problem. So now you mention the problem again. You remind them of why this is so important. You remind them of where they don’t want to go back to.

You give them another problem example, you challenge them to start applying the lesson and notice the difference. You talk about the first steps they need to make.

Wrap it up


Friday, November 11, 2022

Marketing strategies - podcast summary

Gee. I just listened to a podcast episode from 2010. It was a Techzing's interview with Ilya Lichtenstein from insight.io. I wonder which marketing strategies they talked about would still give results today. 

In any case, the full podcast episode is available here: TZ Interview – Ilya Lichtenstein / insight.io. Archived downloadable podcast is here. My notes and Ilya's book recommendation (kindle version is less than a $1 USD!) are following:

 

Marketing strategies

Facebook ads 

  • target people who liked competing companies and/or their product 
  • target people who liked the relevant product (e.g. android phone for android app ad)
  •  Ad image is very important
    • it draws attention to our ad (it is an ad for our ad)
    • only after image is seen the rest of ad is read, the real sale starts then - with the ad title and header
  1. discover who the competitors are
  2. bid for keywords that name and describe them and their products. You can add additional term like: review, discussion, etc.

Most likely, competitors are not bidding for their own keywords. That means that our ad might show up before organic search results.

Discover which pages send the most traffic or generate the best conversion. Contact site owners and ask for direct ad placement. It can be beneficial for both parties as Google (and their 30% fee) is avoided. This way our ad is not shown among other ads that target the same keywords, i.e. only our ad will be shown at this place.

General

Look where the competitors appear (which forums, blogs, etc.). If someone's blog post is a review of a competitors product/service, contact the blogger directly and pay him for a banner ad of your product that will show up above the review (or in a sidebar or wherever). If competitor is a big company this can generate big traffic. 

 

Book recommendation

Amazon affiliate link:
 
 

Monday, October 17, 2022

Running Python (Flask) server on a shared hosting environment

If you have purchased a domain name through some other domain name registrar and not through your shared hosting provider, first you'll need to ...

1. Point nameservers to your shared hosting provider

The following instructions are for Namecheap: 

  • from the menu on the left side, open the Domain List and
  • click on button MANAGE next to your domain name.


  • Under NAMESERVERS, instead of Namecheap BasicDNS select Custom DNS.


  • Copy-paste name servers that your shared hosting has provided. 
  • Save the modifications by clicking on the green check mark.



2. Create an Addon Domain in shared hosting's cPanel

  • Once you are in cPanel, click on Addon Domains
  • Type in your new domain name and 
  • click on Add Domain button.

3. Setup Python App

  • Now go back to cPanel and click on Setup Python App.


  • Click on Create Application button.


  • Fill out the form by providing:

    • python version, 
    • application root directory (it was created by the system in step 2), 
    • application url (your domain name), 
    • main.py as application startup file and  
    • app as application entry point. 
    • Don't forget to add path to the passenger log file, for example logs/passenger.log
  • Once you do all that, click on CREATE button.

The app is created and your barebones python site is already running. You can check by it browsing to your new domain. If nameserver settings from step 1 still haven't propagated across the internet, you can open the site as a subdomain of your main domain site.

4. Install Flask

Once the python app is created at the top of the scree the following message will be displayed:

Enter to the virtual environment. To enter to virtual environment, run the command: ...

Copy the command, from cPanel open the terminal, paste and run the command there. Next, run: pip install Flask

To verify the installation, run: flask --version

After the installation is done, we'll modify our main.py application startup file. A minimal Flask application would be:

from flask import Flask


app = Flask(__name__)


@app.route
("/")

def hello_world():
    return
"<p>Hello, World!</p>"

Save the changes that you have made and restart the python app. Browse to your domain again and verify that everything is fine. You are done!

Next things you might consider doing:


Sunday, October 9, 2022

Awesome open source games

Disclaimer: I am using my computer to either learn or create something. Currently I don't play any games, so I haven't played these either. This post is actually for future myself who has a bit different priorities. 😃

Update 203.05.30: found a list of FLOSS games on Steam.

The following three open source games have attracted my attention. Let me know in the comments about other open source games that you find to be awesome.

More about each game ...

 

0 A.D.

Inspired by: Age of Empires II: The Age of Kings (1999)
Website: https://play0ad.com
Code repository: https://trac.wildfiregames.com/browser
Programming languages: C++, JavaScript

 
Short description from the game's website:
0 A.D. is a free, open-source, historical Real Time Strategy (RTS) game currently under development by Wildfire Games, a global group of volunteer game developers. As the leader of an ancient civilization, you must gather the resources you need to raise a military force and dominate your enemies. 
[...] 
We intend to portray some of the major civilizations over the millennium of 500 B.C. to 500 A.D. (Hence the midpoint, zero.) 
[...] 
We put a strong emphasis on historical accuracy while developing 0 A.D. We plan all our units and all our buildings based on reconstructions of how the units and the buildings might have looked like in the ancient world. We even name them in the original languages, such as Greek and Latin.

 

Endless sky

Inspired by: Escape velocity (1996) → Privateer (1993) → Elite (1984)
Website: https://endless-sky.github.io
Code repository: https://github.com/endless-sky
Programming languages: C++

Short description from the game's website:

Endless Sky is a 2D space trading and combat game similar to the classic Escape Velocity series. Explore other star systems. Earn money by trading, carrying passengers, or completing missions. Use your earnings to buy a better ship or to upgrade the weapons and engines on your current one. Blow up pirates. Take sides in a civil war. Or leave human space behind and hope to find friendly aliens whose culture is more civilized than your own.

Small note: Writing this post I found out that Elite (1984) precedes Sid Meier's Pirates (1987),  I always thought it's the other way around.


Freeciv

Inspired by: Civilization II (1996)
Website: https://www.freeciv.org, https://www.freecivweb.org
Code repository: https://github.com/freeciv
Programming languages: C (desktop); JavaScript, HTML5 and WebGL (web)

Short description from Freeciv Wikipedia page:

Freeciv is a single and multiplayer turn-based strategy game for workstations and personal computers inspired by the proprietary Sid Meier's Civilization series. It is available for most desktop computer operating systems and available in an online browser version. [...] The game's default settings are closest to Civilization II, in both gameplay and graphics, including the units and the isometric grid. Freeciv is playable online at fciv.net and freecivweb.org

Players take the role of tribal leaders in 4000 B.C. who must guide their peoples through the centuries. Over time, new technologies are discovered, which allow the construction of new city buildings and the deployment of new units. Players can wage war on one another or form diplomatic relationships.

The game ends when one civilization has eradicated all others or accomplished the goal of space colonization, or at a given deadline. If more than one civilization remains at the deadline, the player with the highest score wins. Points are awarded for the size of a civilization, its wealth, and cultural and scientific advances.


Tuesday, October 4, 2022

Typing curly braces { in Eclipse

By default Ctrl+Alt+B keystroke acts as skip breakpoints shortcut. You need to unbind it by ...

  1. ... going to Window > Preferences
  2. In the search box on the left side type in binding
  3. Click on Keys under General.
  4. Now in the search box on the right side type in Alt+B.
  5. Click on Skip All Breakpoints list item.
  6. Click on Unbind Command button.
  7. Click on Apply and Close button.

All thanks go to StackOverflow answer here.

Saturday, October 1, 2022

Force HTTPS and non-www domain via .htaccess file

RewriteEngine On

# match any URL with www and rewrite it to https without the www
RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
RewriteRule (.*) https://%2%{REQUEST_URI} [L,R=301]

# match urls that are non https (without the www)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^(www\.)(.*) [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Don't forget to put the snippet at the top of the .htaccess file.

All thanks go to StackOverflow answer here.

Monday, September 26, 2022

How to disable Cross-Origin Request Blocking for local files (in Firefox)

Go to about:config and change the flag security.fileuri.strict_origin_policy to false. Done!

 All thanks go to StackOverflow answer here.

Thursday, August 4, 2022

Euro konverter android app

Recently I published an android app for conversion calculation of Croatian Kuna (HRK) to Euro (EUR) and vice versa, using the fixed exchange rate of 1 € = 7.53450 kn. 

The app is free and currently contains no ads. It can be downloaded from the Google Play Store at the following URL:
https://play.google.com/store/apps/details?id=com.eurokonverter

It has a dedicated web page here:
https://eurokonverter.com

Oh, and the app is available only in Croatia. ;-)

How to boot Bodhi linux directly to command prompt/terminal/console?

It involves editing grub configuration file, and the process is described in detail here:
https://ubuntuhandbook.org/index.php/2020/05/boot-ubuntu-20-04-command-console/

Now, if you want to start UI from the console ... in my case enlightenment_start command did not work. I was receiving the following error:
Moksha cannot initialize Ecore_X!

The solution was to add the following line to ~/.xinitrc file:
exec enlightenment_start
 

... and start UI with startx command.

Saturday, June 4, 2022

How to track custom event in Google Analytics

It's a simple javascript one-liner:

gtag("event", "your_event_name");

That's it!


Monday, May 30, 2022

Future climate effects on crops

Link to the article:
A global dataset for the projected impacts of climate change on four major crops [Archive]

From the article:

The overall effects of climate change on crop yields are negative, with the mean and median of −11% and −6.2% without adaptation and −4.6% and −1.6% with adaptation, respectively. The median per-decade yield impact without adaptation is −2.1% for maize, −1.2% for soybean, −0.7% for rice, and −1.2% for wheat, which are consistent with previous IPCC assessments. The median per-warming-degree impact is −7.1% for maize, −4.0% for soybean, −2.3% for rice, and −3.7% for wheat. [...] Maize consistently shows the largest negative impacts, while rice shows the least.
The climate change impacts by IPCC regional groups reveals that Europe and North America are expected to be less affected by climate change in the mid-century (MC) and the end-century (EC) than Africa, Central and South America, particularly for maize and soybean. Both positive and negative effects are mixed in all regions.
[...]
Adaptation potential averaged 7.3% in MC and 11.6% in EC, which is not sufficient to offset the negative impacts, particularly in currently warmer regions. Residual damages will thus likely remain even with adaptation, which is also supported by other lines of evidence.


Tuesday, May 24, 2022

Bond ETF's still performing in 2022 (UCITS, accumulating)

You can invest in these ETF's through Interactive Brokers. At he moment of writing they are not available on Trading212 platform.

If you don't have Interactive Brokers account, you can open it using my referral link. By opening the account using the provided link you can earn up to USD 1,000 in IBKR stock (NASDAQ: IBKR), i.e. $1 worth of stock for each $100 in your net deposits during the first year following the date of the first deposit. My referral link is here: InteractiveBrokers.

If you don't have Trading212 account, you can open it using my referral code. Using the provide code, you can earn a free share worth up to €100. The code is: 11Q8O6MfWX

The ETF list follows:

Name TER % Investment strategy
Amundi Prime US Treasury Bond 0-1 Y UCITS ETF DR USD (C)
ISIN: LU2182388665
WKN: A2P6TS
Tickers(s): PR1T

0.05 The Solactive US Treasury 0-1 Year Bond index tracks US-Treasury bonds. Time to maturity: 0-1 year. Rating: Investment Grade.
iShares USD Short Duration High Yield Corporate Bond UCITS ETF USD (Acc)
ISIN: IE00BZ17CN18
WKN: A2JNLH
Tickers(s): OM3J, SDHA

0.45 The iBoxx® USD Liquid High Yield 0-5 Capped index tracks the most liquid USD denominated corporate bonds with a sub-investment grade rating. Time to maturity: 0-5 years.
JPMorgan BetaBuilders US Treasury Bond 0-1 yr UCITS ETF USD
ISIN: IE00BJK3WF00
WKN: A2PK49
Tickers(s): BBIL, BBLL

0.07 The ICE US Treasury 0-1 index tracks US Dollar denominated government bonds issued by the US Treasury. Time to maturity: 0-1 years. Rating: Investment Grade.
JPMorgan BetaBuilders US Treasury Bond 1-3 yr UCITS ETF USD
ISIN: IE00BD9MMD49
WKN: A2JG3B
Tickers(s): JA13, JU13, J13U

0.07 The JP Morgan Government Bond US 1-3 index tracks US Dollar-denominated fixed rate government bonds that have been issued by the US Treasury with a maturity of between one and three years. Rating: Investment Grade.
JPMorgan Global High Yield Corporate Bond Multi-Factor UCITS ETF
ISIN: IE00BKKCKJ46
WKN: A2PWZJ
Tickers(s): JGHY

0.35 The JP Morgan Global High Yield Multi-Factor index tracks high yield corporate bonds worldwide. All maturities are included. Rating: Sub-Investment Grade.
SPDR Bloomberg 1-3 Month T-Bill UCITS ETF
ISIN: IE00BJXRT698
WKN: A2PM4Q
Tickers(s): TBIL, ZPR1

0.10 The Bloomberg US Treasury 1-3m index tracks US-Dollar denominated government bonds issued by the US Treasury. Time to maturity: 1-3 months. Rating: Investment Grade.
Xtrackers US Treasuries Ultrashort Bond UCITS ETF 1C
ISIN: IE00BM97MR69
WKN: A2P7TP
Tickers(s): XT01
0.07 The FTSE US Treasury Short Duration index tracks US Dollar denominated short-term government bonds issued by the US Treasury. Maturity: 1-3 years. Rating: AAA

Inflation linked bond ETF's (UCITS, accumulating)

Here is the (probably incomplete) list of inflation linked bond ETF's. They are all UCITS and accumulating.

You can invest in these ETF's through Interactive Brokers or Trading212 platform.

If you don't have Interactive Brokers account, you can open it using my referral link. By opening the account using the provided link you can earn up to USD 1,000 in IBKR stock (NASDAQ: IBKR), i.e. $1 worth of stock for each $100 in your net deposits during the first year following the date of the first deposit. My referral link is here: InteractiveBrokers.

If you don't have Trading212 account, you can open it using my referral code. Using the provide code, you can earn a free share worth up to €100. The code is: 11Q8O6MfWX

The ETF list follows:

iShares Global Inflation Linked Government Bond UCITS ETF USD (Acc)
ISIN IE00B3B8PX14, WKN A0Q41X

The Bloomberg World Government Inflation-Linked Bond index tracks developed world government inflation-linked bonds issued in domestic currency.
 

iShares Global Inflation Linked Government Bond UCITS ETF EUR Hedged (Acc)
ISIN IE00BKPT2S34, WKN A2P1KU

The Bloomberg World Government Inflation-Linked Bond (EUR Hedged) index tracks developed world government inflation-linked bonds issued in domestic currency. All maturities are included. Rating: Investment Grade. Currency hedged to Euro (EUR). 
 

iShares Euro Inflation Linked Government Bond UCITS ETF
ISIN IE00B0M62X26, WKN A0HGV1

The Bloomberg Euro Government Inflation Linked Bond index tracks eurozone government inflation-linked bonds.
 

iShares USD TIPS UCITS ETF USD (Acc)
ISIN IE00B1FZSC47, WKN A0LGP8

The Bloomberg US Government Inflation-Linked Bond index tracks US Treasury Inflation-Protected Securities (TIPS).
 

iShares USD TIPS UCITS ETF EUR Hedged (Acc)
ISIN IE00BDZVH966, WKN A2JDYH

The Bloomberg US Government Inflation-Linked Bond (EUR Hedged) index tracks US Treasury Inflation-Protected Securities (TIPS). Currency hedged to Euro (EUR).

Lyxor Euro Government Inflation Linked Bond (DR) UCITS ETF - Acc
ISIN LU1650491282, WKN LYX0XL

The Bloomberg Euro Government Inflation Linked Bond index tracks eurozone government inflation-linked bonds.

UBS ETF (LU) Bloomberg TIPS 1-10 UCITS ETF (hedged to EUR) Acc
ISIN LU1459801780, WKN A2APAW 

The Bloomberg US Government 1-10 Year Inflation-Linked Bond (EUR Hedged) index tracks US Treasury Inflation-Protected Securities (TIPS). Time to maturity 1-10 years. Currency hedged to Euro (EUR).

Xtrackers Global Inflation-Linked Bond UCITS ETF 5C
ISIN LU0908508814, WKN DBX0NN

The Bloomberg World Government Inflation-Linked Bond index tracks developed world government inflation-linked bonds issued in domestic currency.

Xtrackers Global Inflation-Linked Bond UCITS ETF 1C EUR hedged
ISIN LU0290357929, WKN DBX0AL

The Bloomberg World Government Inflation-Linked Bond (EUR Hedged) index tracks developed world government inflation-linked bonds issued in domestic currency. All maturities are included. Rating: Investment Grade. Currency hedged to Euro (EUR).

Xtrackers Eurozone Inflation-Linked Bond UCITS ETF 1C
ISIN LU0290358224, WKN DBX0AM

The Bloomberg Euro Government Inflation Linked Bond index tracks eurozone government inflation-linked bonds.

Amundi Index US Government Inflation-Linked Bond UCITS ETF DR Hedged EUR (C)
ISIN LU2339917168, WKN A3CPLL

The Bloomberg US Government Inflation-Linked Bond (EUR Hedged) index tracks US Treasury Inflation-Protected Securities (TIPS). Currency hedged to Euro (EUR).

Wednesday, May 18, 2022

Berkshire Hathaway, last quarter changes

The table shows only changes. The last column shows the stock price change the next day the quarterly report was published.
Name Change Quarter-1 Quarter-2 Next day change
ABBVIE INC -3033561 0 3033561
ACTIVISION BLIZZARD INC 49657101 64315222 14658121                    0.69%
ALLY FINL INC 8969420 8969420 0                    6.22%
APPLE INC 3787856 890923410 887135554                    2.56%
BRISTOL-MYERS SQUIBB CO -5202674 0 5202674
CELANESE CORP DEL 7880998 7880998 0                    7.49%
CHEVRON CORP NEW 120933081 159178117 38245036                    0.59%
CITIGROUP INC 55155797 55155797 0                    7.56%
FLOOR & DECOR HLDGS INC 3936291 4780000 843709                    3.30%
GENERAL MTRS CO 2045847 62045847 60000000                    2.70%
HP INC 104476035 104476035 0                    5.63%
KROGER CO -3427647 57985263 61412910
LIBERTY MEDIA CORP DEL 5603705 7722451 2118746                    1.99%
MARKEL CORP 420293 420293 0                    2.94%
MCKESSON CORP 2921975 2921975 0                    1.63%
OCCIDENTAL PETE CORP 136373000 136373000 0                    0.32%
PARAMOUNT GLOBAL 68947760 68947760 0                  15.31%
RH 353453 2170000 1816547                    6.59%
ROYALTY PHARMA PLC -7151896 1496372 8648268
STORE CAP CORP -9660357 14754811 24415168
VERIZON COMMUNICATION -157444464 1380111 158824575
WELLS FARGO & CO NEW -675054 0 675054

Saturday, May 7, 2022

How to search for backlinks

Originally published on 2022.05.07. Last update on 2024.02.18.

In my case google is giving the most results, but try other search engines as well. Search term should be like the following:

link:pageurl -site:domain.com

Example (using my old blog post):

link:https://viktorbresan.blogspot.com/2012/09/intentservice-and-inter-process.html -site:viktorbresan.blogspot.com

If you want to exclude a certain file type from your results, you can do it for example, in the following way:

-filetype:pdf

 

Alternatives

Also check Ahrefs Backlink Checker and Neil Patel (Ubersuggest) Backlink Checker.

Bing Webmaster Tools also have backlink checker. Under 'SEO', click on 'Backlinks'. Under 'Backlinks to any site', you can add any other domain and compare their backlinks.


 


Zašto V3AA a ne VWCE

Osobno mi je zanimljiva logika ljudi koji žele postići bolju/sigurniju/lagodniju budućnost investirajući u kompanije čije poslovanje devastira okoliš i time tu budućnost čini - nepodnošljivom. 


Sljedeći članak piše o kompanijama koje su odgovorne za deforestaciju Amazonije. Neke (nisam provjeravao sve) od tih kompanija se nalaze u sastavu VWCE-a, ali ne i u sastavu V3AA.

How Your 401(k) Is Helping Destroy the Amazon Rainforest
The growing financialization of Brazilian agribusiness is enabling foreign investment in the industry most responsible for deforestation.


Po meni [upitnih] par postotnih bodova većeg prinosa ne opravdavaju ulaganja u takve kompanije.


Wednesday, May 4, 2022

How to install Tweepy on Google App Engine that runs Python 2.7

In src direcory:
  1. make another directory named lib

  2. run the following command:
    pip2.7 install -t lib/ tweepy==3.10.0

    (Tweepy 3.10.0 is the last version to support Python 2.7 and Python 3.5.)

  3. create a file named appengine_config.py with the following content:
    from google.appengine.ext import vendor
    vendor.add("lib")

  4. in app.yaml add the following:
    libraries:
    - name: ssl
      version: latest

And that should be it!

 

Friday, April 22, 2022

A list of UX/UI courses and specializations

Updated: 2023.06.29.

Here is the list of UX/UI courses that I know of. Still haven't taken a single one of them (yet) so I can't give you my personal recommendation. UX/UI is on my TODO.

Let me know in the comments which one you liked and why. Or perhaps tell about some other worthy UX/UI course that I haven't mentioned here. Happy learning!

 

🔗 Google UX Design Professional Certificate on Coursera

Courses:

  1. Foundations of User Experience (UX) Design
  2. Start the UX Design Process: Empathize, Define, and Ideate
  3. Build Wireframes and Low-Fidelity Prototypes
  4. Conduct UX Research and Test Early Concepts
  5. Create High-Fidelity Designs and Prototypes in Figma
  6. Responsive Web Design in Adobe XD
  7. Design a User Experience for Social Good & Prepare for Jobs

 

🔗 User Experience Research and Design Specialization on Coursera

(University of Michigan)

Courses:

  1. Introduction to User Experience Principles and Processes
  2. Understanding User Needs
  3. Evaluating Designs with Users
  4. UX Design: From Concept to Prototype
  5. UX Research at Scale: Surveys, Analytics, Online Testing
  6. UX (User Experience) Capstone

 

🔗 Graphic Design Elements for Non-Designers Specialization on Coursera

(University of Colorado Boulder)

  1. Basic Elements of Design: Design Principles and Software Overview
  2. Graphic Elements of Design: Color Theory and Image Formats
  3. Textual Elements of Design: Fonts, Typography, and Spacing
  4. Print and Digital Elements of Design: Branding and User Experience

 

🔗 User Interface Design Specialization on Coursera

Courses:

  1. Introduction to UI Design
  2. User Research and Design
  3. Prototyping and Design
  4. Evaluating User Interfaces

 

🔗 UI / UX Design Specialization on Coursera

(Calarts)

  1. Visual Elements of User Interface Design
  2. UX Design Fundamentals
  3. Web Design: Strategy and Information Architecture
  4. Web Design: Wireframes to Prototypes

 

🔗 UX Design Strategy and Application ExpertTrack on FutureLearn

Courses:

  1. Customer Journey Mapping
  2. Customer Profiling and Design Sprints
  3. Strategy, Innovation and the Future of Work

 

🔗 Using Google Forms to Analyze User Research Data on Coursera

🔗 Principles of UI/UX Design on Coursera

🔗 Innovation Through Design: Think, Make, Break, Repeat on Coursera

🔗 Introduction to User Experience Design on Coursera

🔗 Creating a Great User Experience for Mobile Apps on FutureLearn

🔗 Introduction to User Experience on edX

🔗 UX Design on edX

 

Saturday, April 16, 2022

Charlie Munger and Warren Buffett, four investment filters

  1. Understand the business.
  2. Durable competitive advantage.
  3. Management integrity and talent.
  4. Margin of safety.

 

Monday, April 11, 2022

How to see payed out dividend details in Interactive Brokers Client Portal

 Once you logged in Interactive Brokers:

  • click on Performance & Reports
  • under REPORTS column (right hand side) click on Statements
  • click Run (right arrow) in Activity row (the first one)
  • in a popup dialog you set your date range and click on Run
  • finally, you can see your dividend payout details once you expand Dividends and Change in Dividend Accruals rows


If you still don't have Interactive Brokers account, you can open it using my referral link. By opening the account using the provided link you can earn up to USD 1,000 in IBKR stock (NASDAQ: IBKR), i.e. $1 worth of stock for each $100 in your net deposits during the first year following the date of the first deposit.

My referral link is here: InteractiveBrokers.

Wednesday, February 23, 2022

How to see complete ETF holdings in Interactive Brokers Client Portal

There used to be an option to see holdings of ETF's that are not necessarily in your portfolio. That option has disappeared recently and the following method works only in case you own the ETF you are interested in.

Once you are logged in:

  • click on Performance & Statements 
  • click on Overview
  • scroll down and expand Equities
  • click on 'Buildings icon' i.e. Fund Parser

Now we are in Fund Parser and you will notice Top 10 Holdings table. On the bottom of it there is a View All link. Click it and you are there!


If you still don't have Interactive Brokers account, you can open it using my referral link. By opening the account using the provided link you can earn up to USD 1,000 in IBKR stock (NASDAQ: IBKR), i.e. $1 worth of stock for each $100 in your net deposits during the first year following the date of the first deposit.

My referral link is here: InteractiveBrokers.