From e93d929c1b1305cca6bdcb7fed00db120bdd2972 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Thu, 19 Oct 2023 22:29:58 +0200 Subject: [PATCH] readme --- README.md | 26 +++++++++++++++++++++++++- db.png | Bin 0 -> 25613 bytes 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 db.png diff --git a/README.md b/README.md index db46380..d1fd9f0 100644 --- a/README.md +++ b/README.md @@ -1 +1,25 @@ -Tady bude moje semestralka \ No newline at end of file +Tady bude moje semestralka! + +# Y + +Due to X's popularity rapidly falling after the rebranding, the upper management had decided that only complete rewrite could help, and to be budget-efficient had decided to outsource it to junior student developers in the Czech Republic... + +## Functionality + +As it was evident with Twitter's 280 character limit, "less is more" is in our DNA, and if we extend it to the features that need to be in the next generation of social networking it is obvious - the less features the better! + +As such, our new platform will support only these operations: + +* Posting tweets +* Following other users and seeing all posts of who you're following in a chronological order +* Seeing who other users follow/are followed by +* DMing other users + +Also, to prevent misuse of our platform, it is required to implement some admin tools, but, thankfully, our corporate overlord has suggested that for now a simple one that bans all users who have "Elon is bad" in posts they posted or messages they've sent is enough. + +Our users are also usually of a very curious kind, so there will be implemented a client-side feature that allows to calculate and show statistics about their posts and messages: when they post/message the most in a nice histogram, which words they use the most and so on... + +## Boring implementation details + +Approx. data model (subject to change): +![DB](db.png) \ No newline at end of file diff --git a/db.png b/db.png new file mode 100644 index 0000000000000000000000000000000000000000..ec179d3230aa9bb60026c9143ea10618ee4383de GIT binary patch literal 25613 zcmagFb9^1$-!&YgNnFD=qT*)7MWRARwQ`M1RPGfPn4*t27K0u&4gc2?hiN_Qgz4P*zM(kU-Yn z#@Ni#2n0km;4H;VQ9%TI;9$M%7YL!=XQb|SRA)ofCH{uNT+7gCzTg@N6h6gZMI>2d z$RCOrLZ!iAMDd^ef6MZhZ2J>ILY4%>(S%~u_pL*Dd3Yu{EPMOhq%*mA-(;~*aJihn zUGkcM$Zqvrx`xoh`sN$*t4AkMaZ_{oN2Y;7@PU5fgI(;adgQ_+n?VfTo_Oaq*y8a` zeEvfw(fsc6PA8a(J759|f)&=3+$Vt=+$7Pfo&vUxA`_}g>%2qm{ioL~7Yx+*N@DbB zv?OcZ)3{c~Lco9Z$0-6x=9iZc*iq7bPksAYl-jsOOOW5Nxp&x$VnY&K)Z1mfw}%Z}0Oo7S%meUElLu@;??_7iTc({olHX5W(M48s2HJ zvK1JR6lTSR#^m#hc?9^ih}uB*Anr@pKzCRT3CO1>;6w2Io22{;46P|z%f8c+^YghN zXL#eRk*64$OE%KiA{nVZCuUh_H$5D%KIeLc(5cTOfSmUKuze51X#etI+>Dc39j zgrFYLH%zB?dWMn5;;@4gTD1-W?lRX$;?p1q<0ObWAL17fR9ysWKN?$*@y^e#pgKq} z{`?TZP}H5EL%xWN{0M{Kkl7H5zLc_X(*DMi2rc~hhtPt$5R$%F^w8^|5Z!`|(Tw>B zSOV~ap!R{UIeg!~ZVOOMDvQD-@C9Y7|HeA@b^o?tua6&cJheD(fuH>k_PlPnso(JNNJ^0Mc}6XOx_(LI3hk{Jez#?@6xYhVEJMqNkE20+>53wt;<25 z#1NOv`UQgOr;%<(b^Bt3Dq#bXM$}oqcHg)zrrnoxym91%ke$sMJIE%5CcISwYmA`H zf-4SJ8_(}N;8|h3!MtJk{S({Bu(7||e|7vw{}I_s8)AS0j-r6lfqV%e<&Q}iSQQ}q zgH5*8D|z zfnvsDjADl3hiM2i@FU$L#UrjGjw9^p+Ua0;seX|_D&qL!Sgh!j7=FC2%c#)4-9GQy%jj2$_+2)cLX=#k0;b}wV!9$5fL*W8Mn^U8L?HYKlEgc+>c`rC}#o7P@B04C<`vcIv6>UYuk(lsW7;&^g{X z@Ey%sB-b?8l-JC-Y1(Alz}lqS)VxC5i@X!xvEE?8Q~9I$+xdgKWCHC2*8`UVX#!`2 zTZChTNrk0W@%vY zOe0G>XfSRFX}D{MN|H;2q+MyV?2I%#uxXq*FTvHfG0HODu;e|_-660wwM%xGwbi^( z-C;Y=KR~;1Ts^w757^5Yd7#60F60#9T;Px?%Pxb_mTT8v6j~>pE$BAtRa#*lzso;i zVijzRu#T{HIOjNrJ^y@Oiw7U|J&HvpzNqLxdIDRUq!Ou8ypq8t^x^9T<%Jl&6@Gi~Jdr5vf!sZwwie9bq*h@;dpW-q

XF?4z1xhz6jS`uo1ysc(9R$C^W2Iku$og--@ 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 fK^B-H>;lub)WTcD