PHP-and-MySQL/C4/Simple-Visitor-Counter/Kannada

From Script | Spoken-Tutorial
Jump to: navigation, search
Time Narration
00:00 page counter ನ ಕುರಿತಾದ ಟ್ಯುಟೋರಿಯಲ್ ಗೆ ನಿಮಗೆ ಸ್ವಾಗತ.
00:02 ಇದು ಪ್ರತಿ ರಿಫ್ರೆಶ್ ಗೆ ಎಷ್ಟು ಜನ ಪೇಜ್ ಅನ್ನು ಭೇಟಿಯಾಗಿದ್ದಾರೆ ಎಂದು ಎಣಿಸುತ್ತದೆ.
00:07 ಪ್ರತಿ ಬಾರಿ ಯಾರಾದರೂ ಪೇಜ್ ಅನ್ನು ಭೇಟಿಮಾಡಿದಾಗ, ಒಂದು ವ್ಯಾಲ್ಯು ಹೆಚ್ಚಾಗುತ್ತದೆ. ಅದನ್ನು ಟೆಕ್ಸ್ಟ್ ಫೈಲ್ ನಲ್ಲಿ ಸ್ಟೋರ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಇದನ್ನು ಬಳಕೆದಾರರಿಗೆ ತೋರಿಸಲಾಗುತ್ತದೆ.
00:15 ಅಥವಾ ಅದನ್ನು ನಿಮ್ಮೊಡನೆ ಇಟ್ಟುಕೊಳ್ಳಬಹುದು. ನೀವು ಇದನ್ನು ತೋರಿಸುತ್ತೀರೊ ಇಲ್ಲವೋ ಅದು ನಿಮ್ಮ ಆಯ್ಕೆಯಾಗಿದೆ.
00:19 ದಯವಿಟ್ಟು ಗಮನಿಸಿ, ಇದು ಇದನ್ನು ಮಾಡಲು ಇರುವ ತುಂಬ ಸರಳ ವಿಧಾನವಾಗಿದೆ.
00:21 ಇದು ಅನನ್ಯ ಸಂದರ್ಶಕರನ್ನು (ಯುನಿಕ್ ವಿಸಿಟರ್ಸ್) ಎಣಿಸುವುದಿಲ್ಲ.
00:23 ಅನನ್ಯ ಸಂದರ್ಶಕರ (ಯುನಿಕ್ ವಿಸಿಟರ್ಸ್) ಕುರಿತು ಟ್ಯುಟೋರಿಯಲ್ ಅನ್ನು ಆದಷ್ಟು ಬೇಗ ಮಾಡುವೆನು.
00:27 ನೀವು ಇದನ್ನು ನೋಡುವ ವೇಳೆಗೆ ಬಹುಶಃ ಅದು ಸಿದ್ಧವಾಗಬಹುದು.
00:30 ಹಾಗಾಗಿ ನೀವು ನೋಡಬಹುದು. ಇದು ತುಂಬ ನಿರ್ದಿಷ್ಟವಾಗಿರುವುದು.
00:33 ಅದು IP address ಗಳ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
00:35 ಈಗ ಸದ್ಯಕ್ಕೆ ಇದು ಪ್ರಾಥಮಿಕ ಕೌಂಟರ್ ನ ಟ್ಯುಟೋರಿಯಲ್ ಆಗಿದೆ. ಇದು ಡಾಟಾಬೇಸ್ ಸ್ಟೋರೇಜ್ ಆಗಿರದೆ, ಫೈಲ್ ಸ್ಟೋರೇಜ್ ಅನ್ನು ಬಳಸುತ್ತದೆ.
00:42 ನಾವು ಮಾಡಬೇಕಾದ ಮೊದಲ ಕೆಲಸ, ವ್ಯಾಲ್ಯುವನ್ನು ಅದರೊಳಗೆ ಸ್ಟೋರ್ ಮಾಡಿಕೊಳ್ಳುವಂತಹ ಒಂದು ಫೈಲ್ ಅನ್ನು ರಚಿಸಬೇಕು.
00:48 ಇದನ್ನು ಮಾಡಲು ಎರಡು ವಿಧಾನಗಳಿವೆ.
00:50 ರೈಟ್ ಕ್ಲಿಕ್ ಮಾಡಿ, ಒಂದು ಹೊಸ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ರಚಿಸುವೆನು.
00:53 ಅಥವಾ ನಾನು fopen() ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಿ, ಒಂದು ಫೈಲ್ ಅನ್ನು ರಚಿಸಿ, ಅದು ತೆರೆಯುವುದನ್ನು ತೋರಿಸುವೆನು.
00:59 ಅದನ್ನು $file ವೇರಿಯೇಬಲ್ ನಲ್ಲಿ ಸ್ಟೋರ್ ಮಾಡುವೆನು. ಆದರೆ ಇದು ಕಡ್ಡಾಯವಲ್ಲ.
01:05 ಈಗ ನಾನು "count.php" ಯಲ್ಲಿ, ಇದಕ್ಕೆ ಇನ್ನೊಂದು ಪ್ಯಾರಾಮೀಟರ್ ಆಯ್ಕೆಮಾಡುತ್ತೇನೆ. ಈ ಪ್ಯಾರಾಮೀಟರ್, ಇದನ್ನು ಬರೆಯಲು ( ರೈಟಿಂಗ್) ಅಥವಾ ಓದಲು (ರೀಡಿಂಗ್) ಅಥವಾ ಅಪೆಂಡ್ ಮಾಡಲು ಆಗಿದೆ.
01:22 ಉದಾಹರಣೆಗೆ, ನಾನು writing ಅನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತೇನೆ.
01:26 ಈಗ fwrite() ಎಂದು ಟೈಪ್ ಮಾಡಿ ನಂತರ $file ಎಂದು ಬರೆದು, ನಾನು zero ವ್ಯಾಲ್ಯುವನ್ನು ರಚಿಸುವೆನು.
01:36 ಈಗ ನಾವು ಪೇಜ್ ಅನ್ನು ತೆರೆದು, refresh ಮಾಡೋಣ.
01:41 ನಾವು "counter.php" ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಅದರ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ, ನೀವು ಹಿಂದಿರುಗಿದಾಗ, count.php ಇದೆಯೇ ಎಂದು ನೋಡಿ.
01:49 ".txt" ಎಂದಿರಬೇಕು.
01:51 ಇದನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡೋಣ.
01:54 ಈಗ ನಾವು ".txt" ಫೈಲ್ ಅನ್ನು ಹೊಂದಿರಬೇಕು.
02:00 ಈ "count.php" ಅನ್ನು ತೆಗೆದುಹಾಕುವೆನು.
02:05 ನಾವು ಈಗ ಇದನ್ನು ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ನಮಗೆ ಈ ಕೋಡ್ ಬೇಡ.
02:08 ನಾನು ಈ ಭಾಗವನ್ನು ಡಿಲೀಟ್ ಮಾಡುವೆನು. ಆದರೆ ನಾನು ಇದನ್ನು ಹಾಗೇ ಇಟ್ಟುಕೊಳ್ಳುವೆನು ಮತ್ತು ನಾನು ಈ ಫೈಲ್ ನಿಂದ ರೀಡ್ ಮಾಡಲು ಬಯಸುವೆನು.
02:14 ನೀವು ಇದನ್ನು ಟೈಪ್ ಮಾಡಬಹುದು. ಆದರೆ ನೀವು ರೀಡಿಂಗ್ ನ ಬದಲು ರೈಟಿಂಗ್ ಗಾಗಿ ಒಂದು ಫೈಲ್ ಅನ್ನು ರಚಿಸಬೇಕು.
02:22 ಇಲ್ಲಿ ನಮ್ಮ ಫೈಲ್ ಇದೆ. ಇಲ್ಲಿ ಸೊನ್ನೆ ಇದೆ.
02:26 ಈಗ ಅದನ್ನು ತೆರೆದು ನೋಡೋಣ.
02:28 ಸರಿ.. ನಾವು ಸೊನ್ನೆಯೊಂದಿಗೆ "count.txt" ಅನ್ನು ಪಡೆದಿದ್ದೇವೆ. ಅದು ಇದನ್ನು ರೀಡ್ ಮಾಡಿ ಅದರೊಳಗೆ ಇಡುತ್ತದೆ.
02:34 ಹಾಗಾಗಿ ನಾನು ಆ ಫೈಲ್ ನ ಕಂಟೆಂಟ್ ಅನ್ನು ಪಡೆಯಬೇಕು.
02:37 ಹಾಗಾಗಿ fopen() ನ ಬದಲು ನನಗೆ 'file_get_contents()' ಬೇಕು.
02:42 ಹಾಗಾಗಿ 'file_get_contents' ಎಂದು ಟೈಪ್ ಮಾಡುವೆನು.
02:44 ಅದು 'count.txt' ನ ಕಂಟೆಂಟ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ.
02:48 ನಂತರ echo ಮಾಡುವೆವು. ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಳಸಿ, echo $file ಎಂದು ಟೈಪ್ ಮಾಡುವೆನು.
02:52 ಇದು file_get_contents ಎಂದು ಹೇಳುತ್ತದೆ ಮತ್ತು ನಮ್ಮ count ವೇರಿಯೇಬಲ್ ಇರುವ ಟೆಕ್ಸ್ಟ್ ಫೈಲ್ ನ ಕಂಟೆಂಟ್ ಗಳನ್ನು ಪಡೆಯುತ್ತದೆ.
03:02 ಇದು $file ನ ಕಂಟೆಂಟ್ ಅನ್ನು echo ಮಾಡುತ್ತದೆ.
03:05 ಈಗ ನಮ್ಮ ಪೇಜ್ ಗೆ ಹಿಂದಿರುಗಿ ರಿಫ್ರೆಶ್ ಮಾಡೋಣ.
03:07 "counter" ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. ಈಗ ಇಲ್ಲಿ ಸೊನ್ನೆಯನ್ನು ಪಡೆಯುವೆವು.
03:10 ರಿಫ್ರೆಶ್ ಮಾಡಿದಾಗ ಇದು ಇಲ್ಲಿ ಸೊನ್ನೆಯನ್ನೇ ತೋರಿಸುತ್ತಿದೆ.
03:14 ನಾನು ಇದನ್ನು 'hello' ಎಂದು ಬದಲಿಸಿ, ನಮ್ಮ ಪೇಜ್ ಗೆ ಹಿಂದಿರುಗಿ, ರಿಫ್ರೆಶ್ ಮಾಡಿದರೆ, ಇದು 'hello' ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ.
03:20 ಸಧ್ಯಕ್ಕೆ ಈ ಟೆಕ್ಸ್ಟ್ ಫೈಲ್ ನಲ್ಲಿ ಏನಿದೆಯೋ ಅದನ್ನೇ ಎಕೋ ಮಾಡುತ್ತದೆ.
03:25 ಇದು ಸೊನ್ನೆಯಾಗಿರುತ್ತದೆ, ಅದು ಪೂರ್ಣಾಂಕ ಸೊನ್ನೆ ಆಗಿದೆ.
03:30 ಈಗ ಇದನ್ನು echo ಮಾಡುವೆವು. ಅದರಲ್ಲಿ "You've had $file visitors" ಎಂದು ಎಕೋ ಮಾಡುವೆವು.
03:37 ಹಾಗಾಗಿ ಇದು ಇಂತಹುದನ್ನೆ ಕೊಡುತ್ತದೆ.
03:40 ಈಗ, $visitors ಎಂಬ ಹೊಸ ವೇರಿಯೇಬಲ್ ಅನ್ನು ರಚಿಸುವೆನು.
03:46 ಮತ್ತು, ಇದನ್ನು $file ವೇರಿಯೇಬಲ್ ಗೆ ಸಮವಾಗಿದೆ ಎಂದು ಹೇಳುವೆನು.
03:50 ಓದಲು ಸರಳವಾಗುವಂತೆ ಇದನ್ನು ಇಲ್ಲಿ ಇಡುತ್ತೇನೆ. ಇಲ್ಲಿ ಇದು ಹೆಚ್ಚು ಸೂಕ್ತವಾಗಿದೆ.
03:55 ನಾನು ಇಲ್ಲಿ ಇದನ್ನು '$visitors' ಎನ್ನುತ್ತೇನೆ. ಮತ್ತು ಇದು ಏನಾಗುವುದೆಂದು ನಾವು ಹೇಳಬಹುದು.
04:00 ನಾವು $visitors ಎಂದು ಹೇಳುವೆವು, ಅಲ್ಲ
04:05 Visitors_new = $visitors ಪ್ಲಸ್1 ಆಗಿರಲಿ.
04:14 ಹಾಗಾಗಿ ಇದು ನಮ್ಮ ಹೊಸ ವ್ಯಾಲ್ಯು ಆಗಿರಲಿ.
04:17 ನಂತರ ಇಲ್ಲಿ, $filenew ಎಂಬ ಒಂದು ಹೊಸ ಫೈಲ್ ಅನ್ನು ರಚಿಸುವೆನು.
04:22 ಅದನ್ನು "count.txt" ಎಂದು ತೆರೆಯುವೆನು. ಏಕೆಂದರೆ ಇದು ಅದೇ ಆಗಿದೆ.
04:27 ನಾನು ಈ ಫೈಲ್ ನಲ್ಲಿ "ರೈಟ್" ಮಾಡಲು ಹೇಳುವೆನು.
04:30 ಇದು 'a+' ಆಗಿದ್ದರೆ, ಅದು 'append' ಆಗಿರುವುದು. ಫೈಲ್ ಗೆ ಏನನ್ನಾದರು ಅಪೆಂಡ್ ಮಾಡುತ್ತಿದ್ದೇನೆಂದರೆ, ನಾನು ಅದಕ್ಕೆ ಸೇರಿಸುತ್ತಿದ್ದೇನೆ ಎಂದರ್ಥ.
04:38 ಆದರೆ ನಾನು ಹಳೆಯದನ್ನು ತೆಗೆದು ಬರೆಯಬೇಕು. ಹಾಗಾಗಿ ನಾನು ಇದನ್ನು 'w' ಎಂದೇ ಇಡುವೆನು.
04:42 ನಾನು ಮೊದಲ ಭಾಗದಲ್ಲಿ ಮಾಡಿದಂತೆ 'fwrite('$filenew')' ಎಂದು ಬರೆಯುವೆನು.
04:47 ಅದರೊಳಗೆ ನಾನು ಬರೆಯಬೇಕಾದ ವ್ಯಾಲ್ಯೂ '$visitorsnew' ಆಗಿದೆ.
04:50 ಇದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದನ್ನು ರನ್ ಮಾಡುವ ಮೊದಲು ನಾವು ಅದನ್ನು ನೋಡೋಣ.
04:55 ನಾವು ನಮ್ಮ ಮುಖ್ಯ ಫೈಲ್ ಅನ್ನು ಪಡೆದಿದ್ದೇವೆ. ಅದು ನಮ್ಮ "count.txt" ಫೈಲ್ ನ ಕಂಟೆಂಟ್ ಆದ ಸೊನ್ನೆಯನ್ನು ಹೊಂದಿದೆ.
05:04 ನಾವು ನಮ್ಮ ವೇರಿಯೇಬಲ್ '$visitors' ಅನ್ನು '$file' ನ ಕಂಟೆಂಟ್ ಗೆ ಸೆಟ್ ಮಾಡಿರುವೆವು.
05:07 ನಾವು ಬಳಕೆದಾರರಿಗೆ ಎಷ್ಟು ಜನ ಸಂದರ್ಶಕರು (ವಿಸಿಟರ್) ಇದ್ದಾರೆ ಎಂದು ಎಕೋ ಮಾಡುತ್ತಿದ್ದೇವೆ.
05:11 ನಾವು ಒಂದು ಹೊಸವೇರಿಯೇಬಲ್ ಅನ್ನು ರಚಿಸುತ್ತಿದ್ದೇವೆ. ಅದು 'visitors + 1' ಗೆ ಅಂದರೆ ಈ ಸಮಯದಲ್ಲಿ ಈ ಪೇಜ್ ಅನ್ನು ನೋಡುತ್ತಿರುವ ವ್ಯಕ್ತಿಯನ್ನೂ ಸೇರಿಸಿ ಇದು ತೋರಿಸುತ್ತದೆ.
05:20 ಇದು ಮಹತ್ವವನ್ನು ಪಡೆಯುತ್ತದೆ. ಹಾಗಾಗಿ ಒಂದನ್ನು ಸೇರಿಸುತ್ತಿದ್ದೇವೆ.
05:24 ಈ ಟ್ಯುಟೋರಿಯಲ್ ನ ಆರಂಭದಲ್ಲಿ ನಾವು ನೋಡಿದಂತೆ ಒಂದು ಹೊಸ ಫೈಲ್ ಅನ್ನು ತೆರೆಯುತ್ತಿದ್ದೇವೆ. ಆದರೆ ಇಲ್ಲಿ ರೈಟ್ ಎಂದು ತೋರಿಸಲು 'w' ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೇವೆ.
05:32 ಈ ಹೊಸ ಫೈಲ್ ಗೆ ಹೊಸವ್ಯಾಲ್ಯುವನ್ನು ಅಂದರೆ 1 ಹೆಚ್ಚುವರಿಯಾಗಿರುವ ವ್ಯಾಲ್ಯುವನ್ನು ಬರೆಯುತ್ತಿದ್ದೇವೆ.
05:37 ಈಗ ಇದನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡೋಣ. ಓಹ್!
05:41 ಇದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ, ಈ ಕೋಡ್ ಅನ್ನು ಪರೀಕ್ಷಿಸೋಣ.
05:44 " visitors" ನ ಸ್ಪೆಲ್ಲಿಂಗ್ ಅನ್ನು ಪರೀಕ್ಷಿಸೋಣ - Visit-ors new. ಸರಿಯಾಗಿದೆ.. Visit-ors ಇಲ್ಲೂ ಸರಿಯಾಗಿದೆ.
06:01 ನಾನು ಇಲ್ಲಿ ತಪ್ಪು ಮಾಡಿದ್ದೇನೆ. ಇಲ್ಲಿ 'n' ಅನ್ನು ಹಾಕುವೆನು.
06:06 ಹಾಗಾಗಿ "count.txt" ಆಗಿದೆ. ಈಗ ಪ್ರತಿ ಬಾರಿ ನಾವು ರಿಫ್ರೆಶ್ ಮಾಡಿದಾಗಲೂ, ನಾವು 1 ಅನ್ನು ಸೇರಿಸುತ್ತಿರುತ್ತೇವೆ.
06:12 ಈಗ ಇದರ ವ್ಯಾಲ್ಯುವು ಹೆಚ್ಚಾಗುತ್ತಿರುವುದನ್ನು ನೀವು ನೋಡಬಹುದು.
06:16 ನೀವು ಇದನ್ನು ರಿಸೆಟ್ ಮಾಡಲು ಏನು ಮಾಡಬೇಕೆಂದರೆ,
06:19 ಆಹ್!. " 'count.txt' has been changed because we have edited it " ಎಂಬ ವಾರ್ನಿಂಗ್ ಬರುತ್ತಿದೆ.
06:24 ನಾನು 'reload from disk' ಎಂದು ಹೇಳುವೆನು.
06:27 ಇದು 19 ಎಂದು ಬದಲಾಗಿದೆ. ಆದರೆ ಇಲ್ಲಿ 18 ಎಂದು ತೋರಿಸುತ್ತಿರುವುದನ್ನು ನೀವು ನೋಡಬಹುದು.
06:30 ಏಕೆಂದರೆ, ನಾವು ಹೊಸ ವ್ಯಾಲ್ಯುವನ್ನು ಇಡುವ ಮೊದಲೇ ಇದನ್ನು ಎಕೋ ಮಾಡುತ್ತಿದ್ದೇವೆ.
06:35 ಸರಿಯಾದ ವ್ಯಾಲ್ಯುವನ್ನು ಪಡೆಯಲು, ನಾನು ಈ ಕೋಡ್ ಅನ್ನು ಇಲ್ಲಿ ಕೆಳಗೆ ಹಾಕುವೆನು.
06:41 ನಿಜವಾಗಿ ಇದು, ನಾನು ಇಲ್ಲಿ ರಿಫ್ರೆಶ್ ಮಾಡಿದಂತೆ ಇಲ್ಲಿ ನಾವು 25 ವಿಸಿಟರ್ ಗಳನ್ನು ಪಡೆದಿದ್ದೇವೆ. ಇಲ್ಲಿ ಹಿಂದಿರುಗಿದರೆ, ನಾವು 26 ಎಂಬ ವ್ಯಾಲ್ಯುವನ್ನು ಪಡೆದಿದ್ದೇವೆ.
06:51 ಸರಿ.. ಇಲ್ಲಿ ಸ್ವಲ್ಪ ಗೊಂದಲವಾಗಿರಬೇಕು.
06:55 ಇದು ಇದನ್ನು ಮಾಡಲು ಉತ್ತಮ ವಿಧಾನವಲ್ಲ.
06:57 ಇದು ಯಾವಾಗಲೂ '$visitors' ಅನ್ನು ಎಕೋ ಮಾಡುತ್ತದೆ.
06:59 ಸ್ವಲ್ಪ ಬದಲಾವಣೆಗೆ, ಇದನ್ನು '$visitorsnew' ಎಂದು ಮಾಡೋಣ.
07:07 ಹಾಗಾಗಿ ಇದು ಖಂಡಿತವಾಗಿ, ಓಹ್ ಇಲ್ಲ..
07:11 'visitors new' – ಇಲ್ಲಿ ಸ್ಪೆಲ್ಲಿಂಗ್ ತಪ್ಪಾಗಿದೆ.
07:16 ಸರಿ.. ಈಗ 35 ಎಂದು ಹೆಚ್ಚಿಸೋಣ ಮತ್ತು ಈಗ ಕಂಟೆಂಟ್ ಗೆ ಹೋದರೆ ಅಲ್ಲಿಯೂ ವ್ಯಾಲ್ಯು 35 ಆಗಿದೆ.
07:24 ಇಂತಹ ಸರಳವಾದ ಕೋಡ್ ಅನ್ನು ಬಳಸುವಾಗ, ಸ್ಥಾನವೇ ಎಲ್ಲವೂ ಆಗಿಲ್ಲ. ಆದರೆ ಇದು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
07:30 ಸರಿ. ಇದು ಪ್ರಾಥಮಿಕ ಟ್ಯುಟೋರಿಯಲ್ ಆಗಿದೆ.
07:32 ನಿಮಗೆ ಸಹಾಯ ಬೇಕಿದ್ದರೆ ನನ್ನನ್ನು ಸಂಪರ್ಕಿಸಿ.
07:35 ಈಗ ಸದ್ಯಕ್ಕೆ ಇದನ್ನು ಪರೀಕ್ಷಿಸಿ.
07:37 ಐಪಿ ಅಡ್ರೆಸ್ ಅನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವ 'advanced counter' ನ ಕುರಿತಾದ ಟ್ಯುಟೋರಿಯಲ್ ಗಳನ್ನು ನೋಡಿ.
07:43 ಧನ್ಯವಾದಗಳು. ಈ ಸ್ಕ್ರಿಪ್ಟ್ ನ ಅನುವಾದಕಿ, ಮೈಸೂರಿನಿಂದ ಅಂಜನಾ ಅನಂತ್ ನಾಗ್ ಮತ್ತು ಧ್ವನಿ ಡಾ. ನವೀನ್ ಭಟ್, ಉಪ್ಪಿನಪಟ್ಟಣ.

Contributors and Content Editors

Sandhya.np14