Philosophical Research:RatingHub/YT/swcclectures2031: Difference between revisions
Appearance
archive lisp program as-is; cr. 2023-11-06T09:53:06Z |
(No difference)
|
Revision as of 10:12, 17 May 2025
Program
;;;; # channel @swcclectures2031
(asdf:load-system "channel-rating")
(defpackage :reversedragon3.rating.swcc-lectures
(:shadowing-import-from :reversedragon3.rating #:rating)
(:use :common-lisp))
(in-package :reversedragon3.rating.swcc-lectures)
;; before I forget again - these lectures are from Tsinghua University by Associate Professor Feng Wuzhong at the School of Marxism. I always forget his name for unknown reasons
(defun main ()
(let (likes dislikes num-likes num-dislikes)
(setq
likes (append
(list ; regular
'GxbKOjXnE-0
'TYlLBGbqrxI "HI-0m8PB_NE" 'TxiNbKDzTIM 'Wa4BL0LI-0o 'ZpNZx2UvLTM 'DcA52cQR-rM
'HEjODjnfq-o '6Umh4WBdmTk 'jne1iyQv2No 'vGFUAB3-GRY '-mXRNDec06E 'DpIlhFUFqPs
'53IYYrEia9I 'uLoaPivZa6M 'fgsH898PRDw "c_SdOf-DNEI" '90UKrrp5JG4 'lf3VW9wzl1g
'LFDmtTIa6UI 'rkI2NEPNOi0 "zt_ca5xr6q0" "4_x4Mv6Utm4" 'Y3a7TRsCbDM 'bP-Vp8gWDd0
'LfzJnLPwyUw 'HwonrsZ8R7o 'n8Lor36nT8o 'VainzFGFnLA '62mvMWJHt8g 'cPYoq9Nb2bA
;; chapter 4
)
nil)
;;dislikes (append
;; nil
;; nil)
)
(rating likes dislikes)
))
(print (main))
;; :: cr. 2023-11-06T09:53:06Z
;; :: ed. 2024-04-16T21:57:23Z
;; date began 'serious review' by chapter
Lisp library
;;; toolkit for rating-sheets
(defpackage :reversedragon3.rating
(:use :common-lisp)
;; (:local-nicknames )
(:export
;; #:nearest-pow10 #:deduplicate
#:rating #:stylesheet
))
(in-package :reversedragon3.rating)
(defun nearest-pow10 (value) ; round up to nearest power of 10, such as 70 -> 100
(expt 10 (ceiling (expt value (/ 1 10)))))
(defun deduplicate (list)
(let ((known-id (make-hash-table :test 'equal))
result canonical stored)
(dolist (item list)
(setq
canonical
(if (stringp item)
item (symbol-name item))
stored (gethash (string-upcase canonical) known-id))
(cond
((equal canonical stored)
(format t "Item ~a matched known item ~a~%" canonical stored))
(t
(setf
(gethash (string-upcase canonical) known-id) canonical
result (cons canonical result))
))
(setq stored nil canonical nil))
(reverse result)))
(defun rating (likes dislikes &optional neutral)
(setq
likes (deduplicate likes)
dislikes (deduplicate dislikes)
neutral (deduplicate neutral))
(let* (
(num-likes (length likes))
(num-dislikes (length dislikes))
(total (+ num-likes num-dislikes (length neutral)))
(percentage-likes
(truncate (* (nearest-pow10 total) (/ num-likes total))))
(percentage-dislikes
(truncate (* (nearest-pow10 total) (/ num-dislikes total))))
)
(list num-likes num-dislikes percentage-likes percentage-dislikes)))
(defun stylesheet (videos)
(let ((result
(make-string-output-stream)))
(format result ".unlikely-dummy-item~%")
(dolist (item videos)
(format result
", .watch-active-metadata[video-id=\"~A\" i] div, a.ytd-rich-grid-media[href*=\"~A\" i]~%"
item item))
(format result "{ background-color: #9f9ff7; }~%~%.watch-active-metadata div * { background-color: transparent !important; }")
(get-output-stream-string result)))
[Note: it's been a while since this code has been tested, so I do not know if it works.]