GithubHelp home page GithubHelp logo

hsk81 / notex-v2.0 Goto Github PK

View Code? Open in Web Editor NEW
153.0 8.0 21.0 4.33 MB

A text editor for reStructuredText, Markdown, LaTex and more!

Prolog 0.01% Nginx 0.06% Shell 0.22% Python 18.94% SQLPL 0.26% JavaScript 26.53% CSS 47.53% Ruby 0.15% HTML 6.30%

notex-v2.0's Introduction

NoTex.ch: An Online Text Editor

Join the chat at https://gitter.im/hsk81/notex-v2.0

An online text editor for reStructuredText, Markdown, LaTex and more! It has integrated project management, syntax highlighting, split view and spell checking for 85+ dictionaries. Projects can be exported and imported as ZIP archives plus reStructuredText projects can be converted to PDF, HTML or LaTex. Give it a try: Visit https://notex.ch, open a sample project and press the Export as .. PDF button.

Commercial Support

Do you need help in setting up NoTex for your organization or institution? Does the described setup not correspond to your requirements? Would you like to have the application customized? Don't hesitate, and write to [email protected]: We'll provide you with an SLA (service level agreement) tailored to your needs!

Installation

  • git clone https://github.com/hsk81/notex notex.git && cd notex.git

Clone the GIT repository to the local disk and change the current working directory to the top level of the repository.

  • docker build --rm -t hsk81/notex:run .

Build a docker container image and tag it as hsk81/notex:run: If your machine or internet connection is slow then just go have lunch, or do something time consuming, since the build process will take a while. A docker version 0.11.1 or newer is recommended.

Execution: Development

  • docker run -t -p 5050:5000 hsk81/notex:run ./webed.py help

Show all available commands; execute e.g. ./webed.py run -h to see detailed options for the specified command. Don't get confused about ./webed.py, which is the internal name of NoTex.

  • docker run -t -p 5050:5000 hsk81/notex:run $(cat RUN.dev)

Run the docker container and map the internal port 5000 to the external port 5050. The $(cat RUN.dev) sub-process delivers the actual command to start the application; see the RUN.dev file for details.

  • http://localhost:5050

Navigate your browser to the above location, and enjoy! The application runs in debug mode, so don't use this approach in a production environment; see the next section for that.

INFO: Actual conversion (to PDF, HTML etc.) will not work yet, since the corresponding workers have not been started!

Execution: Production

You need to run three components to get a functional application: a frontend ntx which is connected via a queue qqq to a backend conversion worker spx-1. But before starting any of the components you first need the setup a location, which can be used to exchange data:

  • mkdir -p /var/www/webed && chown www-data:www-data /var/www/webed -R

Create /var/www/webed for sharing purposes (on the host machine), and give ownership to the www-data user and group; some GNU/Linux distributions may use http instead of www-data as the owner.

Frontend: ntx

export QUEUE=tcp://172.17.42.1 && docker run -name ntx -t -p 8080:80 -p 9418:9418 -v /var/www/webed:/var/www/webed:rw hsk81/notex:run PING_ADDRESS=$QUEUE:7070 DATA_ADDRESS=$QUEUE:9090 $(cat RUN.pro)

Export first the QUEUE environment variable which needs to contain the TCP/IP address of a queue (to be started in the next step); if you run all three components on the same host then you can use the address of docker's bridge , e.g. lxcbr0 (or similar: run ifconfig to get a listing of enabled interfaces).

Then run the frontend container named ntx and map the internal port 80 to the external port 8080; the PING_ADRESS and DATA_ADDRESS variables are set within the containers environment and tell the frontend where the ping and data channels need to connect to; finally the $(cat RUN.pro) sub-process delivers the actual command to start the application and is executed as a container process; see the RUN.pro file for details.

The command also maps the 9418 port, which belongs to a git-daemon: This allows you to clone a particular repository from your host (if you know its randomly generated name), like git clone git://...

Queue: qqq

docker run -name qqq -t -p 7070:7070 -p 9090:9090 -p 7171:7171 -p 9191:9191 hsk81/notex:run ./webed-sphinx.py queue -pfa 'tcp://*:7070' -dfa 'tcp://*:9090' -pba 'tcp://*:7171' -dba 'tcp://*:9191'

Start the queue container named qqq, map the required ports to the host machine, and ensure that the TCP/IP binding addresses for the ping and data channels are declared correctly; actually you could omit the -pfa, -dfa, -pba and -dba arguments, since in this case the default values are used anyway.

As mentioned the queue offers four binding points: two for frontend container(s) to connect to (-pfa or --ping-frontend-address, and -dfa or --data-frontend-address), plus another two for backend worker(s) to connect to (-pba or --ping-backend-address, and -dba or --data-backend-address).

The application uses the ping and data channels for different purposes: Given a conversion job, the frontend asks the queue via a "ping" through the former channel if a worker is available, and if so it sends the corresponding data through the latter channel. The queue figures in a similar way which backend converter is idle and chooses it for the job.

Backend: spx-1

export QUEUE=tcp://172.17.42.1 && docker run -name spx-1 -t -v /var/www/webed:/var/www/webed:rw hsk81/notex:run ./webed-sphinx.py converter -p $QUEUE:7171 -d $QUEUE:9191 --worker-threads 2

Run a worker container named spx-1, and connect to the queue by wiring the ping and data channels to the corresponding address and ports. The worker starts internally two threads: depending on job load and resources you can increase or decrease the number of conversion threads per worker.

You could also start another worker container by repeating the same command except by using another name, e.g. spx-2: But this does not make much sense, if the same physical host is used (increase the number of worker threads instead); if you would run the command on another host though, then you probably would need to provide a correct TCP/IP address for the QUEUE variable.

  • http://localhost:8080

Navigate your browser to the above location, and enjoy! The frontend container runs internally nginx to serve the application; depending on your needs use another external port than 8080 or proxy to localhost:8080 via an nginx (or apache etc.) instance on your host machine.

Configuration

The default configuration (for the production environment) should be adapted to your needs, since otherwise some of the services which are included in NoTex might not run as expected. Below you'll find the configuration apdaptations which are used for the NoTex.ch site itself.

Caching (webed.conf)

On NoTex.ch memcached is not run within the container, but externally (the command from RUN.pro has been adapted by omitting MEMCACHED [it could have also be set to zero: MEMCACHED=0]). Therefore the corresponding memcached_pass value had to be adapted:

diff --git a/webed.conf b/webed.conf
index 09aa27b..5c15110 100644
--- a/webed.conf
+++ b/webed.conf
@@ -15,7 +15,7 @@ server {
     location /cache {
         internal;
         set $memcached_key      $args;
-        memcached_pass          127.0.0.1:11211;
+        memcached_pass          172.17.42.1:11211;
         default_type            application/octet-stream;
         expires                 15s;
         add_header              Cache-Control private;

Caching and Admin (default.py)

External Caching

On NoTex.ch memcached and redis are not run within the container, but externally (the command from RUN.pro has been adapted by omitting MEMCACHED and REDIS [they could have also be set to zero: MEMCACHED=0 and REDIS=0]). Therefore the corresponding CACHE{0,1,2,3}_SERVERS values had to be adapted:

diff --git a/webed/config/default.py b/webed/config/default.py
index e77e80c..751fcfc 100644
--- a/webed/config/default.py
+++ b/webed/config/default.py
@@ -27,13 +27,13 @@ class DefaultConfig:
         'CACHE_DEFAULT_TIMEOUT', PERMANENT_SESSION_LIFETIME.total_seconds ()))
 
     CACHE0_KEY_PREFIX = os.getenv ('CACHE0_KEY_PREFIX', 'webed-std:')
-    CACHE0_SERVERS = eval (os.getenv ('CACHE0_SERVERS', str (['127.0.0.1'])))
+    CACHE0_SERVERS = eval (os.getenv ('CACHE0_SERVERS', str (['172.17.42.1'])))
     CACHE1_KEY_PREFIX = os.getenv ('CACHE1_KEY_PREFIX', 'webed-obj:')
-    CACHE1_SERVERS = eval (os.getenv ('CACHE1_SERVERS', str (['127.0.0.1'])))
+    CACHE1_SERVERS = eval (os.getenv ('CACHE1_SERVERS', str (['172.17.42.1'])))
     CACHE2_KEY_PREFIX = os.getenv ('CACHE2_KEY_PREFIX', 'webed-sss:')
-    CACHE2_SERVERS = eval (os.getenv ('CACHE2_SERVERS', str (['127.0.0.1'])))
+    CACHE2_SERVERS = eval (os.getenv ('CACHE2_SERVERS', str (['172.17.42.1'])))
     CACHE3_KEY_PREFIX = os.getenv ('CACHE3_KEY_PREFIX', 'webed-dbs:')
-    CACHE3_SERVERS = eval (os.getenv ('CACHE3_SERVERS', str (['127.0.0.1'])))
+    CACHE3_SERVERS = eval (os.getenv ('CACHE3_SERVERS', str (['172.17.42.1'])))
 
     LOG_FILE = os.path.join ('..', 'webed.logs', 'webed.log')
     LOG_FILE = os.getenv ('LOG_FILE', LOG_FILE)
@@ -63,10 +63,10 @@ class DefaultConfig:
     ##
 
     PRIVILEGED_ADDRESSES = eval (os.getenv (
-        'PRIVILEGED_ADDRESSES', str (['127.0.0.1'])))
+        'PRIVILEGED_ADDRESSES', str (['XXX.X.X.X'])))
 
     PROXY_FIX = eval (os.getenv (
-        'PROXY_FIX', str (False)))
+        'PROXY_FIX', str (True)))
 
     ##
     ## MIMETYPE_PATHs is a list of paths point to a `mime.types` file, which

Admin Security

In addition, the PRIVILEGED_ADDRESSES has been changed to allow secure access to the admin interface: To access it use (a) the IP address of a machine, which has a back-end proxy (like squid) running, (b) on which you can SSH tunnel to, and (c) which has a front-end proxy (like nginx) running (pointing to the NoTex instance). Further then (d) connect your browser to the local port of the SSH tunnel (change the corresponding proxy settings in your browser).

You should also make sure to run the front-end proxy via HTTPS (for which a self-signed SSL certificated should be enough). Then navigate to e.g. admin.notex.ch (or whereever the now privileged machine is running):

  • https://admin.notex.ch/admin/

Provided, you've set-up the privileged machine correctly, the admin interface should appear: By default you'll be recognized as an annonymous user. To login visit https://admin.notex.ch/admin/login and to logout https://admin.notex.ch/admin/logout: On successful login you should be recognized as an admin user, and acquire access to the corresponding actions/menus.

The security of this setup is based upon the admin user possessing the SSH key file for the privileged machine to be able to establish an SSH tunnel successfully. As long as the priviledged machine is not compromised, the access should be safe. Consider also a browser plugin which can quickly enable and disable the proxy access: As long as the proxy is disabled you should not be able to login as an admin user.

Set PROXY_FIX to True, and correctly forward the remote address of a client (in the front-end proxy via setting the X-Forwarded-For and X-Real-IP headers: see the proxy.conf file for details), since otherwise this setup will not work. Do not set PROXY_FIX if you connect the NoTex instance directly (without a front-end proxy in between) to the internet!

Security, DB, Mail, Blog and CDN (production.py)

Replace the authentication tokens marked with XXX with the corresponding values for your environment: A SECRET_KEY can be generated by simply running the production.py script; the DB is run (like the caches) externally (which means the POSTGRESQL environment variable has been omitted in RUN.pro [or set to zero: POSTGRESQL=0]); the MAIL_* and DEFAULT_MAIL_* values have been adapted to allow the contact page to work properly; the BLOG_* values have been changed to let the desired blogs appear; and finally a CDN has been setup to allow fast global access:

diff --git a/webed/config/production.py b/webed/config/production.py
index 8f5e39a..3104eec 100644
--- a/webed/config/production.py
+++ b/webed/config/production.py
@@ -23,14 +23,14 @@ import os
 ###############################################################################
 ###############################################################################
 
-SECRET_KEY = '000000000000000000000000000000000000000=' ## [!!]
+SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' ## [**]
 SECRET_KEY = os.getenv ('SECRET_KEY', SECRET_KEY)
 
 ###############################################################################
 ###############################################################################
 
 SQLALCHEMY_DATABASE_URI = os.getenv ('SQLALCHEMY_DATABASE_URI',
-    'postgresql://webed-p:password@localhost/webed-p') ## [ok]
+    'postgresql://webed-p:[email protected]/webed-p') ## [ok]
 
 ###############################################################################
 ###############################################################################
@@ -45,26 +45,26 @@ VCS_CONF = os.getenv ('VCS_CONF', VCS_CONF)
 ###############################################################################
 ###############################################################################
 
-MAIL_SERVER = os.getenv ('MAIL_SERVER', 'SMTP.SERVER.NET') ## [??]
+MAIL_SERVER = os.getenv ('MAIL_SERVER', 'smtp.XXXXXX.XXX') ## [**]
 MAIL_PORT = int (os.getenv ('MAIL_PORT', 587)) ## [ok]
 MAIL_USE_TLS = eval (os.getenv ('MAIL_USE_TLS', str (True))) ## [ok]
-MAIL_USERNAME = os.getenv ('MAIL_USERNAME', 'USERNAME') ## [??]
-MAIL_PASSWORD = os.getenv ('MAIL_PASSWORD', 'PASSWORD') ## [??]
+MAIL_USERNAME = os.getenv ('MAIL_USERNAME', 'XXXXXXXX') ## [**]
+MAIL_PASSWORD = os.getenv ('MAIL_PASSWORD', 'XXXXXXXX') ## [**]
 
 DEFAULT_MAIL_SENDER = eval (os.getenv (
-    'DEFAULT_MAIL_SENDER', str (('SENDER', '[email protected]')))) ## [??]
+    'DEFAULT_MAIL_SENDER', str (('XXXXXX', '[email protected]')))) ## [**]
 DEFAULT_MAIL_RECEIVERS = eval (os.getenv (
-    'DEFAULT_MAIL_RECEIVERS', str (['[email protected]']))) ## [??]
+    'DEFAULT_MAIL_RECEIVERS', str (['[email protected]']))) ## [**]
 
 ###############################################################################
 ###############################################################################
 
 BLOG_ID = os.getenv ('BLOG_ID', str (
-    '0000000000000000000')) ## [??]
+    'XXXXXXXXXXXXXXXXXXX')) ## [**]
 BLOG_URL = os.getenv ('BLOG_URL', str (
     'https://www.googleapis.com/blogger/v3/blogs/%s/posts' % BLOG_ID)) ## [ok]
 BLOG_API_KEY = os.getenv ('BLOG_API_KEY', str (
-    '0000000000000--000000000000000000000000')) ## [??]
+    'XXXXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXX')) ## [**]
 BLOG_HEADERS = eval (os.getenv ('BLOG_HEADERS', str (
     {'Accept-Encoding': 'gzip', 'User-Agent': 'NoTex.ch (gzip)'}))) ## [ok]
@@ -72,6 +72,7 @@ BLOG_HEADERS = eval (os.getenv ('BLOG_HEADERS', str (
 ###############################################################################
 
 FORUM_URL = os.getenv ('FORUM_URL', 'https://bbs.notex.ch/index.php') ## [ok]
+CDN = os.getenv ('CDN', 'https://XXXXXXXXXXX') ## [**]
 
 ###############################################################################
 ###############################################################################

Web frontend to GIT (gitweb.conf)

The gitweb service provides a web interface to a GIT repository; the $project_list setting should definitely be set, since it controls which projects are seen on the main view. Since such a list is not desirable - due to privacy reasons - it points to an empty/non-existent $projectroot/project.lst file:

diff --git a/gitweb.conf b/gitweb.conf
index 78c8ad1..5696f40 100644
--- a/gitweb.conf
+++ b/gitweb.conf
@@ -5,10 +5,10 @@ $git_temp = "/tmp";
 $projectroot = "/var/www/webed/acid"; 
 
 # File listing projects, or directory to be scanned for projets.
-$projects_list = "$projectroot";
+$projects_list = "$projectroot/project.lst";
 
 # Base URLs for links displayed in the web interface.
-our @git_base_url_list = qw(git://localhost);
+our @git_base_url_list = qw(git://vcs.notex.ch);
 
 # Show the author of each line in a source file.
 $feature{'blame'}{'default'} = [1];
@@ -17,10 +17,10 @@ $feature{'blame'}{'default'} = [1];
 $feature{'highlight'}{'default'} = [1];
 
 # Label for the "home link" at the top of all pages.
-$home_link_str = "NoTex";
+$home_link_str = "NoTex.ch";
 
 # Target of the home link on the top of all pages.
-$home_link = "http://localhost:8008/git/";
+$home_link = "https://notex.ch";
 
 # Name of your site or organization.
-$site_name = "NoTex - Git Web Interface";
+$site_name = "NoTex.ch - Git Web Interface";

Commercial Support

Do you need help in setting up NoTex for your organization or institution? Does the described setup not correspond to your requirements? Would you like to have the application customized? Do not hesitate, and write to [email protected]: We'll provide you with an SLA (service level agreement) tailored to your needs!

notex-v2.0's People

Contributors

elicoidal avatar gitter-badger avatar hsk81 avatar japm48 avatar sbworth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

notex-v2.0's Issues

Blog #30: NoTex.ch Forum

Blog about the new FluxBB forum, what it offers and how it can benefit the user. Tell also about the experience about setting it up on Heroku (mention also the used AddOns) [advantages/disadvantages] and compare it to the problems I'd faced while setting it up locally.

Docker image problem

Hi Hasan,
I would like test your aplication but I have a problem after

docker build -rm -t hsk81/notex:run .

The following packages have unmet dependencies:
build-essential : Depends: libc6-dev but it is not going to be installed or
libc-dev
Depends: g++ (>= 4:4.4.3) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Evaluate Forum

The new forum is a place to ask questions and find information about various aspect of the editor. After a week of usage, evaluate if the forum attracts enough visitors or not.

If not (which is likely) consider shifting the tutorial and the rST reference into the forum and put a corresponding hint where the start button disappears after usage. Since the faq section (already in the forum) together with the tutorial and rST reference make up only of a minor part of the traffic, it's worth the risk to use that content as a means to attract forum visitors.

Blog #32: Keyword Targeted Content

Write a blog entry focused on a particular keyword (or a group of keywords), selected from the following list:

+ [1,830,000] pdf [!!]
+ [1,500,000] ba [!?]
+ [1,220,000] academy [!?]
+ [1,000,000] html
+ [1,000,000] pdf creator [?]
+ [0,673,000] msc
+ [0,368,000] md [?]
+ [0,368,000] pdf converter
+ [0,368,000] mba
+ [0,301,000] latex [?]
+ [0,301,000] college
+ [0,301,000] uni
+ [0,301,000] bsc
+ [0,246,000] education
+ [0,201,000] rst [?]
+ [0,201,000] master
+ [0,165,000] pdf editor
+ [0,165,000] paper [?]
+ [0,165,000] report [?]
+ [0,165,000] journal
+ [0,135,000] university
+ [0,135,000] essay
+ [0,110,000] article
+ [0,110,000] thesis
+ [0,110,000] writing

Forum Links

Put some links in forum posts: Take care to be relevant to the questions in the posts and avoid being perceived as spam!

Warning on splitted tab's closing

If I try to close a splitted tab which has not been modified, then the system asks me still if I'd like to close it .. this is not required and confusing; fix.

Resource File View

If any non image, binary file should be provided, then it should be displayed as a nice hex-dump.

Forum: Anti SPAM Bot Mod

Bot's started registering: They cannot login they cannot receive verification email due to fake email addresses. This is good but wastes resources, they should not be able to register at all in the first place! Using the FluxBB Very Simple Anti SPAM Bot Registration (VSABR) mod, I hope to stop them.

SEO: Keywords & Content

Webmasters' keyword tool shows completely irrelevant entries, like

1.  ttf 
2.  style   
3.  regular (2 variants)    
4.  notex   
5.  bold    
6.  project (3 variants)    
7.  document (4 variants)   
8.  rst (2 variants)    
9.  latex   
10. font (2 variants)   
11. name (3 variants)   
12. pdf (2 variants)    
13. italic (2 variants) 
14. sans    
15. oblique 
16. text    
17. ekushey 
18. linux   
19. options (2 variants)    
20. dejavu  

The problem is that my blogs do not emphasize the correct keywords (and order) I'd like to have, e.g. something like

+ [0,074,000] editor
+ [0,027,100] text editor
+ [0,014'800] online editor
+ [0,006,600] online text editor

---
+ [0,201,000] rst [?]
+ [0,003,600] restructuredtext
+ [0,000,020] online restructuredtext editor
+ [0,000,000] restructuredtext editor [!?]

+ [0,368,000] md [?]
+ [0,049,500] markdown
+ [0,004,400] markdown editor
+ [0,000,590] online markdown editor

+ [0,301,000] latex [?]
+ [0,090,500] tex
+ [0,009,900] latex editor
+ [0,001,900] online latex editor

+ [1,000,000] html
+ [0,074,000] html editor
+ [0,018,100] online html editor
+ [0,002,900] hypertext markup language

+ [1,830,000] pdf [!!]
+ [1,000,000] pdf creator [?]
+ [0,368,000] pdf converter
+ [0,165,000] pdf editor

---
+ [1,220,000] academy [!?]
+ [0,135,000] university
+ [0,301,000] college
+ [0,301,000] uni
+ [0,246,000] education

+ [1,500,000] ba [!?]
+ [0,301,000] bsc
+ [0,049,500] bachelor degree
+ [0,040,500] bachelor of arts
+ [0,049,500] bachelor of science

+ [0,673,000] msc
+ [0,368,000] mba
+ [0,201,000] master
+ [0,060,500] master degree
+ [0,027,100] master of science
+ [0,009,900] master of business administration

+ [0,165,000] paper [?]
+ [0,165,000] report [?]
+ [0,165,000] journal
+ [0,135,000] essay
+ [0,110,000] article
+ [0,110,000] thesis
+ [0,110,000] writing
+ [0,014,800] publication

+ [0,040,500] research paper
+ [0,033,100] report writing
+ [0,033,100] science articles

+ [0,090,500] computer science

---
+ [0,001,600] notex

Fix content in general to attract these keywords, analyse monthly potential of each and try order them also accordingly! Use AdWords keyword planner as a tool.

Shift tutorial & rST to the forum

It seems that the main menu with

[Home, NoTex, Tutorial, rST, Blog, Forum, and Contact]

is overcrowded (7 items, with only ca. 2.5 pages per visit). I'd like to shift more focus to the forum, by lowering the number of items in the main menu down to 5:

[Home, NoTex, Blog, Forum, and Contact]

There is a slight possibility that some of the traffic from Tutorial and rST is lost, but since that is only 15% of the total traffic it's I think acceptable to risk it. The gain would be increased forum activity.

rST Syntax Highlighting

In the following cases NoTex.ch's rST syntax highlighting fails:

  • I try to us weak or strong *emphasis*, but the trailing comma causes the italic or bold script to be suppressed;
  • I try to specify a URL using an anchor like .. _rST' theme: http://rst-theme.org but the single apostrophe after the first word (rST) causes the syntax highlighting to be removed;

Upgrade first to most recent CodeMirror version; fix both issues and send a pull request to original author.

EPUB Export

The Sphinx back-end supports the EPUB format: There has been a request to integrate it also with NoTex.ch. Research EPUB and do the integration.

HTML Preview

It should be possible to pre-render the rST document being created: For this purpose rst2html seems to be a good option; but we need in this case also the possibility export HTML with Sphinx or rst2html!

Introduce ADSENSE control variable

It should be possible to enable/disable ads by setting/clearing an ADSENSE app configuration: Since due to external reasons it is possible that no ads are served, in which case the empty whitespace instead looks awkward. By quickly disabling the corresponding configuration this awkwardness can be eliminated quickly.

No ReStructuredText support?

The GitHub page says it supports ReStructuredText, but a simple test does not render correctly (in the online version):

========
 A test
========
---------------------
 Of ReStructuredText
---------------------

:Author:    John Smith <[email protected]>


Section One
===========

The primary goal of reStructuredText is to define and implement a markup syntax for use in Python docstrings and other documentation domains, that is readable and simple, yet powerful enough for non-trivial use. The intended purpose of the markup is the conversion of reStructuredText documents into useful structured data formats.

See statemachine.py for an example of a Python module fully documented using reStructuredText.

Blog #28: Export Error Reporting

Create a weekly blog (based on the IM plan): It has to address the buyer persona, teach a very specific aspect of the NoTex.ch and give generic answers to common questions. Since NoTex.ch's export error reporting is underdeveloped, blog #27 should show the workaround to get some feedback about what happened in the last export.

Create non-rST project

If a create a non-rST project (e.g. a generic one) then the content of the files is non-existent; fix!

Explicit CJK Support

Actually NoTex.ch does already support CJK (and other languages); but users of those languages need to know a little bit of LaTex to be able to activate CJK support; e.g. for Japanese

\\usepackage{xeCJK}
\\setCJKmainfont{Sazanami Gothic}
\\setCJKmonofont{Sazanami Mincho}

although Sazanami Mincho is technically not a "mono" font.

To make it easier for these users, either create some sample projects in other languages than English, or introduce a support CJK flag (with corresponding font selection).

docker build fails

notex.git$ docker build --rm -t hsk81/notex:run .
Sending build context to Docker daemon
FATA[0000] Post http:///var/run/docker.sock/v1.16/build?rm=1&t=hsk81%2Fnotex%3Arun: dial unix /var/run/docker.sock: no such file or directory

notex.git$ uname -a
Darwin Hongbos-iMac.local 14.0.0 Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64

notex.git$ docker -v
Docker version 1.4.1, build 5bc2ff8

Client Side Encryption

Given recent scandals about privacy, client side encryption (which is mentioned in the FAQs) should become a priority. Users should not be required to trust, but to know that the administrator is not able to access his/her data: This can be done via encrypting any content in the browser of a user, and only then sending it to NoTex.ch for storage.

PDF/LaTex: Enable *.sty and *.cls overrides

The Sphinx back-end employs a few preset styles *.sty an classes *.cls to define default "templates"; if people want to modify these they can't since they remain hidden in the back-end during conversion.

It should be possible to enable a flag during project creation to also show these template files inside the project. Further if somebody creates a corresponding folder with file(s) that matches default style/class file(s), then the user defined file(s) should override the defaults!

rST Cheat Sheet

Create a reStructuredText cheat sheet, and offer it for download in exchange for email address; collecting these contact information will allow us to convert visitors to potential leads!

Math Formula Preview

If a math content is selected (or cursor put into) then a preview window should appear pre-rendering the formula.

Forum: Create rST & Markdown content

People should have a broad choice in content and have the most important aspects of rST/Markdown (plus maybe LaTex?) covered! Ask questions as blackhan and answer them as hsk81.

Standalone App

It should be possible to turn the online application into an offline version: either directly downloadable or via some online web store.

Version Control System (VCS)

It should be possible to version the project/documents (using either GIT or - more likely - something much simpler).

Container does not build under debian 8.5 host

downloads lots of stuff a whole day,
uses git to checkout some source code and crashes at compiling it.

The documentation must be more specific about some reference system:

  • what distribution to use as host ?
  • what version of docker to use, is 1.11 ok ?
  • example stages of the build process.

Right before using debian 8.5, i tried a different VM with debian 7.9 with the backports repo.
I installed the newest kernel from the backports repo to satisfy docker.
The build of the container broke even earlier.

I am unsure if the whole toolchain is still working with nowadays distributions.

Image Preview

Render an image in the project manager upon hovering with mouse cursor.

Build will fail until new version is released

Using docker build -rm -t hsk81/notex:run .
Pull request #46 fixes a build error, but the build will still fail because it only uses the last version created (tag-$(git tag | tail -n1)).

Please, create a new version (tag) to fix this.

Export Error Feedback

When exporting and failing due to Sphinx or LaTex related issue, current feedback is minimal; fix!

Drag and Drop

Study ExtJS drag & drop possibilities and implement a reasonable approach.

Business Card

Create a simple business card with NoTex.ch on it, and (maybe on the back?) a way to contact me via notex.ch/contact, and keep distributing to everybody!

Blog #33: Keyword Targeted Content

Continue talking about the following keywords:

+ [1,830,000] pdf [!!]
+ [1,500,000] ba [!?]
+ [1,220,000] academy [!?]
+ [1,000,000] html
+ [1,000,000] pdf creator [?]
+ [0,673,000] msc
+ [0,368,000] md [?]
+ [0,368,000] pdf converter
+ [0,368,000] mba
+ [0,301,000] latex [?]
+ [0,301,000] college
+ [0,301,000] uni
+ [0,301,000] bsc
+ [0,246,000] education
+ [0,201,000] rst [?]
+ [0,201,000] master
+ [0,165,000] pdf editor
+ [0,165,000] paper [?]
+ [0,165,000] report [?]
+ [0,165,000] journal
+ [0,135,000] university
+ [0,135,000] essay
+ [0,110,000] article
+ [0,110,000] thesis
+ [0,110,000] writing

ExtJS Upgrade to `4.2.x`

Upgrade ExtJS from 4.1.1a to 4.2.0: Since the corresponding submodule we're using does not have any 4.2.x branch, create a new extjs-4.2.x repository.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.