Added images
This commit is contained in:
parent
466a367f93
commit
aa717a52ee
5 changed files with 691 additions and 1 deletions
14
README.md
14
README.md
|
@ -1,7 +1,8 @@
|
||||||
# Tube n' kids
|
# Tube n' kids
|
||||||
A tool to protect children from unwanted online videos.
|
A tool to protect children from unwanted online videos.
|
||||||
|
|
||||||

|
[](https://www.tubenkids.com)
|
||||||
|
*Tube n' kids*
|
||||||
|
|
||||||
## Why we need to do more to protect our children
|
## Why we need to do more to protect our children
|
||||||
|
|
||||||
|
@ -35,6 +36,12 @@ The right way for a child to watch online videos is under the supervision of an
|
||||||
|
|
||||||
So, in my view, on top of all the investment into highly complex artificial intelligence algorithms with preemptive capability, the legal battle and invested support provided by devoted associations, I wanted to have more control over what my son was watching. So the approach I took was to create something that would catalog his usage, summarize and flag suspicious activity. Something that could make my job of supervisor a little easier. And that was the incentive behind Tube n' kids.
|
So, in my view, on top of all the investment into highly complex artificial intelligence algorithms with preemptive capability, the legal battle and invested support provided by devoted associations, I wanted to have more control over what my son was watching. So the approach I took was to create something that would catalog his usage, summarize and flag suspicious activity. Something that could make my job of supervisor a little easier. And that was the incentive behind Tube n' kids.
|
||||||
|
|
||||||
|
[](https://itunes.apple.com/us/app/tube-n-kids/id1143617624?mt=8)
|
||||||
|
*Parental area in the iOS app*
|
||||||
|
|
||||||
|
[](https://www.tubenkids.com)
|
||||||
|
*Parental area in the web app*
|
||||||
|
|
||||||
It is not a silver bullet. It does not stop bad content from showing up. It does not make it OK to handle and iPad to the kids and let them watch videos alone all day. It does not remove from the parents the responsibility of supervising their kids. It helps them do it.
|
It is not a silver bullet. It does not stop bad content from showing up. It does not make it OK to handle and iPad to the kids and let them watch videos alone all day. It does not remove from the parents the responsibility of supervising their kids. It helps them do it.
|
||||||
|
|
||||||
> I wanted to have more control over what my son was watching. (...) Something that could make my job of supervisor a little easier.
|
> I wanted to have more control over what my son was watching. (...) Something that could make my job of supervisor a little easier.
|
||||||
|
@ -43,4 +50,9 @@ And, of course, everything is for naught if the child is actively looking for th
|
||||||
|
|
||||||
And that was another thing I put in Tube n' kids. I can search for channels that I know he likes, and I can add them to his list of suggestions. I can browse his history and find the subject he is interested in - like Minecraft and Beyblade, recently - and try to find good channels about those. There were times this strategy didn't work, like with a few amazing zoo channels I found and he dismissed without giving them a second look. Still, it is another way to put inspiring content in front of him.
|
And that was another thing I put in Tube n' kids. I can search for channels that I know he likes, and I can add them to his list of suggestions. I can browse his history and find the subject he is interested in - like Minecraft and Beyblade, recently - and try to find good channels about those. There were times this strategy didn't work, like with a few amazing zoo channels I found and he dismissed without giving them a second look. Still, it is another way to put inspiring content in front of him.
|
||||||
|
|
||||||
|
[](https://www.tubenkids.com)
|
||||||
|
*Child area*
|
||||||
|
|
||||||
At some point he may find something that is not appropriated to him. Probably he won't even understand it, and close it right away. This is where Tnk comes in handy by allowing me to block the video, or the entire channel for that matter, which means that it will not appear for my son, even if he looks for it.
|
At some point he may find something that is not appropriated to him. Probably he won't even understand it, and close it right away. This is where Tnk comes in handy by allowing me to block the video, or the entire channel for that matter, which means that it will not appear for my son, even if he looks for it.
|
||||||
|
|
||||||
|
The world has changed. Content comes into our homes through new ways, and it opens way to all sorts of threats. We need to adapt. As technology changed the way we watch content, it also has to provide new means to control it. We need new tools to keep up.
|
||||||
|
|
BIN
assets/Tnk_child_view.png
Normal file
BIN
assets/Tnk_child_view.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 MiB |
BIN
assets/Tnk_detail.png
Normal file
BIN
assets/Tnk_detail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 756 KiB |
BIN
assets/Tnk_detail_2.png
Normal file
BIN
assets/Tnk_detail_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1,021 KiB |
678
profile.log
Normal file
678
profile.log
Normal file
|
@ -0,0 +1,678 @@
|
||||||
|
FUNCTION ale#Var()
|
||||||
|
Defined: ~/.vim/bundle/ale/autoload/ale.vim line 179
|
||||||
|
Called 1 time
|
||||||
|
Total time: 0.000019
|
||||||
|
Self time: 0.000019
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
1 0.000005 let l:full_name = 'ale_' . a:variable_name
|
||||||
|
1 0.000008 let l:vars = getbufvar(str2nr(a:buffer), '', {})
|
||||||
|
|
||||||
|
1 0.000005 return get(l:vars, l:full_name, g:[l:full_name])
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnDeleteChar()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 670
|
||||||
|
Called 2 times
|
||||||
|
Total time: 0.000176
|
||||||
|
Self time: 0.000038
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
2 0.000172 0.000034 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
2 0.000002 return a:key
|
||||||
|
endif
|
||||||
|
|
||||||
|
call timer_stop( s:pollers.completion.id )
|
||||||
|
if pumvisible()
|
||||||
|
return "\<C-y>" . a:key
|
||||||
|
endif
|
||||||
|
return a:key
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnInsertLeave()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 748
|
||||||
|
Called 1 time
|
||||||
|
Total time: 0.000090
|
||||||
|
Self time: 0.000019
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
1 0.000089 0.000018 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
1 0.000001 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call timer_stop( s:pollers.completion.id )
|
||||||
|
let s:force_semantic = 0
|
||||||
|
let s:completion = s:default_completion
|
||||||
|
|
||||||
|
call s:OnFileReadyToParse()
|
||||||
|
exec s:python_command "ycm_state.OnInsertLeave()"
|
||||||
|
if g:ycm_autoclose_preview_window_after_completion || g:ycm_autoclose_preview_window_after_insertion
|
||||||
|
call s:ClosePreviewWindowIfNeeded()
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION fugitive#Head()
|
||||||
|
Defined: ~/.vim/bundle/vim-fugitive/autoload/fugitive.vim line 324
|
||||||
|
Called 28 times
|
||||||
|
Total time: 0.003488
|
||||||
|
Self time: 0.003115
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
28 0.000614 0.000241 let dir = a:0 > 1 ? a:2 : s:Dir()
|
||||||
|
28 0.001142 if empty(dir) || !filereadable(dir . '/HEAD')
|
||||||
|
return ''
|
||||||
|
28 0.000014 endif
|
||||||
|
28 0.000715 let head = readfile(dir . '/HEAD')[0]
|
||||||
|
28 0.000310 if head =~# '^ref: '
|
||||||
|
28 0.000577 return substitute(head, '\C^ref: \%(refs/\%(heads/\|remotes/\|tags/\)\=\)\=', '', '')
|
||||||
|
elseif head =~# '^\x\{40\}$'
|
||||||
|
let len = a:0 ? a:1 : 0
|
||||||
|
return len < 0 ? head : len ? head[0:len-1] : ''
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnTextChangedNormalMode()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 702
|
||||||
|
Called 1 time
|
||||||
|
Total time: 0.000076
|
||||||
|
Self time: 0.000019
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
1 0.000074 0.000017 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
1 0.000001 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call s:OnFileReadyToParse()
|
||||||
|
|
||||||
|
FUNCTION ActiveStatus()
|
||||||
|
Defined: ~/.vimrc line 241
|
||||||
|
Called 14 times
|
||||||
|
Total time: 0.000888
|
||||||
|
Self time: 0.000888
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
14 0.000058 let statusline=""
|
||||||
|
14 0.000057 let statusline.="%1*"
|
||||||
|
14 0.000049 let statusline.="\ %{ModeName(mode())}\ "
|
||||||
|
14 0.000026 let statusline.="%2*"
|
||||||
|
14 0.000030 let statusline.="%{mode()=='i'||mode()=='v'?'':''}"
|
||||||
|
14 0.000032 let statusline.="%3*"
|
||||||
|
14 0.000049 let statusline.="\ %{fugitive#head()!=''?'\ '.fugitive#head().'\ ':'\ -\ '}"
|
||||||
|
14 0.000019 let statusline.="%4*"
|
||||||
|
14 0.000025 let statusline.="%{mode()=='i'||mode()=='v'?'':''}"
|
||||||
|
14 0.000014 let statusline.="%5*"
|
||||||
|
14 0.000044 let statusline.="\ [%n/%{len(filter(range(1,bufnr('$')),'buflisted(v:val)'))}]"
|
||||||
|
14 0.000077 let statusline.="\ %{pathshorten(expand('%:f'))}\ %m\ "
|
||||||
|
14 0.000028 let statusline.="%{&readonly?'\ \ ':''}"
|
||||||
|
14 0.000022 let statusline.="%="
|
||||||
|
14 0.000026 let statusline.="\ %{''!=#&filetype?&filetype:'none'}\ "
|
||||||
|
14 0.000020 let statusline.="%4*"
|
||||||
|
14 0.000026 let statusline.="%{mode()=='i'||mode()=='v'?'':''}"
|
||||||
|
14 0.000034 let statusline.="%3*"
|
||||||
|
14 0.000043 let statusline.="\ %{&ff=='mac'?'CR':&ff=='unix'?'LF':'CRLF'} %vC|%l/%LL\ " " Column number | Row number / total lines
|
||||||
|
14 0.000023 let statusline.="%2*"
|
||||||
|
14 0.000036 let statusline.="%{mode()=='i'||mode()=='v'?'':''}"
|
||||||
|
14 0.000024 let statusline.="%1*"
|
||||||
|
14 0.000030 let statusline.="\ %{strftime('%a %b-%d %H:%M')}\ " " Date time clock updated on key presses
|
||||||
|
|
||||||
|
14 0.000024 return statusline
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_DisableOnLargeFile()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 418
|
||||||
|
Called 26 times
|
||||||
|
Total time: 0.000130
|
||||||
|
Self time: 0.000130
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
26 0.000079 if exists( 'b:ycm_largefile' )
|
||||||
|
26 0.000026 return b:ycm_largefile
|
||||||
|
endif
|
||||||
|
|
||||||
|
let threshold = g:ycm_disable_for_files_larger_than_kb * 1024
|
||||||
|
let b:ycm_largefile = threshold > 0 && getfsize( expand( a:buffer ) ) > threshold
|
||||||
|
if b:ycm_largefile
|
||||||
|
exec s:python_command "vimsupport.PostVimMessage(" . "'YouCompleteMe is disabled in this buffer; " . "the file exceeded the max size (see YCM options).' )"
|
||||||
|
endif
|
||||||
|
return b:ycm_largefile
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnTextChangedInsertMode()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 711
|
||||||
|
Called 2 times
|
||||||
|
Total time: 0.000502
|
||||||
|
Self time: 0.000069
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
2 0.000491 0.000058 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
2 0.000003 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if s:completion_stopped
|
||||||
|
let s:completion_stopped = 0
|
||||||
|
let s:completion = s:default_completion
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call s:IdentifierFinishedOperations()
|
||||||
|
|
||||||
|
" We have to make sure we correctly leave semantic mode even when the user
|
||||||
|
" inserts something like a "operator[]" candidate string which fails
|
||||||
|
" CurrentIdentifierFinished check.
|
||||||
|
if s:force_semantic && !s:Pyeval( 'base.LastEnteredCharIsIdentifierChar()' )
|
||||||
|
let s:force_semantic = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if &completefunc == "youcompleteme#CompleteFunc" && ( g:ycm_auto_trigger || s:force_semantic ) && !s:InsideCommentOrStringAndShouldStop() && !s:OnBlankLine()
|
||||||
|
" Immediately call previous completion to avoid flickers.
|
||||||
|
call s:Complete()
|
||||||
|
call s:InvokeCompletion()
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec s:python_command "ycm_state.OnCursorMoved()"
|
||||||
|
|
||||||
|
if g:ycm_autoclose_preview_window_after_completion
|
||||||
|
call s:ClosePreviewWindowIfNeeded()
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION <SNR>32_Highlight_Matching_Pair()
|
||||||
|
Defined: /usr/local/Cellar/vim/8.1.1850/share/vim/vim81/plugin/matchparen.vim line 39
|
||||||
|
Called 6 times
|
||||||
|
Total time: 0.000998
|
||||||
|
Self time: 0.000998
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
" Remove any previous match.
|
||||||
|
6 0.000067 if exists('w:paren_hl_on') && w:paren_hl_on
|
||||||
|
silent! call matchdelete(3)
|
||||||
|
let w:paren_hl_on = 0
|
||||||
|
6 0.000011 endif
|
||||||
|
|
||||||
|
" Avoid that we remove the popup menu.
|
||||||
|
" Return when there are no colors (looks like the cursor jumps).
|
||||||
|
6 0.000039 if pumvisible() || (&t_Co < 8 && !has("gui_running"))
|
||||||
|
return
|
||||||
|
6 0.000005 endif
|
||||||
|
|
||||||
|
" Get the character under the cursor and check if it's in 'matchpairs'.
|
||||||
|
6 0.000030 let c_lnum = line('.')
|
||||||
|
6 0.000033 let c_col = col('.')
|
||||||
|
6 0.000019 let before = 0
|
||||||
|
|
||||||
|
6 0.000028 let text = getline(c_lnum)
|
||||||
|
6 0.000126 let matches = matchlist(text, '\(.\)\=\%'.c_col.'c\(.\=\)')
|
||||||
|
6 0.000017 if empty(matches)
|
||||||
|
let [c_before, c] = ['', '']
|
||||||
|
6 0.000006 else
|
||||||
|
6 0.000060 let [c_before, c] = matches[1:2]
|
||||||
|
6 0.000009 endif
|
||||||
|
6 0.000225 let plist = split(&matchpairs, '.\zs[:,]')
|
||||||
|
6 0.000032 let i = index(plist, c)
|
||||||
|
6 0.000011 if i < 0
|
||||||
|
" not found, in Insert mode try character before the cursor
|
||||||
|
6 0.000023 if c_col > 1 && (mode() == 'i' || mode() == 'R')
|
||||||
|
let before = strlen(c_before)
|
||||||
|
let c = c_before
|
||||||
|
let i = index(plist, c)
|
||||||
|
6 0.000008 endif
|
||||||
|
6 0.000008 if i < 0
|
||||||
|
" not found, nothing to do
|
||||||
|
6 0.000007 return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Figure out the arguments for searchpairpos().
|
||||||
|
if i % 2 == 0
|
||||||
|
let s_flags = 'nW'
|
||||||
|
let c2 = plist[i + 1]
|
||||||
|
else
|
||||||
|
let s_flags = 'nbW'
|
||||||
|
let c2 = c
|
||||||
|
let c = plist[i - 1]
|
||||||
|
endif
|
||||||
|
if c == '['
|
||||||
|
let c = '\['
|
||||||
|
let c2 = '\]'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Find the match. When it was just before the cursor move it there for a
|
||||||
|
" moment.
|
||||||
|
if before > 0
|
||||||
|
let has_getcurpos = exists("*getcurpos")
|
||||||
|
if has_getcurpos
|
||||||
|
" getcurpos() is more efficient but doesn't exist before 7.4.313.
|
||||||
|
let save_cursor = getcurpos()
|
||||||
|
else
|
||||||
|
let save_cursor = winsaveview()
|
||||||
|
endif
|
||||||
|
call cursor(c_lnum, c_col - before)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !has("syntax") || !exists("g:syntax_on")
|
||||||
|
let s_skip = "0"
|
||||||
|
else
|
||||||
|
" Build an expression that detects whether the current cursor position is
|
||||||
|
" in certain syntax types (string, comment, etc.), for use as
|
||||||
|
" searchpairpos()'s skip argument.
|
||||||
|
" We match "escape" for special items, such as lispEscapeSpecial.
|
||||||
|
let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))'
|
||||||
|
" If executing the expression determines that the cursor is currently in
|
||||||
|
" one of the syntax types, then we want searchpairpos() to find the pair
|
||||||
|
" within those syntax types (i.e., not skip). Otherwise, the cursor is
|
||||||
|
" outside of the syntax types and s_skip should keep its value so we skip
|
||||||
|
" any matching pair inside the syntax types.
|
||||||
|
" Catch if this throws E363: pattern uses more memory than 'maxmempattern'.
|
||||||
|
try
|
||||||
|
execute 'if ' . s_skip . ' | let s_skip = "0" | endif'
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E363/
|
||||||
|
" We won't find anything, so skip searching, should keep Vim responsive.
|
||||||
|
return
|
||||||
|
endtry
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Limit the search to lines visible in the window.
|
||||||
|
let stoplinebottom = line('w$')
|
||||||
|
let stoplinetop = line('w0')
|
||||||
|
if i % 2 == 0
|
||||||
|
let stopline = stoplinebottom
|
||||||
|
else
|
||||||
|
let stopline = stoplinetop
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Limit the search time to 300 msec to avoid a hang on very long lines.
|
||||||
|
" This fails when a timeout is not supported.
|
||||||
|
if mode() == 'i' || mode() == 'R'
|
||||||
|
let timeout = exists("b:matchparen_insert_timeout") ? b:matchparen_insert_timeout : g:matchparen_insert_timeout
|
||||||
|
else
|
||||||
|
let timeout = exists("b:matchparen_timeout") ? b:matchparen_timeout : g:matchparen_timeout
|
||||||
|
endif
|
||||||
|
try
|
||||||
|
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, timeout)
|
||||||
|
catch /E118/
|
||||||
|
" Can't use the timeout, restrict the stopline a bit more to avoid taking
|
||||||
|
" a long time on closed folds and long lines.
|
||||||
|
" The "viewable" variables give a range in which we can scroll while
|
||||||
|
" keeping the cursor at the same position.
|
||||||
|
" adjustedScrolloff accounts for very large numbers of scrolloff.
|
||||||
|
let adjustedScrolloff = min([&scrolloff, (line('w$') - line('w0')) / 2])
|
||||||
|
let bottom_viewable = min([line('$'), c_lnum + &lines - adjustedScrolloff - 2])
|
||||||
|
let top_viewable = max([1, c_lnum-&lines+adjustedScrolloff + 2])
|
||||||
|
" one of these stoplines will be adjusted below, but the current values are
|
||||||
|
" minimal boundaries within the current window
|
||||||
|
if i % 2 == 0
|
||||||
|
if has("byte_offset") && has("syntax_items") && &smc > 0
|
||||||
|
let stopbyte = min([line2byte("$"), line2byte(".") + col(".") + &smc * 2])
|
||||||
|
let stopline = min([bottom_viewable, byte2line(stopbyte)])
|
||||||
|
else
|
||||||
|
let stopline = min([bottom_viewable, c_lnum + 100])
|
||||||
|
endif
|
||||||
|
let stoplinebottom = stopline
|
||||||
|
else
|
||||||
|
if has("byte_offset") && has("syntax_items") && &smc > 0
|
||||||
|
let stopbyte = max([1, line2byte(".") + col(".") - &smc * 2])
|
||||||
|
let stopline = max([top_viewable, byte2line(stopbyte)])
|
||||||
|
else
|
||||||
|
let stopline = max([top_viewable, c_lnum - 100])
|
||||||
|
endif
|
||||||
|
let stoplinetop = stopline
|
||||||
|
endif
|
||||||
|
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
|
||||||
|
endtry
|
||||||
|
|
||||||
|
if before > 0
|
||||||
|
if has_getcurpos
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
else
|
||||||
|
call winrestview(save_cursor)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If a match is found setup match highlighting.
|
||||||
|
if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom
|
||||||
|
if exists('*matchaddpos')
|
||||||
|
call matchaddpos('MatchParen', [[c_lnum, c_col - before], [m_lnum, m_col]], 10, 3)
|
||||||
|
else
|
||||||
|
exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) . 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
|
||||||
|
endif
|
||||||
|
let w:paren_hl_on = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION ale#Queue()
|
||||||
|
Defined: ~/.vim/bundle/ale/autoload/ale.vim line 122
|
||||||
|
Called 2 times
|
||||||
|
Total time: 0.000073
|
||||||
|
Self time: 0.000060
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
2 0.000002 if a:0 > 2
|
||||||
|
throw 'too many arguments!'
|
||||||
|
2 0.000002 endif
|
||||||
|
|
||||||
|
2 0.000006 let l:buffer = get(a:000, 1, v:null)
|
||||||
|
|
||||||
|
2 0.000003 if l:buffer is v:null
|
||||||
|
2 0.000004 let l:buffer = bufnr('')
|
||||||
|
2 0.000002 endif
|
||||||
|
|
||||||
|
2 0.000004 if type(l:buffer) isnot v:t_number
|
||||||
|
throw 'buffer_number must be a Number'
|
||||||
|
2 0.000001 endif
|
||||||
|
|
||||||
|
2 0.000041 0.000028 if ale#ShouldDoNothing(l:buffer)
|
||||||
|
2 0.000001 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Default linting_flag to ''
|
||||||
|
let l:should_lint_file = get(a:000, 0) is# 'lint_file'
|
||||||
|
|
||||||
|
if s:lint_timer != -1
|
||||||
|
call timer_stop(s:lint_timer)
|
||||||
|
let s:lint_timer = -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:delay > 0
|
||||||
|
let s:lint_timer = timer_start( a:delay, function('s:Lint', [l:buffer, l:should_lint_file]))
|
||||||
|
else
|
||||||
|
call s:Lint(l:buffer, l:should_lint_file, 0)
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_AllowedToCompleteInBuffer()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 435
|
||||||
|
Called 26 times
|
||||||
|
Total time: 0.001600
|
||||||
|
Self time: 0.001470
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
26 0.000172 let buftype = getbufvar( a:buffer, '&buftype' )
|
||||||
|
|
||||||
|
26 0.000098 if has_key( s:buftype_blacklist, buftype )
|
||||||
|
return 0
|
||||||
|
26 0.000008 endif
|
||||||
|
|
||||||
|
26 0.000093 let filetype = getbufvar( a:buffer, '&filetype' )
|
||||||
|
|
||||||
|
26 0.000544 0.000414 if empty( filetype ) || s:DisableOnLargeFile( a:buffer )
|
||||||
|
return 0
|
||||||
|
26 0.000011 endif
|
||||||
|
|
||||||
|
26 0.000222 let whitelist_allows = type( g:ycm_filetype_whitelist ) != type( {} ) || has_key( g:ycm_filetype_whitelist, '*' ) || has_key( g:ycm_filetype_whitelist, filetype )
|
||||||
|
26 0.000133 let blacklist_allows = type( g:ycm_filetype_blacklist ) != type( {} ) || !has_key( g:ycm_filetype_blacklist, filetype )
|
||||||
|
|
||||||
|
26 0.000048 let allowed = whitelist_allows && blacklist_allows
|
||||||
|
26 0.000019 if allowed
|
||||||
|
let s:previous_allowed_buffer_number = bufnr( a:buffer )
|
||||||
|
26 0.000011 endif
|
||||||
|
26 0.000021 return allowed
|
||||||
|
|
||||||
|
FUNCTION FugitiveGitDir()
|
||||||
|
Defined: ~/.vim/bundle/vim-fugitive/plugin/fugitive.vim line 11
|
||||||
|
Called 56 times
|
||||||
|
Total time: 0.000226
|
||||||
|
Self time: 0.000226
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
56 0.000063 if !a:0 || a:1 ==# -1
|
||||||
|
56 0.000136 return get(b:, 'git_dir', '')
|
||||||
|
elseif type(a:1) == type(0)
|
||||||
|
return getbufvar(a:1, 'git_dir')
|
||||||
|
elseif type(a:1) == type('')
|
||||||
|
return substitute(s:Slash(a:1), '/$', '', '')
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION fugitive#head()
|
||||||
|
Defined: ~/.vim/bundle/vim-fugitive/autoload/fugitive.vim line 4595
|
||||||
|
Called 28 times
|
||||||
|
Total time: 0.004604
|
||||||
|
Self time: 0.000649
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
28 0.000728 0.000261 if empty(s:Dir())
|
||||||
|
return ''
|
||||||
|
28 0.000020 endif
|
||||||
|
|
||||||
|
28 0.003791 0.000303 return fugitive#Head(a:0 ? a:1 : 0)
|
||||||
|
|
||||||
|
FUNCTION MarkdownFold()
|
||||||
|
Defined: /usr/local/Cellar/vim/8.1.1850/share/vim/vim81/ftplugin/markdown.vim line 22
|
||||||
|
Called 2274 times
|
||||||
|
Total time: 10.911360
|
||||||
|
Self time: 10.911360
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
2274 0.004165 let line = getline(v:lnum)
|
||||||
|
|
||||||
|
" Regular headers
|
||||||
|
2274 10.679628 let depth = match(line, '\(^#\+\)\@<=\( .*$\)\@=')
|
||||||
|
2274 0.002726 if depth > 0
|
||||||
|
23 0.000036 return ">" . depth
|
||||||
|
2251 0.001131 endif
|
||||||
|
|
||||||
|
" Setext style headings
|
||||||
|
2251 0.006384 let nextline = getline(v:lnum + 1)
|
||||||
|
2251 0.103738 if (line =~ '^.\+$') && (nextline =~ '^=\+$')
|
||||||
|
return ">1"
|
||||||
|
2251 0.000877 endif
|
||||||
|
|
||||||
|
2251 0.099692 if (line =~ '^.\+$') && (nextline =~ '^-\+$')
|
||||||
|
return ">2"
|
||||||
|
2251 0.000826 endif
|
||||||
|
|
||||||
|
2251 0.001376 return "="
|
||||||
|
|
||||||
|
FUNCTION ModeName()
|
||||||
|
Defined: ~/.vimrc line 217
|
||||||
|
Called 14 times
|
||||||
|
Total time: 0.053255
|
||||||
|
Self time: 0.053255
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
14 0.000040 if a:mode == 'i'
|
||||||
|
5 0.000005 return 'I'
|
||||||
|
9 0.000011 elseif a:mode == 'v'
|
||||||
|
hi User1 ctermbg=202 ctermfg=blue
|
||||||
|
hi User2 ctermbg=215 ctermfg=202
|
||||||
|
hi User3 ctermbg=215 ctermfg=white
|
||||||
|
hi User4 ctermbg=none ctermfg=215
|
||||||
|
hi User5 ctermbg=none ctermfg=202
|
||||||
|
redrawstatus
|
||||||
|
return 'V'
|
||||||
|
9 0.000005 else
|
||||||
|
9 0.000057 hi User1 ctermbg=none ctermfg=33
|
||||||
|
9 0.000058 hi User2 ctermbg=none ctermfg=33
|
||||||
|
9 0.000015 hi User3 ctermbg=none ctermfg=33
|
||||||
|
9 0.000013 hi User4 ctermbg=none ctermfg=33
|
||||||
|
9 0.000015 hi User5 ctermbg=none ctermfg=232
|
||||||
|
9 0.052936 redrawstatus
|
||||||
|
9 0.000012 return 'N'
|
||||||
|
endif
|
||||||
|
|
||||||
|
FUNCTION UpdateStatusBar()
|
||||||
|
Defined: ~/.vimrc line 273
|
||||||
|
Called 6 times
|
||||||
|
Total time: 0.000140
|
||||||
|
Self time: 0.000140
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
6 0.000131 execute 'let &ro = &ro'
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_AllowedToCompleteInCurrentBuffer()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 462
|
||||||
|
Called 26 times
|
||||||
|
Total time: 0.002052
|
||||||
|
Self time: 0.000452
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
26 0.002038 0.000438 return s:AllowedToCompleteInBuffer( '%' )
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnCursorMovedNormalMode()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 693
|
||||||
|
Called 1 time
|
||||||
|
Total time: 0.000079
|
||||||
|
Self time: 0.000018
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
1 0.000078 0.000017 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
1 0.000001 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec s:python_command "ycm_state.OnCursorMoved()"
|
||||||
|
|
||||||
|
FUNCTION <SNR>58_OnInsertChar()
|
||||||
|
Defined: ~/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim line 660
|
||||||
|
Called 19 times
|
||||||
|
Total time: 0.001638
|
||||||
|
Self time: 0.000346
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
19 0.001608 0.000316 if !s:AllowedToCompleteInCurrentBuffer()
|
||||||
|
19 0.000016 return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call timer_stop( s:pollers.completion.id )
|
||||||
|
call s:CloseCompletionMenu()
|
||||||
|
|
||||||
|
FUNCTION InsertStatuslineColor()
|
||||||
|
Defined: ~/.vimrc line 201
|
||||||
|
Called 1 time
|
||||||
|
Total time: 0.000022
|
||||||
|
Self time: 0.000022
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
1 0.000001 if a:mode == 'i'
|
||||||
|
1 0.000007 hi User1 ctermbg=37 ctermfg=black
|
||||||
|
1 0.000002 hi User2 ctermbg=44 ctermfg=37
|
||||||
|
1 0.000002 hi User3 ctermbg=44 ctermfg=white
|
||||||
|
1 0.000002 hi User4 ctermbg=none ctermfg=44
|
||||||
|
1 0.000002 hi User5 ctermbg=none ctermfg=51
|
||||||
|
elseif a:mode == 'r'
|
||||||
|
hi User5 ctermbg=none ctermfg=240
|
||||||
|
elseif a:mode == 'v'
|
||||||
|
hi User5 ctermbg=none ctermfg=240
|
||||||
|
else
|
||||||
|
hi User5 ctermbg=Red ctermfg=240
|
||||||
|
1 0.000000 endif
|
||||||
|
|
||||||
|
FUNCTION ale#ShouldDoNothing()
|
||||||
|
Defined: ~/.vim/bundle/ale/autoload/ale.vim line 25
|
||||||
|
Called 2 times
|
||||||
|
Total time: 0.000013
|
||||||
|
Self time: 0.000013
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
" The checks are split into separate if statements to make it possible to
|
||||||
|
" profile each check individually with Vim's profiling tools.
|
||||||
|
"
|
||||||
|
" Do nothing if ALE is disabled.
|
||||||
|
2 0.000008 if !getbufvar(a:buffer, 'ale_enabled', get(g:, 'ale_enabled', 0))
|
||||||
|
2 0.000002 return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't perform any checks when newer NeoVim versions are exiting.
|
||||||
|
if get(v:, 'exiting', v:null) isnot v:null
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:filetype = getbufvar(a:buffer, '&filetype')
|
||||||
|
|
||||||
|
" Do nothing when there's no filetype.
|
||||||
|
if l:filetype is# ''
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing for diff buffers.
|
||||||
|
if getbufvar(a:buffer, '&diff')
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing for blacklisted files.
|
||||||
|
if index(get(g:, 'ale_filetype_blacklist', []), l:filetype) >= 0
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing if running from command mode.
|
||||||
|
if s:getcmdwintype_exists && !empty(getcmdwintype())
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:filename = fnamemodify(bufname(a:buffer), ':t')
|
||||||
|
|
||||||
|
" Do nothing for directories.
|
||||||
|
if l:filename is# '.'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't start linting and so on when an operator is pending.
|
||||||
|
if ale#util#Mode(1) is# 'no'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing if running in the sandbox.
|
||||||
|
if ale#util#InSandbox()
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing if the file is too large.
|
||||||
|
if ale#FileTooLarge(a:buffer)
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Do nothing from CtrlP buffers with CtrlP-funky.
|
||||||
|
if exists(':CtrlPFunky') is 2&& getbufvar(a:buffer, '&l:statusline') =~# 'CtrlPMode.*funky'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
FUNCTION <SNR>55_Dir()
|
||||||
|
Defined: ~/.vim/bundle/vim-fugitive/autoload/fugitive.vim line 225
|
||||||
|
Called 56 times
|
||||||
|
Total time: 0.000840
|
||||||
|
Self time: 0.000614
|
||||||
|
|
||||||
|
count total (s) self (s)
|
||||||
|
56 0.000825 0.000599 return a:0 ? FugitiveGitDir(a:1) : FugitiveGitDir()
|
||||||
|
|
||||||
|
FUNCTIONS SORTED ON TOTAL TIME
|
||||||
|
count total (s) self (s) function
|
||||||
|
2274 10.911360 MarkdownFold()
|
||||||
|
14 0.053255 ModeName()
|
||||||
|
28 0.004604 0.000649 fugitive#head()
|
||||||
|
28 0.003488 0.003115 fugitive#Head()
|
||||||
|
26 0.002052 0.000452 <SNR>58_AllowedToCompleteInCurrentBuffer()
|
||||||
|
19 0.001638 0.000346 <SNR>58_OnInsertChar()
|
||||||
|
26 0.001600 0.001470 <SNR>58_AllowedToCompleteInBuffer()
|
||||||
|
6 0.000998 <SNR>32_Highlight_Matching_Pair()
|
||||||
|
14 0.000888 ActiveStatus()
|
||||||
|
56 0.000840 0.000614 <SNR>55_Dir()
|
||||||
|
2 0.000502 0.000069 <SNR>58_OnTextChangedInsertMode()
|
||||||
|
56 0.000226 FugitiveGitDir()
|
||||||
|
2 0.000176 0.000038 <SNR>58_OnDeleteChar()
|
||||||
|
6 0.000140 UpdateStatusBar()
|
||||||
|
26 0.000130 <SNR>58_DisableOnLargeFile()
|
||||||
|
1 0.000090 0.000019 <SNR>58_OnInsertLeave()
|
||||||
|
1 0.000079 0.000018 <SNR>58_OnCursorMovedNormalMode()
|
||||||
|
1 0.000076 0.000019 <SNR>58_OnTextChangedNormalMode()
|
||||||
|
2 0.000073 0.000060 ale#Queue()
|
||||||
|
1 0.000022 InsertStatuslineColor()
|
||||||
|
|
||||||
|
FUNCTIONS SORTED ON SELF TIME
|
||||||
|
count total (s) self (s) function
|
||||||
|
2274 10.911360 MarkdownFold()
|
||||||
|
14 0.053255 ModeName()
|
||||||
|
28 0.003488 0.003115 fugitive#Head()
|
||||||
|
26 0.001600 0.001470 <SNR>58_AllowedToCompleteInBuffer()
|
||||||
|
6 0.000998 <SNR>32_Highlight_Matching_Pair()
|
||||||
|
14 0.000888 ActiveStatus()
|
||||||
|
28 0.004604 0.000649 fugitive#head()
|
||||||
|
56 0.000840 0.000614 <SNR>55_Dir()
|
||||||
|
26 0.002052 0.000452 <SNR>58_AllowedToCompleteInCurrentBuffer()
|
||||||
|
19 0.001638 0.000346 <SNR>58_OnInsertChar()
|
||||||
|
56 0.000226 FugitiveGitDir()
|
||||||
|
6 0.000140 UpdateStatusBar()
|
||||||
|
26 0.000130 <SNR>58_DisableOnLargeFile()
|
||||||
|
2 0.000502 0.000069 <SNR>58_OnTextChangedInsertMode()
|
||||||
|
2 0.000073 0.000060 ale#Queue()
|
||||||
|
2 0.000176 0.000038 <SNR>58_OnDeleteChar()
|
||||||
|
1 0.000022 InsertStatuslineColor()
|
||||||
|
1 0.000076 0.000019 <SNR>58_OnTextChangedNormalMode()
|
||||||
|
1 0.000090 0.000019 <SNR>58_OnInsertLeave()
|
||||||
|
1 0.000019 ale#Var()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue