Items tagged with: development

Theme Developers

Are there theme developers out there that want to create additional themes for Friendica?

It would be great to have some more crowdpower on that topic. If you are interested, just visit https://github.com/friendica/friendica

#Friendica #Theme #Federation #Fediverse #developer #development

Childhood Adversity Linked to Earlier Puberty, Premature Brain Development

HN Discussion: https://news.ycombinator.com/item?id=20067565
Posted by conse_lad (karma: 65)
Post stats: Points: 82 - Comments: 54 - 2019-06-01T06:08:48Z

\#HackerNews #adversity #brain #childhood #development #earlier #linked #premature #puberty
HackerNewsBot debug: Calculated post rank: 72 - Loop: 167 - Rank min: 60 - Author rank: 20

Choosing Ruby on Rails for web development project in 2019

HN Discussion: https://news.ycombinator.com/item?id=20039589
Posted by milo_im (karma: 83)
Post stats: Points: 147 - Comments: 142 - 2019-05-29T13:02:05Z

\#HackerNews #2019 #choosing #development #for #project #rails #ruby #web
HackerNewsBot debug: Calculated post rank: 145 - Loop: 308 - Rank min: 100 - Author rank: 69

OKRs from a development team’s perspective

HN Discussion: https://news.ycombinator.com/item?id=20004127
Posted by thinksocrates (karma: 137)
Post stats: Points: 183 - Comments: 92 - 2019-05-24T18:33:39Z

\#HackerNews #development #from #okrs #perspective #teams
HackerNewsBot debug: Calculated post rank: 152 - Loop: 270 - Rank min: 100 - Author rank: 37

Ask HN: How does your development team handle database migrations?

What's your team workflow for delivering features that require database migrations. How do you keep migrations from slowing down development as your team grows.

HN Discussion: https://news.ycombinator.com/item?id=19880334
Posted by abetlen (karma: 68)
Post stats: Points: 116 - Comments: 101 - 2019-05-10T17:48:38Z

\#HackerNews #ask #database #development #does #handle #how #migrations #team #your
HackerNewsBot debug: Calculated post rank: 111 - Loop: 215 - Rank min: 100 - Author rank: 48

Prisma – Database tools for modern application development

Prisma replaces traditional ORMs and can be used to build GraphQL servers, REST APIs, microservices & more.
Article word count: 54

HN Discussion: https://news.ycombinator.com/item?id=19598287
Posted by octosphere (karma: 5466)
Post stats: Points: 139 - Comments: 36 - 2019-04-07T17:19:50Z

\#HackerNews #application #database #development #for #modern #prisma #tools
Article content:

Prisma makes it easy to implement GraphQL servers. Learn how to use the Prisma client to access your database inside your resolvers.

* Solves N+1 Problem with built-in dataloader

* No boilerplate for CRUD, filters, pagination & more

* Easily implement GraphQL subscriptions
[1]Learn More

Get started with a practical example and explore how Prisma is used to build production-ready GraphQL servers.


Visible links
1. https://www.prisma.io/with-graphql

HackerNewsBot debug: Calculated post rank: 104 - Loop: 196 - Rank min: 100 - Author rank: 55
That moment when you're working on a Sunday night, almost done... and the company antivirus flags your compiled code as a trojan...


Repl.it GFX: Native graphics development in the browser

At Repl.it we live and breathe making software creation easier. With our programming environment, you could start coding in your favorite language in seconds.…
Article word count: 522

HN Discussion: https://news.ycombinator.com/item?id=19457324
Posted by starbugs (karma: 609)
Post stats: Points: 149 - Comments: 30 - 2019-03-21T21:07:13Z

\#HackerNews #browser #development #gfx #graphics #native #replit #the
Article content:


At Repl.it we live and breathe making software creation easier. With our [1]programming environment, you could start coding in your favorite language in seconds. With [2]live deployments, we made web hosting a breeze. With [3]Multiplayer, weʼve removed the drudgery from coding with friends. And today, weʼre excited to bring native GUI applications and game development to the browser.

Before we go on, you have to see this in action: Just run the repl below, wait a few seconds for it to load, focus on the output window and start playing Tetris in Pygame (by [4]@theohalpern):


Letʼs take it up a notch and boot up this nifty desktop app we all love (might take up to a minute to load but then can be done recursively):



We believe in the plurality and diversity of developer communities. Thatʼs why we spend countless days, weeks, and months working on features that can work cross language. We want programmers from all backgrounds, regardless of their language, to be able to code games and apps with ease. Plus, supporting native graphics opens us up to a wealth of frameworks, games, and educational material! Weʼre particularly excited about supporting Pygame and Java Swing.

Game Jam

We wanted to give you a reason to try out our new GUI capabilities, so we kicked off our very first [7]game jam on March 18th. It closes on April 18th, so there’s still plenty of time to show us what you can do. As for the winner? The grand prize is 1BTC ($4,031 at the time of writing).


We like to release early and often. So while this works, and weʼre proud of what weʼve done, thereʼs still a long way to go. Right now, weʼre piping the X Window system through VNC through WebSockets to your browser, which is not the most efficient way to do this — we have a lot of ideas on how we could improve it.

To stay true to our [8]adaptive IDE principle — the IDE should "do the right thing" when you need it — we use [9]LD_PRELOAD to figure out when an application is trying to open a window and then we start X in the background and reveal the screen in the environment. This has the effect of delighting our users:
Awesome! Plotting on [10]https://t.co/DcPy3gZFUO using GR and [11]#JuliaLang. [12]pic.twitter.com/K4GPBjOZgR 

 — Josef Heinen (@josef_heinen) [13]March 9, 2019

Finally, depending on how far you are from our data center (US-central) you might feel a delay, which weʼre also working on making better by replicating our data center (watch out [14]Google Stadia).

Please leave us [15]feedback so we can improve. Or come [16]work with us so we can make it better together.

Get started

Early reception has been tremendous, and replers have been building amazing things. Take a look at some of the submissions in our [17]game jam or give it a spin yourself:

Weʼre supporting these frameworks out of the box, but very soon, weʼll roll this out to all of our languages. If youʼre impatient, then you can use our base image to Install (pkg-install) and run your framework.

Happy game development!


Visible links
1. https://repl.it/site/blog/platform
2. https://repl.it/site/blog/deploy
3. https://repl.it/site/blog/multi
4. https://repl.it/@theohalpern
5. https://repl.it/@theohalpern/Tetris-by-mat?lite=true
6. https://repl.it/@amasad/chrome?lite=true&outputonly=1
7. https://repl.it/jam
8. https://repl.it/platform
9. https://repl.it/site/blog/stderr
10. https://t.co/DcPy3gZFUO
11. https://twitter.com/hashtag/JuliaLang?src=hash&ref_src=twsrc%5Etfw
12. https://t.co/K4GPBjOZgR
13. https://twitter.com/josef_heinen/status/1104288994110644224?ref_src=twsrc%5Etfw
14. https://store.google.com/magazine/stadia
15. https://repl.it/feedback
16. https://repl.it/jobs
17. https://repl.it/talk/challenge

HackerNewsBot debug: Calculated post rank: 109 - Loop: 119 - Rank min: 100 - Author rank: 43

iPad Pro as Development Machine

I purchased an iPad Pro with the Smart Keyboard and Pencil to use it as my main computer. Can it replace my local workstation? Is it powerful enough for my day-to-day tasks? Let's find out.
Article word count: 7065

HN Discussion: https://news.ycombinator.com/item?id=19409907
Posted by tosh (karma: 34232)
Post stats: Points: 107 - Comments: 105 - 2019-03-16T20:04:41Z

\#HackerNews #development #ipad #machine #pro
Article content:

January 7, 2019

I bought an 11” iPad Pro to use it as my main development machine. Let me say it’s an attempt.

I’m a huge fan of [1]Bret Victor and try to immerse myself with his ideas, papers, and videos. One of the things he talks about is how we should look into new mediums to unleash our creativity, to create “things” that were not possible before.

The iPad is a very different device. I know that many people (including me) are using it already for so many years. However, the iPad has improved a lot and has two new ways of interactions that are now a first-class citizen in the iPad ecosystem:
\* Apple Pencil 
 \* Apple Smart Keyboard

If you think about a second, with the touchscreen, you have three different ways of creating something new, and what to do is only left to our imagination.

The number one reason I bought the iPad Pro is, not just to have an excellent and powerful mobile device, I also wanted to explore new possibilities with all these new input devices, new ways of creating stuff. I think Apple is onto something here and I want to see if it holds up or not.

This is a very lengthy blog post. First I’ll share my experiences using it as a development machine, scripts I’m using and my whole workstation setup. Afterwards I’ll share and review the various bits of using an iPad Pro (photo and file management, keyboard, pencil, apps, accessories, etc.)

Grab a coffee ☕️ and let’s deep dive into it!


I had a MacBook Pro 13.3”, it belongs now to my wife. This was a perfect excuse for me to try out the new iPad Pro and experiment with it. I wanted to see if I could test, write and deploy my day-to-day projects. Is that possible? Let’s see!

The first thing I started doing was to install [2]Blink.sh and experimenting with it. Blink.sh is a Terminal Emulator and has sandboxed local terminal access, which you can use for basic stuff. It includes the following commands:

As you see there is tons of stuff you can start using, but it’s not a full featured OS, which means you’re very limited to what you can use. However, there are a couple of commands that are very useful (i.e: scp) and I’ll show later in the blog post how I’m using it in conjunction with other iOS apps.

After firing up Blink, it greets you with a blank terminal and a shell prompt. That’s it. There is no documentation, no obvious settings, etc.. Initially, even for me as an experienced terminal user, I didn’t know what to do. I started to explore the commands and found a config command, that would open the settings for Blink.sh. From there I started digging into the settings.

Before I go and show some of the important stuff, we need to first create a remote workstation which we can start using as our main development machine. Obviously, there is no way to develop on an iPad Pro. Even with the sandboxed emulator above, it’s not useful at all. There are projects like [3]iSH, which is a x86 emulation and provides a full Linux shell (it’s doing it by doing syscall translations). However it’s still in prototype mode and I haven’t started to use it yet, but it’s something I want to check in the future again. There are also applications like [4]Coda to let you edit and develop with HTML, CSS, etc… But I’m not a web developer and I need a real terminal with usable tools to get my job done.

Now let’s continue creating a workstation.

Workstation setup

There are several options to create your remote workstation. The easiest way is just to create a VM instance (say a [5]droplet on DigitalOcean) and then start using it. Install a couple of packages, your favorite programming languages, tools, etc.. and you’re done!

However, the problem with this is, what if you somehow lose your machine or some of the data? Or you have decided to change your cloud provider? Maybe you have decided to start from scratch? Let me start with some history:

I started first creating a provisioning script and used [6]Packer to create an image. This image would be then something I would use to start my instance. The problem with this approach was that the interaction and development cycle of the image was just too long.

Suppose I wanted to add a new package/tool to my final image, I had to change my script, create a new image, wait at least 30 minutes (depending on your network and script) and see the end result. Machine images are useful if you want to reuse them between thousands of instances at the same time, but for our needs, it was overkill.

[7]Remote workstation (first iteration)

Remote workstation (first iteration)

So I ditched the image idea and started using Terraform by dynamically provisioning my droplet during (or after) the droplet creation. This would mean that I didn’t have to maintain and store an image, and it would create my droplet with all the packages I provisioned.

The issue with this approach is, as I figured out using it for a couple of weeks, at some point, I had to install new tools or change some of my configurations. Every time I did it, I had to make sure to also update the provisioning script I was using with Terraform. If not, that would mean if I had to create a new remote workstation from scratch, I had to reinstall all the tools again. So what’s the point of using a provisioning script then? I’m a very dedicated and focused person, but even I couldn’t keep up with syncing my host machine and my provisioning script (you were right qmx).

Finally, after talking with some of my friends who use remote workstations already for months (thanks Doug and Nan), I came to the conclusion of using a Docker container inside the instance.

Using a Docker container

Docker images, unlike machine images (i.e: AMI) can be created much more easily. One of the thing that makes a Docker image perfect for this kind of setup is, once built, the layers are cached. So if you arrange your image in a meaningful way, adding a new package to the image will be very quick (because it will reuse the cached layers).

[8]Remote workstation runs inside a Docker Container

Remote workstation runs inside a Docker Container

Second, even if I have to install anything inside the Docker, nothing is stored permanently. This means, it forces me to actually always update the Dockerfile, because the next time I run it, everything will be lost again. My whole workstation setup is immutable. I can quickly destroy anything, create it again from scratch in minutes. I’m not saying it’s easy and I know it’s not for everyone, but once you get used to it, everything plays so nicely.

Of course, running inside a Docker container has a lot of disadvantages. Because it’s not a real host and you have to fight sometimes with the Docker abstraction. For example, to build Docker images inside a Docker container, you need to mount a socket and also make sure you’re part of a specific Docker group (if you’re running it as non-root).

So how did I setup my Docker image? It’s all open source and can be found here: [9]github.com/fatih/dotfiles/workstation

Let me explain some of the ideas:

1. First I’m using terraform to create my instance. This allows me to also setup other additional resources, such as a Firewall, that is automatically configured based on the droplet. You don’t need to use terraform of course, but it’s nice to have.
2. The terraform script has a bootstrap.sh script, that installs docker to the host and installs a systemd service file which runs my container. This is important because my CMD inside the Dockerfile is running a SSH server.
3. If you now check my Dockerfile, you’ll see that my CMD is SSH server, so it’s blocking. I’m changing the port from 22 to 3222 so it doesn’t conflict with the host’s SSH port.
4. From outside, I can now SSH directly to either the host ( via port 22, which is rarely needed, but it’s great to have) or into the container (via port 3222). If you check the systemd service file, you’ll see how I run the container and I make sure to run it in --net=host mode, which simplifies things dramatically. Of course, you can always opt out and expose a Port.

To create workstation, all you do is to run:

$ export DIGITALOCEAN_TOKEN="Put Your Token Here" $ terraform plan
$ terraform apply -auto-approve

This creates the droplet and installs the systemd service. My docker dev image is already pushed to Docker Hub. Nothing important is stored in the image, so it’s totally safe to share it publicly (more on this below in the Secrets section). Once the container is created, you’re now able to SSH into the droplet:

$ mosh --no-init --ssh="ssh -p 3222" [email protected] -- tmux new-session -AD -s main

I’ll explain what the tmux command means in a bit. Note that you can also SSH into the container if you don’t want to use mosh:

ssh -p 3222 [email protected]

So you might ask yourself, why don’t we SSH/Mosh into the host machine and run the container there, instead of SSH’ing directly to a container? One benefit of this approach is, you can directly connect via MOSH into the container, without any additional step.


If you’re using Docker or Kubernetes you already know how to create Docker images. Some of the important bits in my [10]Dockerfile are:
\* I use a lot of builder, to keep the image small. However, it’s still large because I’m using a full OS. There is definitely some room here for improvements. 
 \* As I said before, I replace the SSHD port from 22 to 3222 so it doesn’t conflict with the host SSHD server. 
 \* Instead of copying my dotfiles, I symlink them. Why? Because I make a lot of changes to them and they are highly dynamic. This allows me to push changes back to my dotfiles repo in case I changed something. Remember that the Docker image is immutable so any change I made will be lost.


I’m a huge fan of [11]Tmux and it’s one of the things you definitely need to know/learn if you plan to use your iPad Pro with a remote workstation.

I had a small issue though. If you somehow attach to a tmux session, say from the iPad Pro, close the lid and then attach to your Container by using a different client (say my iMac), the screen size will be not resized to the big screen. This means I’m still seeing a 11” Tmux windows on my 27” iMac. Why? Because that’s the way how Tmux works and is used by many to share screens amongst multiple clients.

However, in my case, I didn’t care about this because there should be always one single client and that should be me. To fix the issue, I always had to detach from my iPad Pro first before I could attach from my iMac. However this was cumbersome, so welcome to the magic command:

tmux new-session -sAD -s main

This command is called every time I’m connecting to my Docker container. This is basically doing this: If there is no session available, create a new one, if there is already a session, detach all other clients and attach to it. To learn more about the individual flags, please check tmux man and jump to the new-session subcommand.

Another fix I’ve done in my setup is to detach from tmux if there is a single pane and window in Tmux. I’m always using exit to close a tmux pane, sometimes I’m using ctlr-d, but not very often. The problem with this habit is, when I’m on the last pane and I call exit, it exits tmux and quits it. But sometimes I still have something in my command line and the session should be alive. To fix it, I added the following script to my .zshrc:

exit() { if [[ -z $TMUX ]]; then builtin exit return fi panes=$(tmux list-panes | wc -l) wins=$(tmux list-windows | wc -l) count=$(($panes + $wins - 1)) if [ $count -eq 1 ]; then tmux detach else builtin exit fi

This script overrides the exit command with a custom one. If you follow it you quickly see that I’m getting the number of panes and windows, and do a detach if there is only one left, otherwise I always call exit.


One of the most important parts of this remote workstation part is how to store your secrets? It’s not an easy task, unfortunately. If you check my Dockerfile you’ll see that nothing sensitive is in my final image. However, I install op, the command line tool from 1Password, that allows me to fetch and retrieve secrets from my 1Password account.

First, I’m mounting a /mnt/secrets folder from the host to my container. During the host provisioning, I also put a script called pull-secrets.sh in this folder. So when I SSH into my container, all I do is to run the following command:

cd ~/secrets && ./pull-secrets.sh

The pull-secrets.sh script has the following content:


set -eu echo "Authenticating with 1Password"
export OP_SESSION_my=$(op signin https://my.1password.com [email protected] --output=raw) echo "Pulling secrets"
op get document ʼgithub_rsaʼ > github_rsa
op get document ʼzsh_privateʼ > zsh_private
op get document ʼzsh_historyʼ > zsh_history ln -s $(pwd)/github_rsa ~/.ssh/github_rsa
chmod 0600 ~/.ssh/github_rsa
ln -s $(pwd)/zsh_private ~/.zsh_private
ln -s $(pwd)/zsh_history ~/.zsh_history echo "Done!"

This authenticates with my [12]1Password account by asking for the Secret key and my master password. After downloading some of my private keys and relevant files I want to keep sensitive, I symlink them to the appropriate locations.

Even if I exit the container, create a brand new image or I have to start from the beginning, these files will be always there (because it’s mounted from outside). This is not perfect of course, because this folder is not encrypted yet.

I’m not a security expert and I’m still looking for better ways of handling my secrets. The best solution I could find was this. My end goal is to have an encrypted folder that mounts whenever I SSH into my container, asks for a password and automatically decrypts the folder and symlinks to the relevant paths. Please let me know if you have any ideas :)


As I said, I’m using [13]Mosh instead of SSH. Blink.sh comes with Mosh support, this means it has the mosh client embedded and we’re able to connect to any server that has mosh-server installed.

I won’t go into details what Mosh is, but I really want to share this sentence from their landing page, which perfectly explains it:
Mosh is a replacement for interactive SSH terminals. It’s more robust and responsive, especially over Wi-Fi, cellular, and long-distance links.

I was always in the SSH camp, but after using Mosh for a couple of weeks, I can’t go back anymore using SSH. I was always skeptical of using Mosh because I didn’t have any needs for it. But with the iPad Pro and the awesome Cellular feature it has, it’s actually a very great fit. I couldn’t believe about the connectivity but this was the first time I felt like I was coding on my localhost. There is still latency, I don’t say there isn’t, but if you have a server near in your region, it’ll be really fast.

Another great feature is the “always-on” connectivity feature. To give an example of how insane it is let me share something I demoed to my friend:

1. I setup a WiFi hotspot from my iPhone and connect my iPad Pro to it (I hadn’t any data plan yet for my iPad)
2. I connect to my remote workstation via Blink and started running a couple of commands.
3. After that, I closed the lid of my iPad Pro. At this point, the connection should be gone already
4. I also turned off my iPhone completely
5. I went and turned on my iPhone again, turned on my hotspot, connect with my iPad Pro again
6. Voila! It’s still working, just like I left it!

Is this magic? I don’t know but it really feels like magic compared to SSH. And I don’t exaggerate. Just give it a try on what I mean, you’ll see what I mean.

As you see, the container approach, combined with the helper scripts and additional tools (such as Mosh and Tmux), makes this setup highly iterative to develop, secure and easily maintainable. Of course, we gain the additional complexity of dealing with the container abstractions. So far I hadn’t any big complaints about this approach. There are other problems of course, which I’m going to explain later in this blog post.

So far I explained how I set up my remote workstation for my iPad Pro, now let me share my experiences on using the iPad Pro in other contexts.

File management

Dealing with files on a local machine is much easier. But the problem arises if you’re working on a remote machine. How do you copy back and forth files? Especially in the era of iOS with the iPad Pro, where there is still not a perfect way of dealing with files? There are several options:

1. Install Dropbox client. Dropbox has a great Linux client (works only with ext4 FS) and it’s easy to install as well. Once installed, you can easily move in/out files and can use the Dropbox App on your iPad. Everything works seamlessly and I really liked that approach. The only problem with this is to make it part of the docker container. I didn’t look into it yet, but I believe it’s doable if we mount the Dropbox directory from outside the container, so it doesn’t re-download all the data in case we stop/restart the container.

[14]Files App on iPad Pro allows us to interact with Blink.sh

Files App on iPad Pro allows us to interact with Blink.sh

1. Using scp from within Blink.sh app. Blink has local storage, that you can use to copy files from your host or retrieve them with scp. The Files app has a Blink folder that allows you to copy/past any files into. So this means once a file is inside the Files App, you can theoretically copy anything to your remote host. Once you put a file inside the Blink folder, all you do is to call the following command (hostname is the name you define in Blink.sh):

scp localfile hostname:remotefile

There is only one issue with the scp command, it’s not able to pick up the port from your config. You need to first ssh into the machine via the ssh2 command once, after that it’ll pick up the change (because ssh adds esdsa and scp doesn’t recognize it, whereas ssh2 adds the host to known hosts with rsa). There is an open issue: [15]github.com/blinksh/blink/issues/564 Of course you can also copy from the remote machine to your local workstation as well.


As I said earlier, Mosh makes things so much easier and changes the way to use the iPad Pro. Even better is the constant connectivity when you opt-in to buy the iPad Pro with its cellular option. This means that the iPad Pro has a dedicated data plan and you can connect to the internet from anywhere.

This is the first time I’m buying an iPad with the Cellular option. I always wanted to try it out and so far I think I made an excellent choice. I know that I could use my iPhone to create a Personal WiFi hotspot, but it’s still not the same experience. I could now theoretically take iPad Pro everywhere in the country and have instant connectivity.

[16]WIFI vs Cellular (xkcd 1865)

WIFI vs Cellular (xkcd 1865)

So far it’s just great. I even use in areas where the public WIFI really sucks or is not good enough (some cafes for example). Also in recent years, Cellular reception became better in quality, so I often switch to it.

I also have a private [17]algo VPN on a $5 Droplet, which means I have a secure and fast connection whenever I need.

One benefit of having a remote workstation is also that your network connectivity on the remote instance is much faster than your local ISP. I know that you have to pay for the ingress/egress network data of your Cloud provider, but pulling and pushing docker images is way better than having to deal with it on my localhost. Pushing an image is around 30 minutes from my localhost, the same took 2-3 minutes from my remote workstation. It’s unbelievable and changes the perception of how you’re working.


Using the iPad Pro is very different. Sometimes I use it on a table writing a couple of lines but sometimes I lay down on my couch and use it on top of my legs or just hold it with my hands (watching some videos, reading books, etc..)

[18]The 11-inch iPad Pro is not very comfortable in this mode, but it’s doable

The 11-inch iPad Pro is not very comfortable in this mode, but it’s doable

I can’t say that the 11” is very comfortable when you want to use it on a lap. It’s very small and because it doesn’t have any weight it wobbles a lot.

However, I can say that there is one great thing using it on your lap. It doesn’t get hot! Normally when you use a MacBook it’ll get warm after a couple of hours (depending on the work you’re doing). I barely can use it and have to stop after a while. But this is not the case with the iPad Pro. It feels different because you always expect it to be warm, but it’s not :)

Screen size

I went with the 11” because I’m using my iPad for many things, not just coding or writing stuff. It’s my main consumption device, such as watching videos, reading books and articles, interacting on social media, etc.. Hence I always went with the smaller size.

Some of my friends have the 12.9 and I feel like it’s too big. It’s not comfortable to hold in your hands. I think I would pick the 12.9 if I had only one single machine at home. However, as an iMac Pro user, I already have a powerful machine with a big screen (27”). Therefore if I somehow need more screen estate I always can opt-in for the iMac.

I definitely recommend you to see it in real before you decide on a size. They are very different and I think it entirely depends if you feel comfortable using a bigger screen or not. I’m ok with the 11” and can use it for anything. This might be not the case for you.


You can purchase a [19]compatible keyboard for the iPad Pro, called Smart Keyboard. It doesn’t require any battery and is attached directly via the connectors behind the iPad. So no pairing is required as well. You snap it and that’s it. Also, it automatically shuts down if you close the lid or turns on if you open the lid. If you unfold it completely, the keys are also disabled, which is great if you plan to use the pencil to draw something or just want to read/watch on the iPad.

[20]Writing a blog post with Ulysses and Smart Keyboard

Writing a blog post with Ulysses and Smart Keyboard

On the paper, it’s really great and it works also surprisingly well. But I can’t say it’s perfect, especially if you coding. First of all, there is no ESC key or the function row. This means it’s not easy to cancel anything (say to close a modal) or change the brightness of the screen. For that, you always have to use the touchscreen. The keyboard quality is ok, but I have to say that it’s sometimes better to write on this keyboard than on a Macbook.

I don’t use the Esc a lot nevertheless for Vim. To switch from Insert mode to Normal mode, I’m using either the ctrl-c shortcut or jj (my custom mapping in insert mode). However, now the problem begins. Because I use ctrl so much, my Caps Lock is mapped to ctrl. It’s not only Vim where I use ctrl a lot, think of the readline shortcuts, such as ctrl-e or ctrl-a to jump to the beginning or end of the line. There is no way to change Caps Lock to ctrl system wide.

Luckily, Blink has an option to map Caps Lock to Ctrl, but that’s only visible and useful when you’re Blink.sh. Even with that, there are times it doesn’t detect that I’ve pressed Caps Lock, so I can’t say it’s perfect. Another issue with this approach is because you constantly press Caps Lock when you exit Blink.sh, you don’t know in which state Caps Lock is. It’s either enabled or not, so when I start writing somewhere else, I have to disable Caps Lock 50% of the time. It’s just annoying. You could use an external mechanical keyboard where Caps Lock is absent, but then you lose the portability and all the great features of the Smart Keyboard.

A lot of applications have keyboard support, such as Twitter, Ulysses, Things, etc.. Most of them are really good, but some doesn’t support it at all. For example, Apple Photos doesn’t support the keyboard, so you cannot delete photos or scroll over them with the keyboard. To see if an App supports any kind of shortcut, you have to press and hold CMD key. This will show a modal with all the shortcuts you can use.

Just like on a macOS, you can use cmd + space to jump or open anything. This works really great and I love it. I hope Apple continues improving the state of the keyboard software wise in iOS 13 so it’s even better. In this state, you constantly fight with the limitations at some point.


Like the keyboard, you can also buy the [21]Apple Pencil in addition. It’s fundamentally very different compared to the old version. I didn’t use the older version of the pencil, so I don’t have to add much and can’t compare. However, the one I’m using (latest iteration) is amazing. It feels like a pencil and the way it charges (snaps automatically on the bezel) feels very natural. I never care about the battery life of the pencil. It’s ready to go whenever I want to use it.

One thing I have to clarify is, I’m a Software engineer and my main area is distributed systems. Nothing in my job description is about drawing or designing something. So you might think, why did you get an Apple Pencil? Well because it’s not just for designing, it’s also usable for taking notes, annotating screenshots, editing pictures, creating diagrams, etc…

Especially annotating pictures is one of the highlights of using the pencil. If I want to show something, I just take a screenshot and immediately start annotating it with the Pencil. It’s amazing how wonderful it feels and it let me quickly finish my job.

Secondly, creating diagrams with the pencil is really great. There are several applications you can use, I really like Paper from WeTransfer (old Paper53). It has a Diagram mode where it allows you to create diagrams in natural mode. So you draw a circle, it becomes a perfect circle. You can even connect shapes together.

Face ID interaction

The new iPad Pro uses now also Face ID. This is important for people who use the iPad Pro with the keyboard, because it makes the interaction with everything so much easier. You don’t have to touch anymore to unlock the iPad.

Secondly, with the new Password Manager integration (I’m using 1Password), login into websites is so convenient. Whenever you see a login page, you click on the password button, Face ID unlocks 1Password and your login data is then pasted into the login form. It feels very magical.

The only caveat I here is the Face ID sensor placements. I think the Face ID cameras should be placed a little above, near the buttons. Most of the time, if I’m holding the iPad, my hands always cover the cameras. I have to make sure I don’t accidentally hover the cameras. I think Apple made a mistake by putting the Face ID cameras in their current position. They should be just below the place where we snap the Apple Pencil to the bezel. Maybe I’m the minority (as a user holding the iPad always horizontally), but the iPad with the Keyboard is also in its horizontal mode, so it’s not a bad idea in my opinion.


The iPad Pro now has a USB-C input (instead of Lightning). USB-C was introduced first with the new TouchBar MacBooks (in the Apple ecosystem). Of course with that, they also removed all other ports, which means you have to buy tons of dongles. I’m now carrying a bag with a lot of dongles (it’s not fun IMHO). But on the bright side, all these dongles and cables now work with the iPad Pro as well. This is such a huge step because it enables tons of new opportunities.

[22]USB-C Dongles and Cables

USB-C Dongles and Cables

What do I carry with me? These are the following dongles and cables:
\* USB-C to Apple Watch Magnetic Charger. Needed to charge your Apple Watch. This is unfortunately very short to be used with your USB-C charger. It’s intended to be used with a device (iPad Pro or MacBook) 
 \* USB-C to SD Card. Perfect if your camera doesn’t have any USB interface and you want to import photos 
 \* USB-C to USB. This is used for inter-compatibility with old devices. For example, my Fujifilm doesn’t have a USB-C output, this is the cable I have to use. 
 \* USB-C to Lightning. This is to charge my iPhone 
 \* USB-C to 3.5mm adapter. I’m using my Bose QC35’s which has Bluetooth, but if the battery dies, this is needed because the 3.5mm jack no more exists on the new iPad Pro’s.

[23]You can easily charge your Apple Watch with the new Apple Watch Magnetic Charger to USB-C

You can easily charge your Apple Watch with the new Apple Watch Magnetic Charger to USB-C

Before the iPad Pro, I really hated using the USB-C accessories because my MacBook (work laptop) was the only device that could use it. But now that iPad Pro also uses USB-C, everything is much easier to use. I’m looking forward when the iPhone also switches to USB-C so I can get rid of all my cables and start to use USB-C for everything.

Photo management

I like taking [24]photos. I’m an avid user of my Fujifilm X-H1 and use it a lot. One thing I really love about the iPad Pro is how easy it’s to manage your photos and edit them. First of all, I’m using Apple Photos to store all my photos (I have the 2TB plan). I have used Dropbox and Google Photos in the past, but I eventually settled down with Apple Photos 1-1.5 years ago because of these benefits:
\* A strong stance towards Privacy. I can be sure my photos will be not used for anything else. I’m the consumer, not the product 
 \* Native iOS integration. Everything works out of the box. Uploading/downloading or any photos interaction just works without having to wait. If you’re already into the Apple ecosystem, it works really well 
 \* I can backup all my photos continuously by downloading the originals to a macOS machine. Google Photos allows you to download all your photos, but it doesn’t have a native application or a way to sync the photos back to your local. Whereas all my photos can be downloaded locally and I pair with [25]Arq to backup it to somewhere else.

Having said that, Apple Photos is not perfect. It has these two fundamentals issue in my opinion:
\* Search sucks. It doesn’t work well and the number of photos is increasing, making it harder for me to find the photos I’m interested in. Google Photos in comparison was (and still) the best in terms of searching 
 \* Sharing photos is not convenient. Again, Google Photos has the ability to quickly share the photos instantaneously, whereas Apple Photos still is really slow and awkward to use. Try to share a simple Album with 100 photos to see what I mean.

I think these problems will be eventually fixed in the upcoming versions.

[26]I can directly connect my Fuji X-H1 to the iPad Pro and start importing photos

I can directly connect my Fuji X-H1 to the iPad Pro and start importing photos

Back to the iPad Pro. I bought the 512GB version because I wanted to have the ability to quickly and instantaneously edit and see my photos. I have around 220GB worth of Photos, so the 512GB is perfect in this sense. I’m still using iCloud to sync my photos between all my iDevices but on the iPad and iMac, I enabled the “Download Originals” options. This allows me to edit the photos and manage my photos easily.

If you don’t have a lot of photos or don’t want to work on big files, I don’t think it’s worth buying the iPad with bigger storage. I think the 64GB is perfect for lots of people, but I would opt into the 256GB just to be on the safer side (because you won’t be able to upgrade it later)

iCloud Sync (Continuity)

I think this is something worth mentioning. If you’re into the Apple ecosystem, the way iCloud syncs all your settings and files are just amazing. Don’t think iCloud as a Dropbox replacement. It’s more than that.

First of all the whole idea of moving seamlessly between your iDevices (iPhone, iPad, iMac, MacBook, etc…) is called “Continuity”. Under the hood, it uses iCloud, which is the universal sync system that makes sure everything works fine. If you’re using iCloud, this means all your notes, photos, etc.. are synced across all your devices. Take a photo with your iPhoto and boom, it’s on your iPad and MacBook immediately. Write something down in Apple Notes and it’ll be available immediately in your other devices.

But this all is not the only great thing. I especially like two things that work very well for me. One is “Handoff” and the other one is “Universal Clipboard”.

Handoff enables you to start something on one device and later pick it up on another device, without losing focus on what you’re doing. For example, I wrote this blog post mainly on my iPad Pro with Ulysses. However, sometimes I have to jump back to my iMac and do some errands. I can easily continue writing on my iMac by opening Ulysses. It’s immediately there and ready to be used. This works on so many apps that it’s just amazing. For example, suppose you’re browsing something on your iMac. You grab your iPad, leave your home and open your iPad and boom it’s there.

Second, “Universal Clipboard” is an amazing feature. This feature allows you to copy paste from one device and paste it on another. For example, I can copy from iMac and then paste it on my iPad. It’s not text, you can even copy/paste images as well. This feature is amazing, just like “Handoff”, because it allows you to seamlessly switch devices.

Talking about copy&paste, there is a serious issue when you use a remote workstation (or let’s say something very annoying).

Everything you copy there, unfortunately, won’t be available in iOS’s clipboard. Suppose you copy a line in Vim via yy and then want to paste it into Apple Notes. Forget it. It’s not possible because both of these systems use a different clipboard.

What we need is “Universal Clipboard” integration in our remote workstation. If you’re using SSH and Blink, copying into Tmux’s clipboard buffer actually forwards it to the iOS clipboard. But this doesn’t work with Mosh at all. I hope Blink implements (and documents) a proper clipboard sharing between the host and remote workstations, that can be used with Mosh or SSH as well.

Notable apps

Some notable apps I’m using and I think you should give it a try:
\* [27]Ulysses: I write all my blog posts with Ulysses. You might think it’s an ordinary markdown editor, but it’s not. Adding images, showing previews, publishing, writing, etc.. all these actions are integrated seamlessly and it provides one of the cleanest user experiences ever. I tried so many applications, but I keep coming to Ulysses. It’s worth every penny if you write a lot 
 \* [28]Paper (former Paper53): There are many drawing apps but I like this the most because it’s simple to use and it has a nice tradeoff between easiness and feature set. I don’t have any strong recommendations for this app if you like it go for it if not, there are plenty of others you can try 
 \* [29]Blink: I already mentioned about this throughout the blog post, just adding it to the list. There are also other Terminal Emulators, please let me know if you think they are comparable or better 
 \* [30]Dash: I’m using this already on macOS and find it great to have something we can use also on the iPad. This is a Document viewer and it’s really great to see and read the API of various frameworks and programming languages. I’m using it mainly for Go’s stdlib packages, but it can be used for almost anything. 
 \* [31]Things: This is one of the best looking To do managers out there. It’s expensive and you need to buy the same app for all of your iDevices. However, Things is one of the applications that have full keyboard support, which many applications lack. Once you start using it, it’s addicting because the way it’s designed and feels is amazing. I haven’t seen many apps that feels so natural on iPad (maybe Ulysses).


I mentioned many things throughout the blog post, but I think I also should mention a little bit about some of the costs if you’re planning to use the iPad as your main development machine:
\* First of all, you need a remote machine powerful enough to meet your needs. This is minimum $10 per month for any cloud provider you choose. I know they are cheaper instances or even free tiers, but I don’t recommend because you’ll be going to need the network throughput and CPU/RAM. 
 \* Blink itself costs $19.99, it’s a one time purchase. Most of the quality and pro applications either have a subscription (Ulysses) or a one-time purchase (Things). This entirely depends on your use case so I can’t say much about this. 
 \* I think iCloud is needed nevertheless. I’m using the 2TB plan, which costs $9.99 per month. 
 \* If you have the Cellular iPad Pro machine, you’re also going to pay a monthly fee to your cell provider. This depends on where you live and which provider you choose. Let’s say it’s minimum $10 per month.

As you see, you’re going to have a pay least $30 per month (remote workstation + iCloud + data). And this is just the minimum. You can say that iCloud is also used by all other iDevices, even if you think like that, I picked up the cheapest options for the remote workstation and your data plan for the cellular connectivity.

There are certain options to minimize these costs. For example, you could theoretically shut down your remote instance whenever you don’t use it and only start whenever you start working. Let’s say, you don’t use it throughout the night, just shut it down. Also many Cloud providers are working on making the Container as a Service platform more usable. There will be options where you can run your docker image for a longer period, instead of spinning up the whole instance, and then stop the container whenever you don’t use it.


After using the iPad Pro for a while, you’re starting to use sentences that start with “What if … ?”. What do I mean by this? Here are a couple of questions:
\* What if I can’t copy the data from the form on this particular website? 
 \* What if I have to message someone with WhatsApp? 
 \* What if I lost my internet connection and I need to work on my source code? 
 \* …

Importing and editing my photos, writing blog posts (note: this whole article was written on the iPad Pro), reading books, researching, etc.. All the ordinary stuff is very possible. On the coding side, I was able to develop, test and ship a new feature for [32]Fixmie. However, I’m not sure if I could do the same if I had to test the website or had to fix something in the authentication workflow. I have mixed feelings here

The issue with the iPad Pro is, because it’s not a real computer and IMHO not a laptop replacement, you don’t know what the limits are or when you’re going to hit the wall doing some stuff. There were so many times where I just couldn’t continue with the iPad. I had to use my iMac to finish my job.

If you’re using the iPad Pro in the mindset of “This is going to be my main work machine”, then you’ll be living in constant fear. I really mean it. However, if you’re using the iPad in the mindset of “This is a great device with a constant connectivity to the internet, I think I can use it for almost all my needs” then you’re thinking differently because you know the limitations and therefore can prepare yourself.

I have decided that the iPad is the perfect mobile device for most of my work, but it can’t replace my main work devices (MacBook or iMac). I know it sounds cool to use the iPad as the main development machine, however, the constant limitations you’re hitting is just frustrating. I agree with most of the people out there that iOS is still limiting in several ways.

Nonetheless, I think Apple will tackle this with the upcoming iOS releases, so I’m positive and believe the future of development on iPad will be a first-class citizen.

If you have made it so far, thanks for reading! Please let me know if you have any questions and feel free to share your thoughts.

If you have any questions or feedback, please feel free to share it with me on Twitter: [33]@fatih


Visible links
1. http://worrydream.com/
2. https://www.blink.sh/
3. https://github.com/tbodt/ish
4. https://panic.com/coda-ios/
5. https://www.digitalocean.com/products/droplets/
6. https://www.packer.io/
9. https://github.com/fatih/dotfiles/tree/master/workstation
10. https://github.com/fatih/dotfiles/blob/master/workstation/Dockerfile
11. https://github.com/tmux/tmux
12. https://1password.com/
13. https://mosh.org/
15. https://github.com/blinksh/blink/issues/564#issuecomment-438658248
17. https://github.com/trailofbits/algo
19. https://www.apple.com/smart-keyboard/
21. https://www.apple.com/apple-pencil/
24. https://www.instagram.com/fatih.arslan_/
25. https://arslan.io/2017/12/14/configure-arq-to-backup-to-digitalocean-spaces/
27. https://ulysses.app/
28. https://paper.bywetransfer.com/
29. https://www.blink.sh/
30. https://kapeli.com/dash
31. https://culturedcode.com/things/
32. https://fixmie.com/
33. https://twitter.com/fatih

HackerNewsBot debug: Calculated post rank: 106 - Loop: 96 - Rank min: 100 - Author rank: 64
I work in mobile app development and the technology out there to spy on you is pretty insane. There is a whole industry for snooping and reselling data. Here are some examples.

There are several SDKs (software development kits) that offer fingerprinting identity services. Meaning, when someone opens your app, it checks their device ID, IP address, GPS location, email address, etc. and makes a match to an identity. You then use this SDK to track their behavior in your app, such as purchases, interests, demographics, preferences, etc. This data is stored along with all the other apps that use the SDK. Now as an upsell, I can buy all of your behavior data from every other app that uses the same service. From the moment you install the app I know everything about you.

There are SDKs that don’t even offer a service, they just straight up pay the app maker to let their agent sit and collect data and send it up to their servers. Mostly location data.

My favorite is there’s an SDK that actually records the screen while you use the app, and the video gets sent up to the server for the app maker to see how you use their app in real time. It also tracks all of your views, swipes, and button presses tied to the video for analytics.

Basically, you should assume that every moment you are using an internet connected device, you are being observed, scrutinized, and analyzed so that someone can sell you more shit.

They are really good at this, and getting better every year. You think Facebook is listening to your microphone to serve you ads at the moment you are discussing a product? They don’t need to. They know you that well.

Edit: A lot of people are asking for specific examples of this monitoring tech. There are a ton of small players. So an example of location tracking is Tamoco. An example of behavior tracking is Branch.io (they don't advertise the data mining, but it's a back-end deal). And session monitoring is AppSee or HotJar. There are many more that I haven't heard of.

There are a ton of data resellers out there. They're typically small startups who buy and sell data, and they compete on having the most comprehensive and clean data sets. We get approached by a data reseller maybe once a month, either trying to buy our data or sell us data.

Edit: A lot of people are flippant about this idea because you "don't click on ads" or you "don't buy anything". There are people who aren't interested in just selling you products. How about voting for a particular political candidate, or for/against a ballot measure? How about selling you a particular world view? Propaganda is just like advertising, they're just selling you an idea instead of a product.
#android #ios #programming #development #app #apps #phone #smartphone #sdk #hotjar #facebook #appsee #branch.io #tamoco #surveillance #privacy #encryption

24 Hours of Rust Game Development

HN Discussion: https://news.ycombinator.com/item?id=19306666
Posted by oliviff (karma: 69)
Post stats: Points: 156 - Comments: 48 - 2019-03-04T23:20:43Z

\#HackerNews #development #game #hours #rust
HackerNewsBot debug: Calculated post rank: 120 - Loop: 328 - Rank min: 100 - Author rank: 345
Later posts Earlier posts