Tag Info

Hot answers tagged

11

Since you're not talking about booting, your answer is actually that the concept of "executable," or even "files" is rather irrelevant. The concept of files is an OS concept. Without an OS, all you have is a harddrive, with some bits on it. It is the OS that gives structure to that information that makes it meaningful to think of the data as a file. For ...


9

It seems to be due to a fundamental disagreement between Alan Kay versus the people (primarily Tim Berners-Lee) who designed the web, about how such a system should work. The ideal browser, according to Kay, should really be a mini operating system with only one task: To safely execute code downloaded from the internet. In Kays design, the web does not ...


6

Internal networks often use 1 Gbps connections, or faster. Optical fiber connections or bonding allow much higher bandwidths between the servers. Now imagine the average size of a JSON response from an API. How much of such responses can be transmitted over a 1 Gbps connection in one second? Let's actually do the math. 1 Gbps is 131 072 KB ...


6

It's dangerously easy as a programmer to start thinking that every project you encounter could and should be done better (read: rewritten) because it doesn't correspond to your vision. We've ALL been there. You look at code and your mind just goes into "what's wrong with this"-mode, instead of focusing on what's right about it. If you start plucking away ...


5

It looks like you borrowed some vocabulary from theoretical computer science (regarding the words "set" and "language"), and tried to use that to interpret the textbook description of the lower level computer systems (CPU and hardware). The word "set" as in "instruction set architecture" refers to the set of predefined opcodes that are valid for the given ...


5

Based on the picture you provided, this looks like Onion Architecture, but with the dependencies proceeding in reverse. A typical onion architecture looks something like this: Each layer presents interfaces (an API) to the layer above it, and communicates with the layer above it, and the layer below it. The onion model has some similarities to a ...


5

Usually, services call other services when they need to access their data. Each piece of data should belong to a particular service which will be the only entry point to accessing this data and modifying it. Some services will be simple and usually correspond closely to your domain model (e.g. a service for handling users) while others will be high-level and ...


4

Files are a low-level abstraction provided by the operating system thru some file system layer. Another important abstraction provided by OSes is processes (running instances of programs). The OSdev site has interesting practical information. The underlying bar metal computer (e.g. your x86 laptop or desktop) does not know about files.... It is reading and ...


4

Back in the stone age of computing, one of the common modes of booting up was to read an executable program into memory completely under hardware control and then start running it. The PDP-10 for example, could command the paper tape reader to read a block of data, take the data presented and stuff it into memory, and then start running it when the block ...


4

To get an OS up and running, there are various things being executed which are typically called "loaders" and "bootstrappers". Their collective purpose is exactly as their names imply: to get the OS up and running, one step at a time. Some of these executable code are stored in read-only memory (ROM), or some type of reprogrammable memory (such as Flash ...


4

Requiring a reboot of the application when the database goes down is definitely a bad design, because it increases maintainance effort which will negatively affect your uptime. A good design would try to reconnect to the database every few seconds so business can continue as soon as the database is available again. In the meantime, returning a "500 ...


3

If you built a house and you want to describe it to someone, would you talk about what kind of flooring material you used? About what kind of hammer and tools you used? About the plumbing? You might, but none of this has to do with architecture. Architecture is about what kind of rooms there are, where they are and how they are connected. So the first ...


3

The difference between those choices are in the affinity of task assignments to threads. As I explain in an earlier question, it is entirely your choice to implement this affinity or not. There are ways to implement multithreading without the affinity of tasks to threads. Producer-Consumer pattern is suitable if: The dataflow pipeline is linear - no ...


3

To me, the middle tier is not actually the middle tier because regardless of how isolated the design is and how stateless the DLLs are, they execute in the context of a web server only and essentially a part of the web application. No, the middle tier could be in another server(s) altogether when it comes to large applications. For example you ...


3

Implementing repositories "by the book" will typically mean to create one per entity or table (see here, for example). However, when your entities are uniform, and all of your repositories look very similar, it can make sense to implement a generic repository class (just as shown in the former link). That will probably be the better alternative for avoiding ...


2

As Frank said, you appear to have figured out a lot of this on your own already, so I only have one piece of advice regarding the main question. Do the refactoring gradually, incrementally, alongside whatever changes you make to add business value. Don't try to break the 5000 LOC monster into five 1000 LOC critters all in one go. As long as you keep in mind ...


2

We know that nowadays the systems are designed as web applications. Every imaginable system is either converted or planned to be converted to a web app. Huh? While web apps are certainly quite popular and useful, they are by no means the be-all-end-all. Here are some cases where web apps are a poor choice and a "desktop" app would be a much better ...


2

Whether you place the "Middle Tier" code in DLLs loaded by the Front End site or place it into a separate web service application is just a detail. This placement decision does not change the code architecture in a meaningful way. It's more of a deployment decision. No, the tiers are not defined by physical deployment decisions but by code architecture and ...


2

I think you are reading too much into the 'micro' part. It doesn't mean replace every class with a network service, but componentize a monolithic application into sensibly sized components, each one dealing with an aspect of your program. The services won't talk to each other, so at worst you've split a large network request into several smaller ones. The ...


2

firmware is software that runs on Read-Only Memory (ROM) or something similar. firmware is firmer than software because software can be changed somewhere along the chain from where it is stored in some Read-Write media and loaded into writable memory and executed from there. firmware cannot work as in-place self-modifying code. software can run as ...


2

Firmware doesn't really fit into that hierarchy. Firmware is really just a place where a library of machine code (in the sense of level 2) is stored. Often the code stored in firmware is for the management of the motherboard and IO channels, but it need not be. I've got an old Tandy laptop that has Multiplan, a text editor, a BASIC interpreter, and a ...


2

I'm not quite sure if the image is accurate enough to expose such details as Firmware. For example the top 2 levels usually happen well before rest, the OS is not interpreting the program in usual sense of the word... unless we mean loader etc. In the end the model does not have straightforward mapping to a 'real life' computer - I would even consider it ...


2

Of course cpu cache affects boot time, since CPU cache affects the processor performance. BTW the boot procedure often lasts several seconds, and that is significant enough for the cache (both instructions and data cache) to be important. A cache line is often 64 bytes. A cache size is a few megabytes. It can be mostly filled in some millions cycles (e.g. a ...


2

Before an OS is installed on a bare computer system, does the computer use files? No. At startup some code is copied from an EPROM into memory at a known location and the processor executes those instructions. All it does is load execute instruction at the 'current' memory address increment it and repeat forever. The CPU is unaware that a harddisk ...


2

The obvious answer to this problem is "don't do N^2", at least not for the full value of N - you can very rapidly reject large parts of your data set for all sorts of reasons: Wrong sex. While I'm a liberal kind of guy, I'm still not interested in dating other guys. There may obviously be some exceptions to this - e.g. bisexuals. Wrong country. It doesn't ...


2

Although I have not worked in this area, it seems like this is the type of problem one would use something like Apache Giraph to handle. You essentially want a huge population of "things" which you suspect are "related" to each other possibly across a large number of dimensions, and you want to pair them up optimally based on the strongest matches. You ...


2

Why are repositories any different from other classes? A class should have a single responsibility - a single reason to change. If you have a bundle of related data sources that are (necessarily) tightly coupled, then it can make sense to have a single repo to deal with all of them. If you have some unrelated tables, then it's probably better to have a ...


2

V8 and other language implementations using similar techniques are just-in-time compilers. They generate code, and that generated code is speculatively optimized (with checks to fall back to slower, more general code if the specialization turns out to be invalid). So when generating code, the JIT compiler often has a good guess at what the hidden class of an ...


1

In addition to Roman Reiner's answer, your checklist doesn't mention the requirements for each application. You will need some combination of documents/diagrams/tests to say what the old applications are supposed to do before you start writing new applications to replace them.


1

You can use various forms of caching to eliminate some of the bottlenecks of retrieving data. You can also consider using a document based database (NoSQL) which can improve performance. Here is an article which discusses performance in microservices: https://blog.dropletpay.com/lessons-learnt-building-a-microservice-architecture/ Lesson 6: Cache ...



Only top voted, non community-wiki answers of a minimum length are eligible