Giter VIP home page Giter VIP logo

conferentia's Introduction

Greetings fellow developer! This is Ramiro 👋

At my GitHub repositories you will find some personal projects that I develop in my free time outside of my main job position. Feel free to take a look, to ask questions and to send PRs if you wish to do so. Some of my projects are still private and are waiting for proper documentation to be released as open source.

About Me:

😄 Pronouns: he/him.

💻 Currently working as a Senior Frontend Engineer at Latch.

🛠️ I specialize in Angular and TypeScript as my current core technologies. I'm also a devoted agilist and a Certified Scrum Master. Kanban, Scrum and Essence are the main software development frameworks I've worked with.

🌱I’m currently learning about the Sanity content platform and the NX monorepo toolkit, together with AnalogJS — which I'm currently using to develop my personal website.

📚 I obtained a BD in Information Systems Analysis from the Universidad Tecnológica Nacional. I'm currently finishing my ED in Information Systems Engineering. I have 10+ years of experience in the IT industry.

📫 You can reach me at @rolivenc on Twitter, you can send me an email to [email protected] or you can get a a more in-depth look of my professional career and credentials at my LinkedIn profile.

My hobbies & interests:

📚 Working through Josh Comeau's CSS for JS Developers course and currently reading How to Take Smart Notes, by Sönke Ahrens.

🗺️ Counter-Strike Level Designer since 2003, currently on an indefinite hiatus. Finished projects can be found in my repositories. I'm known for developing the de_dust2 spinoff map "de_dust2_largo" in 2005, which is known worldwide and won me this interview at PCGamesN magazine in 2020.

🎙️️ I'm a baritone singer at Coral Gloriana since 2014.

📽️ Cinephile. "Sunset Blvd." (1950), by Billy Wilder, is my favourite movie. I'm a Letterboxd user and you check my profile at this link.

🧱 LEGO enthusiast.

🦖 Dinosaur lover.


conferentia's People

Contributors

rolivencia avatar

Watchers

 avatar

conferentia's Issues

Implement a design solution to separate sorting concerns for domain entity collections

Summary

Domain entities like EventSponsor, SubjectArea and CommitteeArea require a way of establishing an arbitrary sorting mechanism, as per the requirements elicited at the development of the FAWHC 2023 event and, in extension, to future events. This means that, as per customer request, some of the entities must be displayed in the UI following a desired order that can't be chosen nor inferred via parameters that define the shape of each domain object model.

Requirements

  1. Define a property or set of properties that define the sorting order for an entity inside a collection. For example an order property shared in all the entities that have an arbitrary order when displayed in UI.
  2. A way to avoid coupling between the domain models and the architectural concerns that are related to providing a way of implementing an arbitrary sort for collections, together with an approach that would allow for reuse for future cases that will make use of these features.

Architectural diagram

Draft of code archicture

Sortable interface

An object implementing the Sortable interface adds a property to represent a value under which it can be sorted when part of a list or a given data structure supporting a sorting method.

export interface Sortable {
  order: number;
}

SortableEntity interface

An object implementing the SortableEntity interface acts as a wrapper for an entity of type T, delegating its ordering as a value inside a structure on the order property. The intent of the SortableEntity interface is allowing a specific model entity not having to deal with knowing details about the order in which it is displayed or sorted when being used or managed as part of collections or data structures, effectively separating concerns between the domain model and architectural purposes for the handling of data.

export interface SortableEntity<T> extends Sortable {
  entity: T;
}

SortingService abstract service

An abstract service that Implements ascending and descending sorting methods for objects implementing the Sortable interface. This service is to be extended to use, extend and override, if needed, the sorting methods here provided.

Including this abstract service in the design allows for code reuse of two basic sorting methods that only depend on the Sortable interface, reducing the amount of coupling by abstracting completely the entities from the sorting functionality.

export abstract class SortingService {
  protected ascendingSortFn = (a: Sortable, b: Sortable): number => {
    if (a.order > b.order) {
      return 1;
    } else if (a.order < b.order) {
      return -1;
    }
    return 0;
  };

  protected descendingSortFn = (a: Sortable, b: Sortable): number => {
    if (a.order > b.order) {
      return -1;
    } else if (a.order < b.order) {
      return 1;
    }
    return 0;
  };
}

EntitySortingService service

Service to handle objects implementing the SortableEntity interface when processing fetch requests to retrieve entities of the T type, allowing to hide sorting and ordering implementation details when returning T-type collections.

  • First generic type of the service, T, is the type of the managed entities, which can be a basic or composite type.
    Second parameter of the constructor
  • Second generic type of the service, K, is a type that extends an Iterable that wraps a collection of SortableEntities of the aforementioned T type.
export class EntitySortingService<
  T,
  K extends Iterable<SortableEntity<T>> = Array<SortableEntity<T>>
> extends SortingService {
  public unwrap = (wrapper: SortableEntity<T>): T => wrapper.entity;
  public sortAndUnwrapAsArray = (iterable: K, asc: boolean = true): T[] => {
    return [...iterable]
      .sort(asc ? this.ascendingSortFn : this.descendingSortFn)
      .map((element) => this.unwrap(element));
  };
}

Consume Ionic default example list from api endpoint

Details

Libs

  • Add initial version of Event and Activity abstractions. Include minimal data.

Backend

  • Add controllers and services to work with Events and Activities.
  • Add initial tests in Jest for controllers and services.

Frontend

  • Wire the Ionic app to consume mock data of an Event and Activities from the NestJS backend.
  • Configure the Ionic app environments apiUrl.

Add background image support in Event schema and model

Summary

Users must be able to load an image to be featured in a given instance event, with the possibility of the image to be displayed in a given global section of the application -- be it the background, header, or menu.

Implementing this feature will require

  • Adding the featuredImage property to the Event schema and domain model, together with the image description.
  • Adding the event image to the frontend code to be rendered.

Get eventId and apiUrl for app from environment variables

Description

The event id and the apiUrl for a given version of the app are hardcoded in environment.ts file at first. Before working on the platform as a SaaS, both strings must be able to be retrieved from a hardcoded string in the environment file, both for Angular and Ionic apps.

Escribir README.md con los comandos para ejecutar aplicaciones y compilar libs

This tasks requires to write a readme that:

  • Includes a succint initial description of what Conferentia is.
  • Includes a list with brief descriptions of the usage of each folder in the workspace.
  • Includes a list of scaffolding commands for the different projects.
  • Includes a list of scripts to run in the workspace.

Activity model: Fix mismatch between domain models and schemas in backend

Summary

There's inconsistencies between the naming used for properties defined in Sanity schemas and domain models, both for Activity and ActivityType entities.

  • Fix usages of snake_case in favor of camelCase
  • Activity must be related to an ActivityType via the type alias, to avoid name bloating.

Adapt core models from legacy version

Goal

  • Adapt the Activity, Speaker, ActivityType, etc. models from previous versions to the current one, based on the needs for the first JEA event that will use this new version of the app.
  • Identify which properties from the previous models needed to be updated when adapted to Sanity CMS.

Checklist

  • Adapt Actividad model.
  • Adapt TipoActividad model.
  • Adapt Disertante model.
  • Adapt Lugar model.
  • Adapt User model.
  • Add and slice the remaining models that are to be adapted

FAWHC: Add Sponsors to Home page right sidebar

Summary

  • Add Sponsor domain model. Check on v3 definitions.
  • Add Sanity CMS schema for Sponsor entity
  • Add retrieval of Sponsor instances as part of the fetching of the Event data.
  • Add backend service and controller to work with Sponsor entities.
  • Build right sidebar in Home page to host the sponsor images in full view.
  • Work on the responsiveness of the right sidebar to show the sponsors at the bottom for mobile view.
  • Add FAWHC sponsors as listed in sent documentation.

Add shorthand scripts to serve apps and run tests

Details

package.json file must be bundled with shorthand scripts to serve, build and test the apps and libs included in the workspace.

Tasks

  • Add scripts to serve the apps in local dev environment
  • Add scripts to build the Ionic app and the NestJS backend app
  • Add scripts to test the apps and libs

Add Subject Area-related features

Summary

  • Add frontend component to display Subject Area information.
  • Add the corresponding Sanity schema to load the Subject Areas programatically.

Document the purpose of the domain models

Summary

The models included in the models library must include documentation on what their purpose is, focusing on explaining what the idea behind each of the models is.

Improve the routing solution for Ionic apps

Description

This issue aims at providing a reusable and SSoT solution for the definition of navigable routes and their related pages, avoiding duplication of navigable routes/pages definitions.

Building a SSoT solution would allow the app to programatically define and configure the navigable routes and pages. The work done at [FE-#41] must be improved when addressing the current issue.

Details

  • The list of navigable routes must be single-sourced
  • The list of shown routes in the left-side menu must be read from the navigable routes
  • The mechanism set un app.component.ts to assign the current page title to header must be improved

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.