Skip to content

Commit

Permalink
Initial commit of java assignments.
Browse files Browse the repository at this point in the history
  • Loading branch information
patelanil committed Feb 13, 2024
1 parent 0bb6ae8 commit 293e4da
Show file tree
Hide file tree
Showing 6 changed files with 218 additions and 0 deletions.
42 changes: 42 additions & 0 deletions cs-fundamentals/java-evolution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
### Activity 1: Java Timeline and Major Milestones

**Objective:** Create a detailed timeline that highlights major milestones in Java's development from its inception to 2004. This should include the release of major versions, introduction of key technologies, and pivotal moments in Java's history.

**Tasks:**
- Research the history of Java, focusing on its origins, the problems it aimed to solve, and its initial public reception.
- Identify and document the release dates of major Java versions (Java 1.0 through to Java 5.0) and describe the key features introduced in each version.
- Highlight significant technological advancements (e.g., applets, servlets, J2EE, J2ME) and their impact on development practices and industry standards.

### Activity 2: Deep Dive into Java Technologies

**Objective:** Conduct a series of deep dives into specific Java technologies, frameworks, and APIs that were significant up to 2004. Each intern (or group of interns) will focus on one area, researching its development, use cases, and impact.

**Tasks:**
- **Applets and Web Start:** Explore the use of Java applets in early web development, their capabilities, security concerns, and eventual decline with the rise of modern web technologies. Include a practical task of creating a simple applet.
- **Servlets and JSP:** Investigate how Java moved to the server side with servlets and JSP. Create a simple web application using servlets and JSP to understand their interaction and functionality.
- **J2EE Components:** Each intern/group selects a J2EE component (EJB, JMS, JTA, etc.) to research and present on its architecture, use cases, and how it contributed to enterprise application development. Optionally, develop a small demo that utilizes the selected component.
- **Java Performance Enhancements:** Study the evolution of Java's performance, focusing on JVM improvements, garbage collection mechanisms, and benchmarks. Analyze the performance changes between two Java versions using a simple Java application.

### Activity 3: Security in Java

**Objective:** Examine the evolution of security features and mechanisms in Java, identifying key vulnerabilities and how they were addressed over time.

**Tasks:**
- Compile a report on Java's security model, including its sandbox environment, access controllers, and cryptographic APIs.
- Research and document notable security vulnerabilities in Java's history and how subsequent updates addressed these issues.

### Activity 4: Community and Ecosystem Impact

**Objective:** Analyze the role of the Java Community Process (JCP), open-source projects, and the developer community in the evolution of Java.

**Tasks:**
- Investigate the formation and function of the JCP. Discuss its impact on Java's development through community involvement.
- Select an open-source project or tool developed in Java (up to 2004) and study its development history, community engagement, and impact on the Java ecosystem.

### Activity 5: Presentation and Panel Discussion

**Objective:** Share findings and insights from the research and practical activities with peers and mentors through presentations and a panel discussion.

**Tasks:**
- **Presentation:** Each intern or group prepares a presentation on their assigned topics, highlighting key findings, insights, and personal learning experiences.
- **Panel Discussion:** Host a panel discussion with all participants to debate the evolution of Java, its impact on software development, and lessons learned from its history. Prepare specific topics or questions to guide the discussion.
33 changes: 33 additions & 0 deletions cs-fundamentals/java-key-figures.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
### Key Figures in Java's Development:

#### 1. **James Gosling:** Often referred to as the "Father of Java," Gosling's vision and original design of Java laid the foundation for its future.
- **Activity:** Research James Gosling's background, his role in the creation of Java, and his contributions to its early versions. Explore his motivations for creating Java and how his decisions shaped the language.

#### 2. **Patrick Naughton:** As one of the original members of the Java project team (also known as the "Green Team"), Naughton played a significant role in Java's early development.
- **Activity:** Investigate Patrick Naughton's contributions to Java, focusing on the development of the Java language and its initial applications.

#### 3. **Mike Sheridan:** Alongside Gosling and Naughton, Sheridan was part of the initial team that started the Java project at Sun Microsystems.
- **Activity:** Examine Mike Sheridan's role in the conceptualization and launch of the Java project. Discuss how his contributions helped in positioning Java within Sun Microsystems and the broader tech industry.

#### 4. **Bill Joy:** A co-founder of Sun Microsystems, Joy was instrumental in Java's development and its adoption as a critical technology for the company.
- **Activity:** Study Bill Joy's involvement in Java, especially his role in envisioning the future of Java and his influence on its design and features.

#### 5. **Guy L. Steele Jr.:** Known for his work on defining the syntax and semantics of Java.
- **Activity:** Research Guy L. Steele Jr.'s contributions to the Java language specification. Explore how his expertise in programming languages influenced Java's design decisions.

### Groups and Organizations:

#### 1. **Sun Microsystems:** The company where Java was born. Its support and promotion of Java were crucial to its success.
- **Activity:** Analyze Sun Microsystems' role in developing and marketing Java. Look into how the company's strategies, leadership, and vision contributed to Java's growth.

#### 2. **Oracle Corporation:** After acquiring Sun Microsystems in 2010, Oracle took over Java's development. While this is beyond the project's timeline, understanding Oracle's acquisition can provide context for Java's history.
- **Activity:** Briefly research the impact of Oracle's acquisition of Sun Microsystems on Java, focusing on the transition period and immediate changes.

#### 3. **Java Community Process (JCP):** An organizational body that guides the development of Java.
- **Activity:** Investigate the formation of the JCP and its role in Java's evolution. Highlight significant contributions by community members and how the JCP has influenced Java's development.

### Suggested Activities for Research on Key Figures:

- **Biographical Essays:** Write detailed essays on each key figure, covering their background, contributions to Java, and the impact of their work on the language's evolution.
- **Interview Analysis:** Where possible, analyze interviews and talks given by these individuals to gain insights into their perspectives on Java's development and its future directions.
- **Contribution Case Studies:** Create case studies on specific contributions by these figures, such as the development of key Java features or pivotal decisions in Java's design philosophy.
119 changes: 119 additions & 0 deletions cs-fundamentals/jvm-security.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
### JVM Security: Understanding and Implementation

#### Introduction
Java Virtual Machine (JVM) security is a critical aspect of Java application development, ensuring that applications run in a secure, controlled environment. This guide delves into the architecture of the JVM, focusing on its security mechanisms, including the Security Manager, security policies, Class Loaders, and how they work together to protect Java applications from malicious code and unauthorized access.

#### JVM Architecture and Security

##### 1. JVM Overview
The JVM is an execution environment that allows Java applications to run on any device or operating system with a JVM implementation, ensuring platform independence. Its architecture is designed to provide a secure, efficient environment through various components.

##### 2. Key Components of JVM Architecture
- **Class Loader Subsystem**: Responsible for loading class files into the JVM, it plays a crucial role in the security model by segregating the namespace and ensuring classes are loaded from trusted sources.
- **Runtime Data Areas**: Including the heap, stack, and method area, these areas store the state of an application during runtime. Proper management of these areas is essential for application security and performance.
- **Execution Engine**: Executes instructions contained in Java bytecode. The Execution Engine includes a Just-In-Time (JIT) compiler and an interpreter, optimizing code execution and ensuring efficiency.
- **Security Manager**: Acts as a gatekeeper, enforcing a set of security rules defined by the application or system policies.
- **Native Interface and Libraries**: Allow the JVM to interact with hardware or system resources, providing an extended range of functionalities while maintaining a layer of abstraction for security.

##### 3. JVM Languages
Languages other than Java, such as Scala and Kotlin, also run on the JVM, benefiting from its secure and efficient environment.

#### Understanding JVM Security

##### 1. Bytecode Verifier
Ensures the reliability of Java bytecode, verifying its adherence to Java's specifications and preventing illegal operations.

##### 2. Security Manager and Access Controller
The Security Manager defines the security policy for an application, controlling access to system resources. It works closely with the Access Controller to perform runtime permission checks, enforcing strict access controls based on security policies.

##### 3. Sandbox Model
Restricts code from untrusted sources, allowing it to execute with limited capabilities to prevent unauthorized access to system resources.

##### 4. Public Key Infrastructure (PKI) and Certificates
Java uses PKI to authenticate the source and integrity of code, with certificates verifying the authenticity of code sources.

##### 5. Secure Class Loading
By managing namespaces and ensuring classes are loaded from trusted sources, the Class Loader plays a vital role in JVM security.


### Assignment: Implementing and Understanding JVM Security

#### Objective:
This assignment aims to reinforce the understanding of Security in the Java Virtual Machine (JVM), focusing on the Security Manager, security policies, and the Class Loader. Interns will gain hands-on experience in implementing security features and understanding how these components work together to ensure a secure Java application environment.

#### Assignment Overview:
Interns will develop a Java application that demonstrates the use of the Security Manager, custom security policies, and class loading mechanisms. The assignment is divided into three parts, each focusing on a different aspect of JVM security.

#### Part 1: Implementing a Custom Security Manager
- **Task**: Create a simple Java application and implement a custom Security Manager.
- **Requirements**:
- Write a Java class that extends `SecurityManager`.
- Override methods to enforce custom security checks (e.g., restrict file read/write operations).
- In your main application, set your custom Security Manager and attempt various operations that trigger your security checks.
- **Learning Outcome**: Understanding how the Security Manager intercepts operations and enforces security policies.

#### Part 2: Defining and Applying Security Policies
- **Task**: Create a security policy file and apply it to your Java application.
- **Requirements**:
- Write a policy file granting specific permissions (e.g., granting file read permission but denying write permission).
- Run your Java application with this policy file using JVM arguments (e.g., `-Djava.security.policy=myPolicy.policy`).
- Demonstrate how operations are allowed or denied based on the defined policy.
- **Learning Outcome**: Gain insight into how security policies are defined and enforced at runtime.

#### Part 3: Custom Class Loader
- **Task**: Implement a custom Class Loader to load a class and apply security checks.
- **Requirements**:
- Create a simple Java class (e.g., `SampleClass`) that performs a specific operation (e.g., accessing a file).
- Write a custom Class Loader that loads `SampleClass` from a file or byte array.
- Implement security checks within your Class Loader (e.g., only load classes from a specific directory).
- In your main application, use your custom Class Loader to load and execute `SampleClass`.
- **Learning Outcome**: Understanding how Class Loaders contribute to JVM security and how they can be used to enforce security constraints.

#### Deliverables:
1. Source code for the Java application, custom Security Manager, and custom Class Loader.
2. A security policy file used in Part 2.
3. A report documenting:
- The design and implementation of each part.
- Challenges faced and how they were overcome.
- Observations on how Security Manager, security policies, and Class Loaders enhance JVM security.

#### Evaluation Criteria:
- Correct implementation of the custom Security Manager, security policy, and Class Loader.
- Ability to demonstrate and explain how security checks are enforced.
- Quality and clarity of the report.

#### Additional Notes:
- Encourage interns to experiment with different security scenarios and observe the behavior of their application under different security settings.


### Why This Project Matters

1. **Technological Relevance**: The JVM is a cornerstone of Java programming, one of the most widely used languages in the world. Understanding its evolution is essential for grasping current tech trends and the future of software development.

2. **In-Demand Skills**: Employers highly value knowledge of JVM internals and its ecosystem among software developers. This project offers you a unique opportunity to gain deep insights into JVM technologies, setting you apart in the job market.

3. **Innovation and Problem Solving**: By exploring how different JVM implementations address specific challenges, you'll develop a keen sense of problem-solving and innovation—skills that are critical in any tech role.

### Career Advantages

1. **Enhanced Resume**: Adding a comprehensive research project on the JVM ecosystem to your resume showcases your ability to undertake in-depth technical analysis and engage with complex software engineering concepts.

2. **Technical Mastery**: Gaining a nuanced understanding of the JVM will enhance your programming skills, making you a more competent and confident developer.

3. **Future Trends Insight**: This project will equip you with the knowledge to anticipate and adapt to future software development trends, a valuable skill in the ever-evolving tech industry.

### Personal and Professional Development

1. **Critical Thinking**: You'll develop your ability to think critically about technology, an essential skill for making strategic decisions in your future career.

2. **Research Skills**: Learn how to conduct thorough research, analyze data, and synthesize information—a transferrable skill set beneficial for any professional path.

3. **Communication Skills**: Presenting your findings will hone your ability to communicate complex ideas clearly and persuasively, a key competency in any job.

4. **Portfolio Project**: This research project will serve as a standout piece in your portfolio, demonstrating your initiative, depth of knowledge, and commitment to continuous learning.


#### Conclusion:
This assignment is designed to provide practical experience with JVM security mechanisms, allowing interns to understand the importance and functionality of the Security Manager, security policies, and Class Loaders in maintaining a secure Java environment.

This project is not just an assignment; it's an opportunity to fuel your curiosity, challenge yourself, and make a tangible impact on your career prospects.
1 change: 1 addition & 0 deletions roles-responsibilities/business-analyst.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

11 changes: 11 additions & 0 deletions roles-responsibilities/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Organization structure, roles and responsibilities in a SaaS startup.


https://www.softkraft.co/what-is-the-ideal-tech-startup-team-structure/
https://merge.rocks/blog/whom-might-you-need-a-basic-team-structure-in-a-saas-startup
https://www.linkedin.com/pulse/how-structure-your-engineering-team-success-genvaluesab/

https://www.headway.io/events/product-team-structures-for-series-a-startups

https://productlessons.medium.com/what-is-the-ideal-way-to-structure-your-product-teams-2af26ad86480

12 changes: 12 additions & 0 deletions ubpl/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Inspired by
1. https://www.moqui.org/m/docs/mantle/Business+Process+Library
2. https://www.moqui.org/m/docs/mantle/Business%20Process%20Library/Story%20of%20Online%20Retail%20Company

Omnichannel OMS scenarios

* BOPIS
* BORIS
* Ship from Store
* Pre-Orders
* Store Inventory Management

0 comments on commit 293e4da

Please sign in to comment.