All posts by admin

How to Discover Requirements for a Maintenance Project

Problem:

You are responsible for capturing and analyzing requirements for a project to enhance a legacy system however misunderstandings happen too frequently among your team members.

Context:

A maintenance project is very different to a greenfield project. The key difference is that a business analysist who is responsible for discovering requirements must be not only domain expert but also be able to communicate with technical experts very well. In other words, the business analysist must both be familiar with the legacy system workflows and have adequate technical background.

Suggestion:
  1. Collect existing artifacts, including software products, user guide, administrative guide, installation guide, deployment schema, design specification.
  2. Build a glossary and reference sources.
  3. Get initial agreement about terminologies (terms).
  4. List all system roles.
  5. Walk through the existing user interfaces to determine existing roles and related core use cases.
  6. Collect business problems or needs.
  7. Distill navigation flow and user interfaces related to customer’s problems or needs. Try to find out the exact screens in the existing system related to customer’s problems or needs.
  8. Clarify terminologies. Ask for example values, files, tools for doing something related to unclear or ambiguous terms.
  9. Identify correct problems by asking for demonstration of the issues or limitations of the current system, step-by-step illustrated examples with actual existing values, drawing sketches for guessed needs using a pencil or a tool.
  10. Identify correct needs by asking for user guide, video demonstration of a feature, 3rd party installation files and custom scripts if available, example input data and output reports.
  11. Document business needs by creating use cases with mockups. There might be a need of review of the existing source code and database to indentify initial draft technical solutions when creating these use cases to ensure that they are feasible.
  12. Identify affected features by revising the use cases with additional steps, mockups, data inputs/outputs, descriptions. There might be a need of review of the existing source code and database to indentify initial draft technical solutions when identifying the affected features.
  13. Identify affected roles by revising the use cases with additional or new business rules for all related roles.
  14. Some enhancemens related to technical aspects might require collecting existing technical artifacts. These artifacts might inlcude current database or data schemas, and current software products and source code if possible.
  15. Install tools related to existing source code, then build and run existing source code and database if they are available.
  16. Collect technical problems or needs by listing current technology issues using notes or diagrams.
  17. Analyze techincal needs. These might be data integrity issue (missing or duplicated fields? missing or duplicated rows?) or performance issue (too many rows to handle by current software?).
  18. Finally document technical needs by creating an existing architecture and a proposed future architecture. There is surely a need of review of the existing source code and database to indentify initial draft technical solutions when creating existing architecture and a proposed future architecture.
Things that have to be discovered and confirmed:
  1. Legacy systems: Examples might be access to legacy systems, captured UI screenshots of each sub-systems, parts of database schemas, example data, example legacy source code, legacy codebase.
  2. Problems: Examples might be lack of documentation and expertise, non-scalable architecture, high cost development for new features, unfriendly UI/UX, performance issue.
  3. Goals: Examples might be migration of legacy system to event-driven, cloud based microservice architecture with modern UI/UX.
  4. Budget: Used to select appropriate technologies. Some cloud services, e.g. Salesforce Platform or AWS relational databases, might be very expensive.
  5. Initial text or diagrams: Ask for clarifications of ambiguous terms or components. Does initial proposed solution just need to be general? Should proposed architecture need to be adapted to specific problems, needs, legacy codebase, existing data, and budget?

 

 

How to Use nuget

1. Downloading packages to a build server
Motivation:

You have a .NET solution that uses NuGet package manager.

You have many files in the packages folder and want them to be downloaded to your build server.

Solution:
  • Download Windows x86 Commandline.
  • Copy nuget.exe to an folder and add the folder path to Windows PATH.
  • Open Command Prompt and execute the commands below.
    cd D:\Build\Source
    nuget restore YourSolutionFileName.sln
    
2. Downloading (Restoring) packages using MSBuild
  • Execute the commands below.
    "C:\Program Files\Microsoft Visual Studio\2022\Professional\Msbuild\Current\Bin\MSBuild.exe" "../YourSolution.sln" -restore -p:RestorePackagesConfig=true
    
3. Updating packages for a solution using VS Studio Package Manager Console
  • Open Tools > NuGet Package Manager >  Package Manager Console.
  • Execute the commands below.
    Update-Package
4. Reinstalling packages for a solution using VS Studio Package Manager Console
  • Open Tools > NuGet Package Manager >  Package Manager Console.
  • Execute the commands below.
    Update-Package –reinstall
    
5. Configuring package restore when building a project using VS Studio :
  • Open Tools > NuGet Package Manager >  Package Manager Settings.
6. Reverting PackageReference project to packages.config:
  • Copy and  overwrite project file from backup created by Visual Studio or from source control system.
  • Delete all obj and bin files.
7. Fixing “Could not load file or assembly…” issue:
  • Example issue:
    Could not load file or assembly 'Microsoft.IdentityModel.Tokens.Saml, Version=8.0.2.0
  • Open Visual Studio > Solution > Project > References > Microsoft.IdentityModel.Tokens.Saml > Properties and identify file or assembly version, e.g. 8.1.2.0.
  • Open Visual Studio > Solution > Project > web.config, search for Microsoft.IdentityModel.Tokens.Saml and modify the version for the file or assembly. Example:
    <bindingRedirect oldVersion="0.0.0.0-8.1.2.0" newVersion="8.1.2.0" />
  • Repeat the process for all the files or assemblies.

 

How to Disable Automatic Updates on Windows Server

Motivation:

You have a server with Windows Server 2016. The server Windows updates are being downloaded and installed automatically. This may affect your customers’ usage. You want to disable it so that you can install Windows updates when you find most appropriate.

Solution:
  1. Open Command Prompt (Admin).
  2. Type sconfig and press Enter.
  3. Press 5 (Windows Update Settings:), then press Enter.
  4. Press D (to select DownloadOnly option), then press Enter.
  5. Click OK button.
  6. Press 13 (Restart Server), then press Enter.
  7. Click Yes button to restart your server.

To disable automatic reboots in inactive hours, you can try the steps below.

1. Click Start and type Task Scheduler.
2. Expand Task Scheduler Library >> Microsoft >> Windows .
3. Click  UpdateOchestrator.
4. Right-click on Reboot and select Disable.

 

How to Fix EPUB Processing Failure on Google Play Books

Problem:

You uploaded EPUB file to Google Play Books but received Processing Failed error message.

Solution:
  1. Open https://www.zamzar.com.
  2. Click Choose Files and select EPUB file.
  3. Click Convert To and select azw3.
  4. Click Convert Now button.
  5. Download the azw3 file.
  6. Return to https://www.zamzar.com.
  7. Click Choose Files and select azw3 file.
  8. Click Convert To and select EPUB.
  9. Click Convert Now button.
  10. Download the EPUB file.
  11. Upload the EPUB file to Google Play Books.

Note: https://www.zamzar.com offers only 2 free daily conversions.

 

 

Topic 26 – Introduction to Cloud Computing

Why do I need to learn about cloud computing?

Because you will develop software systems that usually leverage cloud services for quick deployment or scalable computation or storage.

What can I do after finishing learning cloud computing?

You will be able to

  • deploy software systems to public clouds,
  • build your private cloud,
  • develop software using cloud plaftforms,
  • develop software using cloud services,
  • leverage cloud services for training and deploying machine learning models,
  • leverage cloud services for big data analytics and reporting.

What should I do now?

Please read
– this Dan C. Marinescu (2022). Cloud Computing – Theory and Practice. Morgan Kaufmann book, and
– this Andreas Wittig and Michael Wittig (2022). Amazon Web Services in Action. Manning Publications book, and
– this Nick Marshall et al. (2019). Mastering VMware vSphere 6.7. Sybex book, and
– this Rakesh Gupta (2020). Salesforce Platform App Builder Certification – A Practical Study Guide. Apress book, and
– this Philip Weinmeister (2019). Practical Salesforce Development Without Code – Building Declarative Solutions on the Salesforce Platform. Apress book, and
– this Tomasz Wiktorski (2019). Data-Intensive Systems – Principles and Fundamentals using Hadoop and Spark. Springer book.

Terminology Review:

  • Software as a Service
  • Multitenancy
  • Infrastructure as a Service
  • Virtual Machines
  • Software-Defined Networking
  • Infrastructure as Code (IaC)
  • Platform as a Service
  • Containers as a Service
  • Function as a Service (Serverless Computing)
  • File Storage
  • Block Storage
  • Object Storage
  • Direct-Attached Storage (DAS)
  • Network-Attached Storage (NAS)
  • Storage Area Network (SAN)
  • GFS
  • Bigtable
  • MapReduce

After finishing learning about cloud computing please click Topic 27 – Introduction to Block Chain to continue.

 

Topic 25 – Introduction to Distributed Systems

Why do I need to learn about distributed systems?

Distributed systems provides foundation for understanding theories and techniques behind cloud computing and block chain technology.

Architectures, protocols and algorithms introduced in distributed systems are necessary for creating complicated software too.

What can I do after finishing learning distributed systems?

You will be able to design software that can

  • tolerate faults,
  • shard data,
  • handle massive number of requests, and
  • perform expensive computation.

You will be prepared to learn about cloud computing and block chain technology.

What should I do now?

Please watch this Distributed Systems, UC Santa Cruz Baskin School of Engineering, 2021 course to get familar with core concepts and protocols.

After that please watch this MIT 6.824, Distributed Systems, Spring 2020 course to learn how to design a large-scale distributed system.

At the same time you can read
– this Maarten van Steen and Andrew S. Tanenbaum (2023). Distributed Systems. Maarten van Steen book, and
– this Martin Kleppmann (2017). Designing Data-Intensive Applications – The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. O’Reilly Media book to solidify your knowledge.

Terminology Review:

  • Fault Tolerance
  • Consistency
  • System Models
  • Failure Detectors
  • Communication
  • Ordering
  • State Machine Replication
  • Primary-Backup Replication
  • Bully Algorithm
  • Ring Election
  • Multi-Leader Replication
  • Leaderless Replication
  • Cristian’s Algorithm
  • Berkeley Algorithm
  • Lamport Clocks
  • Vector Clocks
  • Version Vectors
  • Chain Replication
  • Consensus Algorithms
  • FLP
  • Raft
  • Paxos
  • Viewstamped Replication
  • Zab
  • Consistent Hashing
  • Distributed Transactions
  • ACID
  • Two-Phase Commit
  • Three-Phase Commit
  • Serializability
  • Two-Phase Locking
  • Distributed Locks
  • CAP
  • Consistency Models
  • Linearizability
  • Distributed Architectures
  • Distributed Programming
  • Hadoop
  • Spark
  • Tensorflow
  • PyTorch
  • Kubernetes
  • Bitcoin
  • Smart Contracts

After finishing learning about computer networks please click Topic 26 – Introduction to Cloud Computing to continue.

 

When to Use Cloud Resources

Motivation:

  • You are using on-premises virtual servers and storage for your services.
  • You wonder whether you should move your services to public cloud, such as AWS or Azure or Google Cloud, in order to reduce hardware and maintenance cost.

Suggestions:

  1. It is common that cloud resources for system running 24/7 are much more expensive than private resources.

  2. Cloud resources are suitable for 
    • a very big system that needs to be run only once within limited time, or
    • startup with many consolidated services on single small virtual server, or
    • testing purpose, or
    • a very big company with big budget who want reliable and elastic resources.

       

      Topic 20 – Discrete Mathematics

      Why do I need to learn about discrete mathematics?

      Discrete mathematics is a fundamental tool for understanding many theories and techniques behind artificial intelligence, machine learning, deep learning, data mining, security, digital imagine processing and natural language processing.

      The problem-solving techniques and computation thinking introduced in discrete mathematics are necessary for creating complicated software too.

      What can I do after finishing learning discrete mathematics?

      You will be prepared to learn modern theories and techniques to create modern security, machine learning, data mining, image processing or natural language processing software.

      What should I do now?

      Please read
      – this Kenneth H. Rosen (2012). Discrete Mathematics and Its Applications. McGraw-Hill book and
      – this Alfred V. Aho and Jeffrey D. Ullman (1994). Foundations of Computer Science  book (free online version).

      Alternatively, please watch this MIT 6.042J – Mathematics for Computer Science, Fall 2010 course (Textbook).

      Terminology Review:

      • Statement: An assertion that is either true or false.
      • Mathematical Statements.
      • Mathematical Proof: A convincing argument about the accuracy of a statement.
      • If p, then q. p is hypothesis. q is conclusion.
      • Proposition: A true statement.
      • Theorem: An important proposition.
      • Lemmas: Supporting propositions.
      • Logic: A language for reasoning that contains a collection of rules that we use when doing logical reasoning.
      • Propositional Logic: A logic about truth and falsity of statements.
      • Logic Connectives: Not (Negation), And (Conjunction), Or (Disjunction), If then (Implication), If and only if (Equivalence).
      • Truth Table.
      • Contrapositive of Proposition: The contrapositive of p q is the proposition ¬q ¬p.
      • Modus Ponens: If both P  Q and P hold, then Q can be concluded.
      • Predicate: A property of some objects or a relationship among objects represented by the variables.
      • Quantifier: Tells how many objects have a certain property.
      • Mathematical Induction: Base Case, Inductive Case.
      • Recursion: A Base, An Recursive Step.
      • Sum Example: Annuity.
      • Set.
      • Subset.
      • Set Operations: A ∪ B, A ∩ B, A ⊂ U: A’ = {x : x ∈ U and x ∉ A}, A \ B = A ∩ B’ = {x : x ∈ A and x ∉ B}.
      • Cartesian Product: A × B = {(a; b) : a ∈ A and b ∈ B};
      • A binary relation (or just relation) from X to Y is a subset R ⊆ X × Y. To describe the relation R, we  may list the collection of all ordered pairs (x, y) such that x is related to y by R.
      • A mapping or function f ⊂ A × B from a set A to a set B to be the special type of relation in which for each element a ∈ A there is a unique element b ∈ B such that (a, b) ∈ f.
      • Equivalence Relation.
      • Equivalence Class.
      • Partition.
      • A state machine is a binary relation on a set, the elements of the set are called states, the relation is called the transition relation, and an arrow in the graph of the transition relation is called a transition.
      • Greatest Common Divisor.
      • Division Algorithm.
      • Prime Numbers.
      • The Fundamental Theorem of Arithmetic: Let n be an integer such that n > 1. Then n can be factored as a product of prime numbers. n = p₁p₂ ∙ ∙ ∙ pₖ
      • Congruence: a is congruent to b modulo n if n | (a – b), written a ≡ b (mod n).
      • Fermat’s Little Theorem.
      • Stirling’s Approximation.
      • Probability.
      • Example: The Monty Hall Problem.
      • The Four Step Method: (1) Find the Sample Space (Set of possible outcomes), (2) Define Events of Interest (Subset of the sample space),  (3) Determine Outcome Probabilities, (4) Compute Event Probabilities.
      • A tree diagram is a graphical tool that can help us work through the four step approach when the number of outcomes is not too large or the problem is nicely structured.
      • Example: The Strange Dice.
      • Conditional Probability: P(A|B) = P (A ∩ B) / P(B).
      • A conditional probability P(B|A) is called a posteriori if event B precedes event A in time.
      • Example: Medical Testing.
      • Independence: P(B|A) = P(B)  or P(A∩B) = P(A) · P(B).
      • Mutual Independence: The probability of each event is the same no matter which of the other events has occurred.
      • Pairwise Independence: Any two events are independent.
      • Example: The Birthday Problem.
      • The birthday paradox refers to the counterintuitive fact that only 23 people are needed for that probability to exceed 50%, for 70 people: P = 99.9%.
      • Bernoulli Random Variable (Indicator Random Variable): f: Ω {1, 0}.
      • Binomial Random Variable: A number of successes in an experiment consisting of n trails. P (X = x) = [(n!)/((x!) · (n-x)!))]pˣ(1 − p)ⁿ − ˣ
      • Expectation (Average, Mean). E = Sum(R(w) · P(w)) = Sum(x · P(X = x)).
      • Median P(R < x) ≤ 1/2 and P(R>x) < 1/2.
      • Example: Splitting the Pot.
      • Mean Time to Failure: If a system independently fails at each time step with probability p, then the expected number of steps up to the first failure is 1/p.
      • Linearity of Expectation.
      • Example: The Hat Check Problem.
      • Example: Benchmark: E(Z/R) = 1.2 does NOT mean that E(Z) = 1.2E(R).
      • Variance: var(X) = E[(X−E[X])²].
      • Kurtosis: E[(X−E[X])⁴].
      • Markov’s Theorem: P(R ≥ x) ≤ E(R)/x (R > 0, x > 0).
      • Chebyshev’s Theorem: P(|R – E(R)| ≥ x) ≤ var(R)/x². Boundary of the probability of deviation from the mean.
      • The Chernoff Bound: P(T ≥ c·E(T)) ≤ e−ᶻ·ᴱ⁽ᵀ⁾, where z = c·lnc − c + 1, T = Sum(Tᵢ),  0 ≤ Tᵢ ≤ 1.

      After finishing learning about discrete mathematics please click Topic 21 – Introduction to Computation and Programming using Python to continue.

       

      Topic 2 – Introduction to Computer Networks

      Why do I need to learn about computer networks?

      Because you will develop software system that usually connects with other software systems via various networks.

      What can I do after finishing learning computer networks?

      You will be able to set up various software systems such as Domain Name System, Active Directory System, Electronic Mail, File Transfer Protocol System, Remote Desktop Services, File Services, HTTP Services.

      You will be prepared to learn about network programming, game development, web application development, and distributed systems and blockchain.

      What should I do now?

      Please audit this The Bits and Bytes of Computer Networking course and complete all the quizzes.

      Alternatively, you can read
      – this Andrew S. Tanenbaum and David J. Wetherall (2021). Computer Networks. Pearson Education book, and
      – this James F. Kurose and Keith W. Ross (2021). Computer Networking: A Top-Down Approach. Pearson book.

      After that please read
      – this Brian Svidergol et al. (2018). Mastering Windows Server 2016. Wiley book, and
      – this Larry L. Peterson and Bruce S. Davie (2021). Computer Networks: A Systems Approach. Morgan Kaufmann book.

      Terminology Review:

      • Computer Networking.
      • Computer Networks, Peer-to-Peer Systems, Local Area Networks, Wide Area Networks, Virtual Private Networks, ISP Networks, The Internet.
      • Network Software, Distributed Systems, World Wide Web, Network Protocols.
      • The OSI Reference Model: The Physical Layer, The Data Link Layer, The Network Layer, The Transport Layer, The Session Layer, The Presentation Layer, The Application Layer.
      • The TCP/IP Reference Model: The Link Layer, The Internet Layer, The Transport Layer, The Application Layer.
      • The TCP/IP 5-Layer Model: The Physical Layer, The Data Link Layer, The Network Layer, The Transport Layer, The Application Layer.
      • Network Interface Cards, RJ45 Ports and Plugs, Cables, Hubs, Switches, Routers, Servers, Clients, Nodes.
      • Bit, Octet (Byte), Modulation, Line Coding, Twisted Pair Cables, Simplex Communication, Duplex Communication, Full-Duplex, Half-Duplex.
      • Collision Domain, Ethernet, Carrier-Sense Multiple Access with Collision Detection (CSMA/CD), MAC Address.
      • Unicast, Broadcast, Multicast.
      • Data Packet, Ethernet Frame, Virtual LAN (VLAN), VLAN Header.
      • First-in-First-Out (FIFO).
      • IPv4 Addresses, IIPv4 Datagrams, IPv4 Address Classes, Address Resolution Protocol (ARP), Subnet Masks, CIDR (Classless Inter-Domain Routing).
      • Routing Tables, Autonomous System, Interior Gateway Protocols,  Exterior Gateway Protocols, Distance Vector Routing Protocols, Link State Routing Protocols, Core Internet Routers, Border Gateway Protocol (BGP), Non-Routable Address Space.
      • Multiplexing, Demultiplexing, Ports.
      • TCP Segment, TCP Control Flags, Three-way Handshake, Four-way Handshake, Transmission Control Protocol (TCP), TCP Socket, TCP Socket States.
      • Connection-Oriented Protocols, Connectionless Protocols.
      • User Datagram Protocol (UDP).
      • Firewall.
      • Network Address Translation.
      • Frames, Packets, Messages.
      • Network Socket.
      • Transport Service Primitives: LISTEN, CONNECT, SEND, RECEIVE, DISCONNECT.
      • Domain Name System (DNS).
      • Electronic Mail, SMTP Protocol.
      • File Transfer Protocol System.
      • Remote Desktop Services.
      • File Services.
      • HTTP Services.
      • Time Services.
      • Short Message Service (SMS).
      • Public Switched Telephone Network (PSTN), Plain Old Telephone Service (POTS), Modems, Dial-up (Phone Lines), Usenet.
      • Broadband, T-Carrier Technologies, Digital Subscriber Line (DSL, Phone Lines), Asymmetric Digital Subscriber Line (ADSL), Symmetric Digital Subscriber Line (SDSL), High Bit-Rate Digital Subscriber Line (HDAL), Digital Subscriber Line Access Multiplexers (DSLAM).
      • Cable Broadband (Television Lines), Cable Modems, Cable Modem Termination System (CMTS).
      • Fiber to the X (FTTX), Fiber to the Neighborhood (FTTN), Fiber to the Building (FTTB), Fiber to the Home (FTTH), Fiber to the Premises (FTTP), Optical Network Terminator.
      • Point to Point Protocol (PPP), Network Control Protocol (NCP), Link Control Protocol (LCP), Point to Point Protocol over Ethernet (PPPoE).

      After finishing learning about computer networks please click Topic 3 – Introduction to Programming to continue.