{"id":21169460,"url":"https://github.com/smarr/writingstats","last_synced_at":"2025-07-23T06:33:25.762Z","repository":{"id":3958224,"uuid":"5051698","full_name":"smarr/WritingStats","owner":"smarr","description":"Track and Visualize Your Writing Progress","archived":false,"fork":false,"pushed_at":"2013-09-02T13:58:48.000Z","size":160,"stargazers_count":36,"open_issues_count":4,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-14T17:25:00.340Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"XSLT","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smarr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-07-14T22:40:27.000Z","updated_at":"2024-07-09T19:29:52.000Z","dependencies_parsed_at":"2022-08-06T14:30:15.008Z","dependency_job_id":null,"html_url":"https://github.com/smarr/WritingStats","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/smarr/WritingStats","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smarr%2FWritingStats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smarr%2FWritingStats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smarr%2FWritingStats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smarr%2FWritingStats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smarr","download_url":"https://codeload.github.com/smarr/WritingStats/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smarr%2FWritingStats/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266631467,"owners_count":23959419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T15:30:19.132Z","updated_at":"2025-07-23T06:33:25.739Z","avatar_url":"https://github.com/smarr.png","language":"XSLT","funding_links":[],"categories":[],"sub_categories":[],"readme":"WritingStats: Tracking and Visualizing Writing Progress\n=======================================================\n\nWritingStats is a collection of scripts to automatically create statistics\nfrom LaTeX documents and visualize them with an overall progress plots and a\nplot of the daily speed of change.\n\nCurrently, this project provides a setup for a standard LaTeX environment in\ncombination with git version tracking.\n\nFeatures\n--------\n\n - determine page and word count, generate statistics based on them\n - generate RSS feed with the latest data\n - generate graphs to visualize progress\n\nExample\n-------\n\n    Goal\n    ----\n\n    Words: 52500\n    Pages: 150\n    Words/Page: ca. 350\n    Draft Deadline: 1 September 2012\n\n    Current Status\n    --------------\n\n    Words: 29367\n    Pages: 119\n    Words to be written: 23133\n    Pages to be written: ca. 49\n    Progress: 55.94% finished\n    Remaining Days: 49.21\n    Remaining Workdays: 35.15\n    Remaining Words/Workday: 658\n    Pages/Day: 1.88\n    Current Date: Friday, 13. July 2012 18:50:43\n\n ![Progress and Speed Plots](https://github.com/smarr/WritingStats/raw/master/example-book.jpg \"Progress and Speed Plots\")\n\nSetup\n-----\n\nWritingStats depends on the following software:\n\n - PHP, command-line interpreter (any recent version should do)\n \n - LaTeX-Mk, for the Makefile used in the git post-receive hook  \n   http://latex-mk.sourceforge.net/\n   \n - TeXcount, for the word count, tested with version 3.0  \n   http://app.uio.no/ifi/texcount/\n\n - Google Chart Tools (no installation required, uses online copy)  \n   https://developers.google.com/chart/\n\nTo use WritingStats, clone this repository as template for your new LaTeX \nproject.\n\n    git clone https://github.com/smarr/WritingStats.git\n\nAlternatively, check out the repository and copy the following files to your\nexisting LaTeX project:\n\n    cp    Makefile     $YOURFOLDER/\n    cp    status.conf  $YOURFOLDER/\n    cp -R status       $YOURFOLDER/\n\n### Customize Settings\n\nAs you have seen in the example above, WritingStats uses a defined goal to\nestimate your progress. The goal and other settings are defined in\n`status.conf`. You will have to set the file name for your main tex file, and\nthe name of the log-file LaTeX produces. The log file has typically the same\nname but uses the .log-extension.\n\nTo achieve accurate results, you will need to estimate the number of words per\npage, and how many additional pages the final PDF will contain. Often, you\nwill want to ignore for instance the table of content, lists of figures and\ntables, appendices, etc. Since, we currently do not have a way to detect them\nautomatically, they will need to be configured instead.\n\nThe settings for start date and deadline are necessary to calculate the length\nof the project, the number of days left, and to size the charts properly.\n\nNote that the RSS feed needs to be modified separately (cf. below).\n\n### Server Repository\n\nAfter customizing `status.conf`, we suggest to set up a shared repository on a\nserver to automatically generate the statistics on every push to the server.\nNote, this will require that the server is able to generate the PDF file using\nmake and LateX-Mk. Furthermore, it will require a installation or local copy\nof TeXcount.\n\nTo make sure that the post-receive script only executes the code on the\ndesired server, we do check the hostname of the machine. Please adapt it for\nyour deployment!\n\nTo set up a shared git repository with a post-receive hook, execute the\nfollowing steps:\n\n 1. Create bare repository on remote server:  \n    `git init --bare`\n \n 2. Push to the newly create remote repository.\n \n 3. Checkout a working copy on the remote server:  \n    `mkdir checkout`  \n    `GIT_WORK_TREE=checkout git reset --hard`\n \n 4. Create a symlink to the post-receive hook:  \n    ``ln -s `pwd`/checkout/status/post-receive hooks/post-receive``\n\n#### Branches\n\nIn case you want to use a specific branch, or there is not the normal\nmaster branch, do the following right after creating the `checkout` directory:\n\n    `GIT_WORK_TREE=checkout git checkout \u003cbranch-name\u003e`\n\n### Graphs and RSS Feed\n\nBoth, the graphs and RSS feed are now automatically generated by the\npost-receive hook. Another side product is the latest PDF. To make them\navailable on the web, I used symlinks reference `checkout/status/status.html`\nwith statistics and graphs, `checkout/status/status.rss.php` with the\nstatistics feed, and `checkout/example-book.pdf` as the latest PDF available\nfrom a public web folder.\n\nThe RSS feed is published using the `checkout/status/status.rss.php` file.\nHowever, it needs to be adapted to reflect your own project properly. The RSS\nfeed has a title, description, language, and so on. Furthermore, it contains\nthe URLs it corresponds to. These settings are not imported from the\n`status.conf` file. Instead, they are directly hard code in `status.rss.php`.\nNote that the script accesses the `status/status.items` file, which is\nautomatically generated as part of the post-receive hook.\n\nHistory\n-------\n\nThe foundation of this project was already laid out when I wrote my master\nthesis. To track my own progress, I wrote the initial version of these\nscripts. However, back then, I was happily using Word and it's XML-based docx\nfile format. To be able to count words automatically, I used the\n`status/docx2html.xsl` XSLT transformation, which also generated reasonably\ngood HTML from the Word files. The scripts are currently not adapted to use\nit, and thus, Word is not supported anymore. However, pull requests to\nreintegrate it are of course welcome.\n\nLicense\n-------\n\nCopyright (c) 2012 Stefan Marr \u003cmail@stefan-marr.de\u003e\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmarr%2Fwritingstats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmarr%2Fwritingstats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmarr%2Fwritingstats/lists"}