Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: I won't have Internet access for months, How could I use my time?
91 points by awabrh on May 9, 2023 | hide | past | favorite | 75 comments
Am a software developer located in Khartoum, Sudan. The country is going through a turmoil.

Long story short Internet access is becoming more and more unstable, probably will go completely out within the next week.

I want to know what can I do to utilize my free time to be a better developer, but almost every development environment/learning resources requires internet access.

- I have 1 YOE as an Android Developer

- I am self-taught



Old guy here, About 1/3 of my computing time was pre internet. Before that we did a lot of trial and error, reading electronic documentation (READMEs etc) and also books.

Depending on your current skill level perhaps the following would help.

I would recommend getting a book on each of your interest areas of the stack and work through them ~2 hours per day per book.

eg: a curriculum could be:

- A book on linux, android, or iOS operating systems. Learn about filesystems, reading binary files, and at least one binary file layout to get a sense of "it's all just data" (Hexdump or C)

- A book on networking (learn all the OSI layers, practice working with the various envelopes, see them in TCPdump / Wireshark or other sniffing tools

- A book on internet like technologies eg: https://hpbn.co/

- A book on Frontend development. perhaps React

- A book on Backend development. Perhaps something about making HTTP + RESTful + JSON apis (alternative GRPC development)

- A book on a datastore of choice, I recommend postgres and you can grab the manual and books from here: https://www.postgresql.org/docs/

just my 2c of how I'd spend ~1 month per book offline but still progressing.

The hardest part is going to be the discipline to actually work at it every day consistently and for more than like 15 mins :)


I agree with this. I travel a lot and read a lot of ebooks. I also get a fair amount of work done without internet connectivity.

  * plan out exactly what you'll be working on, to the minutia
  * save source and upstream dependencies locally
  * have a local environment where you can build and run the code locally
  * download specific sites and documentation with `wget -r` and the like
  * have multiple things stacked up for if you hit a blocker on one project.

If it's a solo big project you can work without internet in perpetuity. You just have to RYO on any libraries you don't have downloaded before hand.


Fun true story. I had a professor in university who only had 1 finger on 1 hand. He would plan out whole programs in his head, debug them mentally (step the code afaik), and then when he knew exactly what he wanted to write, he'd sit down and pluck away at his keyboard, one effortful keypress at a time.

He was productive and smart enough to do it, and I think it's a great exercise for engineers to at least try a few times. Try to think about what you're going to write before you even open your editor. Try to break down the strategy into a recipe of things that can be done in about hundred lines each or so. Then sit down and type it out.


something similar to my process when I was in university doing my internship and was doing half requirements gathering as a business analyst and half developer working on different small projects. It's really helpful to organize yourself , visualize the code, the problems, plan it out on paper and then code... less coding more design upfront.


I hope he's having a heyday with chatGPT translating his voice into code.


Pretty interesting to think about how the internet has changed engineering. Eg if most things were learned by book in the past, I’d guess that would result in more coalescence around the standard libraries — need enough readership to make it worth writing a book on it, and it’s also easiest to find the books that are most widely available. Now that we have internet and can easily find stack overflow pages, it probably leads to package proliferation, and less solid knowledge of the standard libraries.


Certainly some element of that - though there was also just a dearth of packages/libraries for most languages, you got the compiler, the standard library and if you where really lucky some vendor extensions that didn't make you want to weep softly.


You can download all of Wikipedia (20 GB for English):

https://meta.wikimedia.org/wiki/Data_dump_torrents#English_W...

You can also download Android documentation:

https://androidsdkoffline.blogspot.com/p/android-offline-doc...

You can KINDA download MDN (very YMMV and $$$):

https://developer.mozilla.org/en-US/plus/docs/features/offli...


https://devdocs.io/offline can also download 600 documentation sets into the browser. I don't know how reliable it is over several months "Note: your browser may delete DevDocs's offline data if your computer is running low on disk space and you haven't used the app in a while."


If you're using firefox, create a separate profile and add devdocs documentation to it. That keeps your docs isolated from general browsing and so you reduce the risk of the browser deleting it to free up space.


Thank you for giving me the solution to this problem!

I always wanted devdocs to work (long train journeys especially would suddenly be more fun) but after this happened a couple of times and I couldn't figure it out or stop it I gave up.


Shame they don't offer something like an electron app with guaranteed persisted storage. Or even just a .zip containing everything, to be served from a local web server.

Maybe install it into a separate browser profile & make a backup of it just in case


There's https://zealdocs.org and it's something similar if not the same. For Mac you need to buy the Dash app.


Kiwix is a much nicer way to have Wikipedia, Stackexchange, Arch Wiki, and others offline.

Reader: https://www.kiwix.org/en/download/

Content: https://library.kiwix.org/?lang=eng


Along the same lines, you can download a dump of the different Stack Exchange sites:

https://archive.org/details/stackexchange

The dump of Stack Overflow's Posts is about 20gb. The Android Enthusiasts Stack Exchange site is about 100mb.


"You can KINDA download MDN"

Or you just download them zipped here:

https://kapeli.com/mdn_offline

In general, you can use a crawler and download (allmost) any website you like. Works better with static sites of course, but learning ressources usually are.


Another thing you can checkout is for example HTTrack, you can use it to make a local clone of a website. I have used it when moving to a remote location where I wouldn't have Internet for a long time.


Nice that you recommended HTTrack.

That's a name I haven't heard in a long while: a blast from the past :).


Get ebook dumps while you can. Some of those are Russian, but most are not.

https://rutracker.org/forum/viewtopic.php?t=5705905

The first post includes an index that leads to a dozen more dumps, grouped by programming language and/or field. Look for links named "Скачать".

If you manage to see this comment before moderators remove it, good for you. If not, at least I tried — there's no contact info in your profile to contact you privately. (Sorry dang. I've been through similar shit and the last thing you care about in that situation are "intellectual property rights" of some Mr. Moneybags from the opposite side of the globe).


You could apply for funding from a charity to get a copy of the Internet Archive. The IA is making incomplete copies including search function available in form of a container containing several 19" racks called the Petabox: https://archive.org/web/petabox.php

This is still useful after the conflict is over, as rebuilding infrastructure can take decades, and the container could be beneficial if hosted e.g. by a school.

You could create a mesh network that links local organisations to the Petabox without being initially connected to "the" Internet.

In any case, I wish you personally well and peace to your country!


Do you understand that OP lives in the city where the fighting is taking place? This advice is very unrealistic on several levels.

Other people right pointed out to download some e-books.


So if one can't find bread, one should go for cake.


Your point is what? OP should single handedly bring the conflict to an end instead? Is he Iron Man?


I think the point is, that this is slightly overkill and not so practical. He could be offline for unknown time any minute now. Applying now is a little bit late. Now you just download what you can


I know this is extreme, but maybe you should consider reality?


I spent about a month without internet. I will be honest the last thing I touched was the learning resources. I downloaded youtube videos using ytdl and kept watching them on repeat. I would see a tv series every now and then, but nothing beat YouTube videos. You can request your entire liked videos information from Google. Moreover, it is very difficult learn programming without actually doing it and you can't realistically do programming without Google these days.

I don't think not having internet doesn’t suddenly make you 10x productive or 10x focused. You are the same person with and without internet. Just admit that upfront.

So, prep for it and try to replicate what your habits are with having internet.

You can download a few learning resources but please don't go overboard. Focus on one thing you want to finish completely. Don't go on a downloading spree.


"Don't go on a downloading spree."

Why not? Where is the harm?

It is better to have a book you don't need, than to not have books you discover you do need and memory is cheap.

I spend lots of time off grid and I surely did not touch every ebook I had in my collection, but it was still nice browsing through what I had and then choosing the one I wanted that moment.


> you can't realistically do programming without Google these days.

This is really not true. Try it. It's not that hard, and will likely make you a better programmer.


The thing is that, it is not hard rather, I believe it is unproductive. Learning programming in my opinion is having an understanding of a problem, an abstract idea of a solution and then zigzagging and tumbling across that solution with code.

The end goal is providing a programmatic solution to a problem. The issue is that coding and googling provides the experience of journey across a solution. Hence the zigzag. You try this, you fail, you google why you failed, you learn something new and you try again. This kind of efficient feedback loop helps you learn.

The problem is that without google you have to waste trying to find a solution. The impact is not immediate. There are no progressive bumps of learning. Moreover, without googling you end up doing very hacky programming. Because you only have access to what you know. You can't explore things readily because there is a friction.

For a mature programmer, you can make that suggestion, because they are confident about their knowledge and way around documentation. But for new learners I don't recommend this at all. I have tried this, and this creates a very fatiguing experience.


> This kind of efficient feedback loop helps you learn

I feel like this helps you solve the problem, but doesn't actually help you learn. The time you're "wasting" trying to find a solution is time you're actually spending learning, not just learning how to code, but learning how to actually formulate a solution. Failure is also one of the biggest parts of learning. "Very hacky programming" is just a start, it's like a vomit draft of anything you're writing. Revisiting your code and figuring out what you can do better is how you end up with more eloquent code.

In my experience, no one really explores when googling for answers, they are just searching for an answer.


Local large language models can give feedback and be a private tutor.

https://gpt4all.io/index.html


Use some of the time to take a break from internet style interactions, read a few classic books.

But before you go just download a couple of IDEs and all the documentation for them and the language you want to use and install all the libraries you might think of using. Then turn off the net and see how it goes.

Or just download Emacs and a bunch of elisp resources. The create some applications and tools in Emacs. It is pretty self contained.

We used to write huge applications without any network access of any kind.


Not sure if practical or affordable, but could consider getting your hands on a Starlink, then selling wifi access to people around you to help cover the cost of the Starlink subscription. Seems like there's coverage in Khartoum.

Good luck out there!

https://ts2.space/en/starlink-in-khartoum-khartoum/


Download ebooks and documentation. Use Calibre to organize them.

https://calibre-ebook.com/

https://www.gutenberg.org/

Computing systems would be a good subject to study. I'd also recommend downloading Ubuntu to a self booting flash drive. Linux has a lot of useful developer tools for someone without internet.

https://beej.us/guide/

https://ubuntu.com/tutorials/create-a-usb-stick-on-windows#1...


I know this is a hard situation and I don't want to make light of it, but maybe for inspiration you can look at what some other programmers were able to accomplish by deliberately going offline for some days/weeks. I was reminded of this post by John Carmack about why he chose BSD for his offline programming week, instead of Linux.

https://www.facebook.com/permalink.php?story_fbid=2110408722...


I'll go against the majority advice here. Don't start downloading large collections of digital stuff, whether pdf's, videos, wikipedia or whatever. For one thing there might be electricity outages too. And you can never really be "complete" and self-sufficient with educational resources unless you have a very clear idea what you will focus on.

Make the best of a bad situation by going deep into only one important and difficult and relevant for your future career subject. Pick one good and complete resource. E.g. a well regarded book with plenty of coding exercises, or a well documented open source project, complete with documentation etc. Then go over it line-by-line, understand and replicate everything, make it your own.

This approach will minimize that you will need random other resources. Hopefully at the other end of it you'll have a new and powerful tool in your toolkit. What is the best project to focus-on? you know better. Something orthogonal to android app development would be one direction. Maybe learn python and a backend framework like django that has excellent documentation. But taking android to the next level makes sense too. You know where you want to be.

Lets hope that at some point we'll learn how to live in peace and stop wasting human life and talent.


I'd practice math problems, in the areas of linear algebra, vector spaces, and so on. The experience will help me assimilate AI/ML better once I get Internet back.

Also, for variety, I may discipline my thought process further by learning mathematical proof techniques. The extra discipline will help me acquire knowledge of deeper subjects, with less effort.


Given your skill level, I would recommend working through the Structure and Interpretation of Computer Programs in Racket, which has a nice self-contained development environment.


If you have free time, you could try to build an (offline) app that you or someone near you might need. It is good fun to find a user and build features for them.

Other comments have great pointers for downloading docs/books/resources offline. Also textbooks are underrated.


https://internet-in-a-box.org/ Bringing a few of these would help the local community!


I mean... is getting out something you're looking at? Seems like it might not be a bad move? Perhaps people here could help you out with that if you're lucky.


It's hard to really understand what it must be to live through such a tragedy, so I'm not sure how relevant my suggestions will be.

But I would do three things (some of which I see mentioned in several post below):

1. download as much as you can – wikipedia, stackexchange (e.g. https://archive.org/download/stackexchange), openstreetmap; possibly, set up a local wifi router to allow others to access these and, if you keep it technical, it might be that this will enable you to get in touch with others with similar needs, which should keep you learning together as much as possible

2. if the conditions allow, try and get your hands on StarLink. Getting a dish and router might be problematic. But if you like diy and assuming you can actually sign up to it, it should be possible to self-build a connection kit using spare parts and an ordinary sat dish.

...which brings me to...

3. consider getting into ham radio. This, once again, depends on the situation in the country, and whether licensing is an option or not. But, providing you can and that you have electricity, this could get you in touch with others, who will usually be techies and may be able to also answer coding questions (although this is a willingly long stretch). And, albeit at very low speed, Internet via ham radio is itself a possibility, e.g. https://spectrum.ieee.org/build-a-longdistance-data-network-...

All the best to you, and I hope the situation improves quickly!


Setup a caching repository proxy like nexus: https://github.com/sonatype/nexus-public

This is a little server you run locally and point your package managers like Gradle, pip, npm, etc. at it and it will grab dependencies from their upstream and cache them locally to be available offline later. Once you get it setup go wild adding every dependency you can think of using so it preloads the cache with good stuff. Unfortunately offline caching for package managers is really hit or miss and rarely a priority to support, so expect some pain getting it all setup. Good luck.

Also if you haven't already consider installing and learning languages with a good standard library so you can install them once and do a lot of stuff. Python, go, and deno are really good options with capable standard libraries out of the box. Avoid nodejs or similar minimal/no standard library languages. Rust is surprisingly bad/hard to use offline in my experience too (cargo constantly wants to hit the internet and needs a lot of handholding to play nicely).


I'd pick up e-book copies of the computer books that are famous for having lots of follow-along problems to solve.

SICP exercises, "learn to code" books are generally structured that way. 'How to build X' books are similar.

Not a suggestion necessarily, but 'Land of Lisp' is mostly taught through author-guided tutorials and how-tos for small projects. I imagine that format would be useful in a disconnected area.


I remember working through Brian Harvey's SICP lecture notes and HWs a couple of years ago. Each Homework had one harder exercise labeled "Extra for Experts" which I later found out was standard in a lot of UC Berkeley courses.

The recursion HW was really fun so I took it upon my self to never look up the answer to the Extra exercise no matter how long it took me to solve it. The problem was to re-implement the recursive function of the last exercise using only lambda functions. I wrestled with it for hours, then gave up, then got back to it days later before I finally cracked it.

Later that day I googled the question to see better/ more elegant solutions and found out about this thing called Y combinator, I googled it to know more but everywhere I look I see this company called Ycombinator. Down the rabbit hole I went and 27 PG essays, 230 HN hrs and 2 years later, here am I

Good times :)


You can download documentations (directly, or through apps like zeal or dash), e-books for your preferred topics, make local copies of videos (with yt-dlp) and from open source-projects. Just studying source code and documentation, and making some small projects of your own should help you by leap and bounds.


Also very importantly, you can download parts of Stackexchange (askubuntu, stackoverflow and others) in Kiwix format (same as Wikipedia). You can download courses from Khan Academy this way. https://www.kiwix.org/en/

I used to spend several months with very little Internet access (every other week on my cell phone). I made a small server with Jellyfin, tons of podcasts with airsonic, several youtube channels, a big Kiwix library (Wikipedia and Wiktionary - several languages), an ebook library (I haven't found the right way to do it, Calibre-server is a little complicated). https://github.com/awesome-selfhosted/awesome-selfhosted

And also a dozen of physical books, typically in a language I'm learning.


I don't have specific recommendations for improving your development skills, I can suggest a few things that may be helpful given the circumstances:

- Download as many ebooks as possible. You can try using websites like libgen.rs(or search the r/piracy subreddit for alternatives)

- Look for software like Briar, which allows for local communication over Bluetooth, WiFi, and of-course the internet. If you have an android phone, download an APK for it(and keep a backup of it to share with others).

- Host a local linux mirror for whatever distro you wish. Also download all the manpages.

- Download a copy of Wikipedia

- Consider setting up projects like Internet-in-a-Box, which aims to provide offline access to digital resources(including some of the suggestion I said above).

I hope these suggestions are helpful.


the biggest problem is libraries. Almost all languages, need you to connect to some cdn/library/repo in order to check version, get, download dependent libraries for your project. Without that ability, you're in rough shape. You could use a cacheing proxy as others have recommended to get around this. And then downloaded books would let you continue to experiment. Trying programming is the only way to truly learn it. Books and articles and videos let you know what you can do, but you don't absorb it until you're actually doing it. Is it possible starlink isp is available where you are for a satellite ISP?


I'd download and run a few open-source LLMs that can be run without internet access and a laptop - can be an infinite source of math problems, quizzes, programming challenges, etc., that should keep you occupied for a very long time.


> but almost every development environment/learning resources requires internet access.

Figure out how to use your environment offline while you still have some access. Nothing is a replacement for actual experience. It's not going to be the same, the main thing you will miss is dependencies, but that can be a good thing - it will force you to be more minimal, write less glue code, and get your hands dirty which forces you to understand more of what's actually going on.

Just make sure you have access to all the reference material you need to figure things out without stackover flow and using other peoples solutions (dependencies).


Wow, that sounds harsh, stay safe. I would recommend using the time to focus on basics. The older I get the more I appreciate that I learned C, some assembly, traditional multitasking, basic data structures and algorithms on manageable platforms. Also networking protocols, implement a UDP based protocol for something from scratch and learn about handshakes, timeouts and retries.

This could be done on Linux, Windows or even a real-time OS like FreeRTOS. Could be on a solar-powered Raspberry Pi or something that requires almost no other infrastructure.

Is ham-radio based networking an option? Could be useful in crisis areas.


Hi, I feel you. I live in a south east asia country. we had very limited interent a decade ago and it was barely usable. Because I came back from America, it took me a long time to get used limited interent. What I did back then was to download as many useful resources as possible when i had good interent at office and used it offline when i was on slow mobile or home interent. stackoverflow, lauange documentation, libraries , wikipedia etc. Hope it gets better for you at Sudan. best of luck. You can also download useful learning videos for offline viewing too.


Stack up on books and tinker-able hardware (if that's you poison). Take time to study the basics of computer science.

Tech changes a lot, but the basics of math and CS don't.

Linear Algebra shows up a lot in graphics and machine learning, study algorithms, even funky weird ones, implement them anew.

Learn discrete math, and numeric methods, differential equations and calculus in general. Brush up on statistics.

Download papers now, keep a backlog of them on some area you like.

Heck, there's so much to learn that a few lifetimes are not enough, and the beauty of foundational knowledge is that it's technology agnostic.


Get buntu/debian, and take a snapshot/mirror of the entire repository (using aptly?). That way you don't have to worry about anything and if you get curious, well you can install it, just like you would online.

I would also get something like a couple full TV Series and audiobooks. there's some playlists of panel shows on youtube that you can yt-dlp.

There's also fullstack programming environments around. but if you're only interested in android then...


Focus on health and safety for yourself and people you care about. In the hierarchy of needs of becoming a better developer, I would say that is foundational.


I would read a couple books about software architecture principles and design patterns (not just the good, but also the bad and the ugly), how to write good tests, TDD, etc. I remember reading about all this as a teenager and this knowledge (both, which principles to follow and which not to follow) has become invaluable to me over the years.


I would also recommend reading as many books as you can. Don't know what is the condition there, whether you can get the physical books or not. However, https://www.pdfdrive.com is a a good source for e-books, download as many as you can and store them.


Is the power grid going to be affected as well? If so, I'd suggest also getting a few physical books, just in case.


I would see if you can get an ebook of "code complete". I like that book a lot. It's full of (dated) examples and good advice.

If you have the bandwidth I would get two IDEs, maybe Android Studio and Eclipse and give yourself some projects to do.

Also, if you have the time it's not a bad idea to familiarize yourself with blender.


Install a local LLM (e.g. Vicuna https://github.com/lm-sys/FastChat) to have an offline alternative for stackoverflow (and GPT4).


Internet in a box maight be a good starting point for offline ressources https://internet-in-a-box.org/


Maybe something like that could help if you still have time to set it up: https://internet-in-a-box.org/


I would hedge my bets and also download plenty of fiction. The risk of becoming blocked by one little thing you need to download, but can't, seems quite high.


Is hosting a small local LLM possible yet that is trained e.g. on wikipedia and developer resources? That would be a really awesome use case.


No tip, just wanted to wish you luck and hope you and your family stay safe. Hope Sudan finds the peace it deserves soon.


if you try to do any local development you might also need to cache dependencies locally (somehow, predict deps in advance)

probably easier you find someone to sponsor you like internship and you move to some place that has better connectivity (maybe border town)


create an account on https://singlelogin.re/ (z-lib) and download books. 10 per day should give you a nice collection in 7 days.


I think the rise of GPT is going to push more engineers into being subject matter experts. My advice is to pick a subject that you are interested in and have resources to learn about and become an expert. That way when your access is restored you can better work with gpt


Make sure to get an extra kg or two in weights for your non-dominant arm.


I have a ton of O’Reilly books on my GDrive that I’d be happy to share


Maybe download ebooks, especially those that teach you how to go to the next level in your career beyond the programming you're doing now. And download any development environments you need. Libraries are going to be hard so download as many common ones as you can.


I would download books and code relevant to my work so i can learn and practice offline. Tons of it. Also once i have a working setup i’d take a backup in case i need to restore my os and other tools.


I know this is extreme, but maybe you should consider reality?


Reality in Sudan seems pretty rough right now.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: