diff --git a/README.md b/README.md index 36fbe70..9c06b45 100644 --- a/README.md +++ b/README.md @@ -10,34 +10,41 @@ **Post.e** is a fully functional, multi-language, "how to build" social media application. + + +------- + +## Table of Contents + - [Background Story](#background-story) - [Definitions](#definitions) - [Limitations](#limitations) - [Features](#features) -- [Getting Started](#getting-started) - [Programming Languages](#programming-languages) +- [What's Inside?](#whats-inside) +- [Getting Started](#getting-started) - [Project](#project) - [Future Plans](#future-plans) - [Contribution](#contribution) - [License](#license) - [Credit](#credit) - +------- ## Background Story I had two goals when I originally started this project: 1. Demonstrate how to make a "*Twitter-esque*" social media application. - Many people underestimate the amount of time and work involved in making a social media application. - - There's a lot of confusion around what the tech stack is comprised of (client-side code, back-end code, a database, and a web-server of some kind). + - There's a lot of confusion around what the tech stack consists of (client-side code, back-end code, a database, and a web-server of some kind). - I wanted to shine a light on the above processes and the technology involved. 2. Create the application in as many languages as possible and use the project as a learning tool for myself. - I wrote the application with a mix of both `Objective-C` and `Swift` to demonstrate how a `Bridging Header` file allows the two languages to share classes/files between each other. - I'm constantly learning new programming languages and frameworks. I wanted to build a "one stop shop" mobile application as a sandbox for all of these languages. - - I started building the application back-end with ``PHP`` because its easy for others to understand, in the future, I'm going to try to utilize languages like ``Go`` and ``Node.js``. The multithreading capabilities of these languages to significantly speed up server request & response processing makes them an obvious choice to work on next. + - I started building the application back-end with ``PHP`` because it's easy for others to understand. In the future, I'm going to try to utilize languages like ``Go`` and ``Node.js``. The multithreading capabilities of these languages to significantly speed up server request & response processing makes them an obvious choice to work on next. - I've realized now, by open-sourcing it, there's an opportunity for others to learn and contribute to it as well. -*I know this is a lengthy README, but I want to explain every detail of the application for teaching/learning purposes. If this repo gains traction, I will add a lot of these details into github-pages/documentation or seperate markdown file to remove clutter in the README. I appreciate it if you make it to the end!* +*I know this is a lengthy README, but I want to explain every detail of the application for teaching/learning purposes. If this repo gains traction, I will add a lot of these details into github-pages/documentation or separate markdown file to remove clutter in the README. I appreciate it if you make it to the end!* ## Definitions: > A **Post** is any message posted to **Post.e** which contains text and/or attachments that may contain photos, videos, or a wide variety of file types. View the `extension` table in the database to view the supported file types. Tap the Post button to post the message to your profile. @@ -69,6 +76,7 @@ Currently, the `Post.swift` file contains the static values mentioned above. In - **Configure Programming Language Screens:**
- Pick the server side language you want **Post.e** to use. This will route the requests to the toggled language folder. + - See [Programming Languages](#programming-languages) below for more details on this screen. --- @@ -162,6 +170,124 @@ Currently, the `Post.swift` file contains the static values mentioned above. In - Navigate to the `api` folder to access the API collection `.json` file used to import APIs into Postman. - Open the `apis.[language]` file to view the list of available APIs and usage. --- +- **Interchange:** + - **Post.e** uses URL encoded requests (passing the parameters in the URL) via `application/x-www-form-urlencoded`, i.e.: + + ``` + htt://localhost/Post.e/server/languages/php/login.php?command=Session&tokenID=4e1073c9b370ccf8f4ee454c6a841492 + ``` + + For responses, **Post.e** uses JSON encoding via `application/json; charset=utf-8`, i.e.: + + ``` + { + "success": 1, + "tokenID": "50f20dd3e6761245655c8df0cfd73c05", + "token": 1 + } + ``` + +--- +- **Database:** + - **Post.e** uses the MariaDB flavor of MySQL named `post.e` or `post.e_demo`, depending which one you install. Below are the db specs using the schema inspector: + + | Specification | Value | + |--------------------------------|--------------------| + | Default Collation | utf8mb4_unicode_ci | + | Default Characterset | utf8mb4 | + | Table Count | 21 | + | Database Size (rough estimate) | 624.0 KiB | + +--- + +## Programming Languages + +Below is a running list of languages currently supported by **Post.e**: + +| **Language & Progress:** | **Version** | +|---------------------------------------------------------------------------------------------------------------------|-------------| +| ![Swift](https://img.shields.io/badge/Swift-complete-success?style=for-the-badge&logo=swift) | 5.7 | +| ![Obj-C](https://img.shields.io/badge/Obj--C-complete-success?style=for-the-badge&logo=apple) | 4.0 | +| ![PHP](https://img.shields.io/badge/PHP-complete-success?style=for-the-badge&logo=php) | 8.1.6 | +| ![Python](https://img.shields.io/badge/Python-in_progress-important?style=for-the-badge&logo=python) | 3.11.0 | +| ![Node.js](https://img.shields.io/badge/Node.js-in_progress-important?style=for-the-badge&logo=nodejs) | 18.12.1 | +| ![Ruby](https://img.shields.io/badge/Ruby-in_progress-important?style=for-the-badge&logo=ruby) | 2.6.10 | +| ![Go](https://img.shields.io/badge/Go-in_progress-important?style=for-the-badge&logo=go) | 1.19.3 | +| ![Rust](https://img.shields.io/badge/Rust-open-critical?style=for-the-badge&logo=rust) | 1.64.0 | +| ![Perl](https://img.shields.io/badge/Perl-open-critical?style=for-the-badge&logo=perl) | 5.30.3 | +| ![Java](https://img.shields.io/badge/Java-open-critical?style=for-the-badge) | 17.0.5 | +| ![MariaDB](https://img.shields.io/badge/MariaDB-complete-success?style=for-the-badge&logo=mysql) | 10.4.21 | + +## What's Inside? +A quick look at the top-level files and directories in this project. + + . + ├── api + ├── PHP - Post.e API.postman_collection.json + ├── db + ├── mysql + ├── post_e.sql + ├── post_e_demo.sql + ├── post_e-eer.mwb + ├── docs + ├── images + ├── (GitHub README images) + ├── mobile + ├── ios + ├── Playgrounds + ├── Post.e + ├── (iOS directory files) + ├── Post.e_Watch + ├── Post.e_Watch WatchKit Extension + ├── (watchOS directory files) + ├── Post.e-Test + ├── Post.e.xcodeproj + ├── Post.eTests + ├── Sample Files + ├── jpg_Sample.jpg + ├── pdf_Sample.pdf + ├── png_Sample.png + ├── txt_Sample.txt + ├── server + ├── languages + ├── go + ├── java + ├── js + ├── php + ├── (php directory files) + ├── pl + ├── py + ├── rb + ├── rs + ├── resources + ├── logs + ├── current_date.log (i.e. log_21-Jan-2023.log) + ├── config + ├── config.ini + ├── uploads + ├── prof_id (i.e. 1, 2...37, 38) + ├── prof_id.jpg (i.e. 1, 2...37, 38).jpg + ├── posts + ├── post_id (i.e. 45, 46...103, 104) + ├── file name (i.e. jpg_Sample.jpg, pdf_Sample.pdf, etc.) + ├── .gitattributes + ├── .gitignore + ├── LICENSE + ├── README.md + └── VERSION + +1. **`/api`**: This directory contains the Postman API import file which sends requests to the `apis.[language]` file. +2. **`/db/mysql`**: This directory contains the install files for the **Post.e** database, a demo database, and a EER Diagram of the database. +3. **`/docs/images`**: Images used for the GitHub README relative path. +4. **`/mobile/ios`**: The directory where the iOS and watchOS files are stored. +5. **`/server/languages`**: The directory where the server side languages are stored. +6. **`/server/resources`**: The directory where the log files and `config.ini` file used for the database connection are stored. +7. **`/server/uploads`**: The directory profile images and post images/files download to. +8. **`.gitattributes`**: The `.gitattributes` file allows you to specify the files and paths attributes that should be used by git when performing git actions, such as `git commit`, etc. +9. **`.gitignore`**: The `.gitignore` file tells git which files it should not track / not maintain a version history for. +10. **`README.md`**: A text file containing useful reference information about this project (the file you're reading this from now). +11. **`LICENSE`**: The application license file. +12. **`VERSION`**: A file containing the current application version number. ## Getting Started - Download the application from here, Github. @@ -195,24 +321,6 @@ Currently, the `Post.swift` file contains the static values mentioned above. In - Passwords are hashed using `SHA512` and `Salted`. - The demo accounts consist of quotes from famous individuals that have inspired me through their works and words. -## Programming Languages - -Below is a running list of languages currently supported by **Post.e**: - -| **Language & Progress:** | **Version** | -|---------------------------------------------------------------------------------------------------------------------|-------------| -| ![Swift](https://img.shields.io/badge/Swift-complete-success?style=for-the-badge&logo=swift) | 5.7 | -| ![Obj-C](https://img.shields.io/badge/Obj--C-complete-success?style=for-the-badge&logo=apple) | 4.0 | -| ![PHP](https://img.shields.io/badge/PHP-complete-success?style=for-the-badge&logo=php) | 8.1.6 | -| ![Python](https://img.shields.io/badge/Python-in_progress-important?style=for-the-badge&logo=python) | 3.11.0 | -| ![Node.js](https://img.shields.io/badge/Node.js-in_progress-important?style=for-the-badge&logo=nodejs) | 18.12.1 | -| ![Ruby](https://img.shields.io/badge/Ruby-in_progress-important?style=for-the-badge&logo=ruby) | 2.6.10 | -| ![Go](https://img.shields.io/badge/Go-in_progress-important?style=for-the-badge&logo=go) | 1.19.3 | -| ![Rust](https://img.shields.io/badge/Rust-open-critical?style=for-the-badge&logo=rust) | 1.64.0 | -| ![Perl](https://img.shields.io/badge/Perl-open-critical?style=for-the-badge&logo=perl) | 5.30.3 | -| ![Java](https://img.shields.io/badge/Java-open-critical?style=for-the-badge) | 17.0.5 | -| ![MariaDB](https://img.shields.io/badge/MariaDB-complete-success?style=for-the-badge&logo=mysql) | 10.4.21 | - ## Project Please reference the GitHub Project tab inside this Repo to get a good understanding of where I'm currently at with the overall project. Issues and enhancements will also be tracked there as well. @@ -221,11 +329,11 @@ Please reference the GitHub Project tab inside this Repo to get a good understan - Besides making **Post.e** compatible with more back-end languages, devices, and the tasks mentioned in the Backlog (i.e. Editing Posts, Push Notifications, etc.), I'm considering eventually hosting it on a server so it's not constrained to a local environment. This way, the demo will have a sandbox for everyone to interact in. I don't plan on making it an actual social media app - it was created as a learning tool for all, and I'd like to keep it that way. - I designed the app icons and banners myself, however, as you all know - Design is a full time job and hard to balance with programming. A lot of the buttons and interactive icons were taken from free design websites. I'd like to eventually create and plug in custom designs into the application for a better user experience and flow. -- I intend to add more documentation around app navigation as well as an in-depth dive into the underlying technology used within the app. As I mentioned above, I want this to be used as a learning tool and solid documentation is a *must have* as a teaching tool; I will probably utilize github-pages or a seperate markdown file for documentation (stay tuned). +- I intend to add more documentation around app navigation as well as an in-depth dive into the underlying technology used within the app. As I mentioned above, I want this to be used as a learning tool and solid documentation is a *must have* as a teaching tool; I will probably utilize github-pages or a separate markdown file for documentation (stay tuned). ## Contribution -I'm looking forward to working with others on this project over time (of course, when time is permitted) and seeing where it goes. Feel free to Fork the Repo and submit a Pull Request if you've contributed to it in some way. If you're going to Fork the project or Clone it for your own purposes, all I ask is that you follow the attached license as well as giving me credit using the below **Credit** block. I spent a lot of time on this and I'm proud of how it turned out, I'm more than happy to open-source it to help others as long as credit is given and no profit is gained from it in return; this is "the people's" social media app. +I'm looking forward to working with others on this project over time (of course, when time is permitted) and seeing where it goes. Feel free to Fork the Repo and submit a Pull Request if you've contributed to it in some way. If you're going to Fork the project or Clone it for your own purposes, all I ask is that you follow the attached license as well as giving me credit using the below **Credit** block. I spent a lot of time on this and I'm proud of how it turned out. I'm more than happy to open-source it to help others as long as credit is given and no profit is gained from it in return; this is "the people's" social media app. Feel free to reach out to me using my email below if you have any questions or suggestions. diff --git a/mobile/ios/Post.e.xcodeproj/project.pbxproj b/mobile/ios/Post.e.xcodeproj/project.pbxproj index 91e8c4e..de72dac 100644 --- a/mobile/ios/Post.e.xcodeproj/project.pbxproj +++ b/mobile/ios/Post.e.xcodeproj/project.pbxproj @@ -1565,7 +1565,7 @@ INFOPLIST_KEY_UIStatusBarHidden = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1616,7 +1616,7 @@ INFOPLIST_KEY_UIStatusBarHidden = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate b/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate index 207eaf9..4e70e83 100644 Binary files a/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate and b/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard b/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard index 30e93f5..e431281 100644 --- a/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard +++ b/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - + + @@ -18,12 +19,12 @@ - - + + - + @@ -90,25 +91,25 @@ - + - + - + - + - + - + - + @@ -1051,7 +1052,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1368,18 +1333,18 @@ - + - + - + @@ -1402,7 +1367,7 @@ - + @@ -1421,7 +1386,7 @@ - + @@ -1445,11 +1410,11 @@ - + - + @@ -1480,11 +1445,11 @@ - + - + - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. @@ -1567,11 +1532,11 @@ - + - +