| Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
|---|---|---|---|---|
| gems/gems/dm-paperclip-2.1.4/lib/dm-paperclip/attachment.rb | 324 | 235 | 52.78%
|
42.55%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 module Paperclip |
2 # The Attachment class manages the files for a given attachment. It saves when the model saves, |
3 # deletes when the model is destroyed, and processes the file upon assignment. |
4 class Attachment |
5 |
6 def self.default_options |
7 @default_options ||= { |
8 :url => "/:attachment/:id/:style/:basename.:extension", |
9 :path => ":merb_root/public/:attachment/:id/:style/:basename.:extension", |
10 :styles => {}, |
11 :default_url => "/:attachment/:style/missing.png", |
12 :default_style => :original, |
13 :validations => [], |
14 :storage => :filesystem |
15 } |
16 end |
17 |
18 attr_reader :name, :instance, :styles, :default_style, :convert_options |
19 |
20 # Creates an Attachment object. +name+ is the name of the attachment, +instance+ is the |
21 # ActiveRecord object instance it's attached to, and +options+ is the same as the hash |
22 # passed to +has_attached_file+. |
23 def initialize name, instance, options = {} |
24 @name = name |
25 @instance = instance |
26 |
27 options = self.class.default_options.merge(options) |
28 |
29 @url = options[:url] |
30 @path = options[:path] |
31 @styles = options[:styles] |
32 @default_url = options[:default_url] |
33 @validations = options[:validations] |
34 @default_style = options[:default_style] |
35 @storage = options[:storage] |
36 @whiny_thumbnails = options[:whiny_thumbnails] |
37 @convert_options = options[:convert_options] || {} |
38 @options = options |
39 @queued_for_delete = [] |
40 @queued_for_write = {} |
41 @errors = [] |
42 @validation_errors = nil |
43 @dirty = false |
44 |
45 normalize_style_definition |
46 initialize_storage |
47 |
48 #logger.info("[paperclip] Paperclip attachment #{name} on #{instance.class} initialized.") |
49 end |
50 |
51 # What gets called when you call instance.attachment = File. It clears errors, |
52 # assigns attributes, processes the file, and runs validations. It also queues up |
53 # the previous file for deletion, to be flushed away on #save of its host. |
54 # In addition to form uploads, you can also assign another Paperclip attachment: |
55 # new_user.avatar = old_user.avatar |
56 def assign uploaded_file |
57 if uploaded_file.is_a?(Paperclip::Attachment) |
58 uploaded_file = uploaded_file.to_file(:original) |
59 end |
60 |
61 return nil unless valid_assignment?(uploaded_file) |
62 #logger.info("[paperclip] Assigning #{uploaded_file.inspect} to #{name}") |
63 |
64 queue_existing_for_delete |
65 @errors = [] |
66 @validation_errors = nil |
67 |
68 return nil if uploaded_file.nil? |
69 |
70 #logger.info("[paperclip] Writing attributes for #{name}") |
71 newvals = {} |
72 if uploaded_file.is_a?(Mash) |
73 @queued_for_write[:original] = uploaded_file['tempfile'] |
74 newvals = { :"#{@name}_file_name" => uploaded_file['filename'].strip.gsub(/[^\w\d\.\-]+/, '_'), |
75 :"#{@name}_content_type" => uploaded_file['content_type'].strip, |
76 :"#{@name}_file_size" => uploaded_file['size'], |
77 :"#{@name}_updated_at" => Time.now } |
78 else |
79 @queued_for_write[:original] = uploaded_file.to_tempfile |
80 newvals = { :"#{@name}_file_name" => uploaded_file.original_filename.strip.gsub(/[^\w\d\.\-]+/, '_'), |
81 :"#{@name}_content_type" => uploaded_file.content_type.strip, |
82 :"#{@name}_file_size" => uploaded_file.size, |
83 :"#{@name}_updated_at" => Time.now } |
84 end |
85 |
86 post_process |
87 @dirty = true |
88 |
89 # Reset the file size if the original file was reprocessed. |
90 #newvals[:"#{@name}_file_size"] = uploaded_file.size.to_i |
91 if @styles[:original] |
92 newvals[:"#{@name}_file_size"] = @queued_for_write[:original].size.to_i |
93 end |
94 |
95 begin |
96 @instance.attributes = newvals |
97 rescue NameError |
98 raise PaperclipError, "There was an error processing this attachment" |
99 end |
100 ensure |
101 validate |
102 end |
103 |
104 # Returns the public URL of the attachment, with a given style. Note that this |
105 # does not necessarily need to point to a file that your web server can access |
106 # and can point to an action in your app, if you need fine grained security. |
107 # This is not recommended if you don't need the security, however, for |
108 # performance reasons. |
109 def url style = default_style |
110 url = original_filename.nil? ? interpolate(@default_url, style) : interpolate(@url, style) |
111 updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url |
112 end |
113 |
114 # Returns the path of the attachment as defined by the :path option. If the |
115 # file is stored in the filesystem the path refers to the path of the file on |
116 # disk. If the file is stored in S3, the path is the "key" part of the URL, |
117 # and the :bucket option refers to the S3 bucket. |
118 def path style = nil #:nodoc: |
119 interpolate(@path, style) |
120 end |
121 |
122 # Alias to +url+ |
123 def to_s style = nil |
124 url(style) |
125 end |
126 |
127 # Returns true if there are no errors on this attachment. |
128 def valid? |
129 @errors.length == 0 |
130 end |
131 |
132 # Returns an array containing the errors on this attachment. |
133 def errors |
134 @errors.compact.uniq |
135 end |
136 |
137 # Returns true if there are changes that need to be saved. |
138 def dirty? |
139 @dirty |
140 end |
141 |
142 # Saves the file, if there are no errors. If there are, it flushes them to |
143 # the instance's errors and returns false, cancelling the save. |
144 def save |
145 if valid? |
146 #logger.info("[paperclip] Saving files for #{name}") |
147 flush_deletes |
148 flush_writes |
149 @dirty = false |
150 true |
151 else |
152 #logger.info("[paperclip] Errors on #{name}. Not saving.") |
153 flush_errors |
154 false |
155 end |
156 end |
157 |
158 # Returns the name of the file as originally assigned, and as lives in the |
159 # <attachment>_file_name attribute of the model. |
160 def original_filename |
161 begin |
162 @instance.attribute_get(:"#{name}_file_name") |
163 rescue ArgumentError |
164 nil |
165 end |
166 end |
167 |
168 def updated_at |
169 time = @instance.attribute_get(:"#{name}_updated_at") |
170 time && "#{time.year}#{time.month}#{time.day}#{time.hour}#{time.min}#{time.sec}" |
171 end |
172 |
173 # A hash of procs that are run during the interpolation of a path or url. |
174 # A variable of the format :name will be replaced with the return value of |
175 # the proc named ":name". Each lambda takes the attachment and the current |
176 # style as arguments. This hash can be added to with your own proc if |
177 # necessary. |
178 def self.interpolations |
179 @interpolations ||= { |
180 :merb_root => lambda{|attachment,style| Merb.root }, |
181 :merb_env => lambda{|attachment,style| Merb.env }, |
182 :class => lambda do |attachment,style| |
183 underscore(attachment.instance.class.name.pluralize) |
184 end, |
185 :basename => lambda do |attachment,style| |
186 attachment.original_filename.gsub(File.extname(attachment.original_filename), "") |
187 end, |
188 :extension => lambda do |attachment,style| |
189 ((style = attachment.styles[style]) && style.last) || |
190 File.extname(attachment.original_filename).gsub(/^\.+/, "") |
191 end, |
192 :id => lambda{|attachment,style| attachment.instance.id }, |
193 :id_partition => lambda do |attachment, style| |
194 ("%09d" % attachment.instance.id).scan(/\d{3}/).join("/") |
195 end, |
196 :attachment => lambda{|attachment,style| attachment.name.to_s.downcase.pluralize }, |
197 :style => lambda{|attachment,style| style || attachment.default_style }, |
198 } |
199 end |
200 |
201 # This method really shouldn't be called that often. It's expected use is in the |
202 # paperclip:refresh rake task and that's it. It will regenerate all thumbnails |
203 # forcefully, by reobtaining the original file and going through the post-process |
204 # again. |
205 def reprocess! |
206 new_original = Tempfile.new("paperclip-reprocess") |
207 if old_original = to_file(:original) |
208 new_original.write( old_original.read ) |
209 new_original.rewind |
210 |
211 @queued_for_write = { :original => new_original } |
212 post_process |
213 |
214 old_original.close if old_original.respond_to?(:close) |
215 |
216 save |
217 else |
218 true |
219 end |
220 end |
221 |
222 def file? |
223 !original_filename.blank? |
224 end |
225 |
226 private |
227 |
228 def self.underscore(camel_cased_word) |
229 camel_cased_word.to_s.gsub(/::/, '/'). |
230 gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). |
231 gsub(/([a-z\d])([A-Z])/,'\1_\2'). |
232 tr("-", "_"). |
233 downcase |
234 end |
235 |
236 def logger |
237 instance.logger |
238 end |
239 |
240 def valid_assignment? file #:nodoc: |
241 return true if file.nil? |
242 if(file.is_a?(File)) |
243 (file.respond_to?(:original_filename) && file.respond_to?(:content_type)) |
244 elsif(file.is_a?(Mash)) |
245 (file.include?('tempfile') && file.include?('content_type') && file.include?('size') && file.include?('filename')) |
246 end |
247 end |
248 |
249 def validate #:nodoc: |
250 unless @validation_errors |
251 @validation_errors = @validations.collect do |v| |
252 v.call(self, @instance) |
253 end.flatten.compact.uniq |
254 @errors += @validation_errors |
255 end |
256 @validation_errors |
257 end |
258 |
259 def normalize_style_definition |
260 @styles.each do |name, args| |
261 dimensions, format = [args, nil].flatten[0..1] |
262 format = nil if format == "" |
263 @styles[name] = [dimensions, format] |
264 end |
265 end |
266 |
267 def initialize_storage |
268 @storage_module =<EMAIL_ADDRESS>|
269 self.extend(@storage_module) |
270 end |
271 |
272 def extra_options_for(style) #:nodoc: |
273 [ convert_options[style], convert_options[:all] ].compact.join(" ") |
274 end |
275 |
276 def post_process #:nodoc: |
277 return if @queued_for_write[:original].nil? |
278 #logger.info("[paperclip] Post-processing #{name}") |
279 @styles.each do |name, args| |
280 begin |
281 dimensions, format = args |
282 dimensions = dimensions.call(instance) if dimensions.respond_to? :call |
283 @queued_for_write[name] = Thumbnail.make(@queued_for_write[:original], |
284 dimensions, |
285 format, |
286 extra_options_for(name), |
287 @whiny_thumnails) |
288 rescue PaperclipError => e |
289 @errors << e.message if @whiny_thumbnails |
290 end |
291 end |
292 end |
293 |
294 def interpolate pattern, style = default_style #:nodoc: |
295 interpolations = self.class.interpolations.sort{|a,b| a.first.to_s <=> b.first.to_s } |
296 interpolations.reverse.inject( pattern.dup ) do |result, interpolation| |
297 tag, blk = interpolation |
298 result.gsub(/:#{tag}/) do |match| |
299 blk.call( self, style ) |
300 end |
301 end |
302 end |
303 |
304 def queue_existing_for_delete #:nodoc: |
305 return unless file? |
306 #logger.info("[paperclip] Queueing the existing files for #{name} for deletion.") |
307 @queued_for_delete += [:original<EMAIL_ADDRESS>do |style| |
308 path(style) if exists?(style) |
309 end.compact |
310 newvals = { :"#{@name}_file_name" => nil, |
311 :"#{@name}_content_type" => nil, |
312 :"#{@name}_file_size" => nil } |
313 @instance.attributes = newvals |
314 end |
315 |
316 def flush_errors #:nodoc: |
317 @errors.each do |error| |
318 @instance.errors.add(name, error) |
319 end |
320 end |
321 |
322 end |
323 end |
324 |
Generated on Thu Nov 12 16:05:07 +0530 2009 with rcov 0.9.6


Felipe Ferrari, Daniel Prata, Henrique Gaspar
Ship Design and Operations Lab
Department of Ocean Operations and Civil Engineering - NTNU (Aalesund, Norway)
Scale of Elements
A simulation using Vessel.js library - November, 2019.


| Role | Data Scientist Intern |
| Period | June, 2017 - December, 2017 (6 months) |
| Platform | Microsoft Azure |
| Fields I worked on | Data Science, Machine Learning, Big Data, Databases |
| Technologies | Databases - Azure SQL DB and CosmosDB (DocumentDB), d3 Javascript framework, Python scripts, Apache Spark, Azure Time Series Insights |


Design Monthly
Free
Work faster with our free design resource and monthly packages.
Sign Up
Our resources are crafted in-house by our talented team of designers from various backgroud.


Spy or Not?
About
Browser Test:
HTML5
Audio
Slider
LocalStorage
✘
✔
✘
✘
Welcome to the Spy Game! Please select the place where you grew up:
Russia
Sussex England
South Africa
Loading...
[This browser cannot play HTML5 audio files!]


September
- When you write or e-mail colleges
that interest you, ask for financial aid info, including what forms to file
and
their due dates. Put this data on your calendar and to-do list. Note:
- All colleges ask you to fill out the FAFSA (Free Application
for Federal Student Aid) not just for grants/scholarships, but also for college
loans. See November.
- Some colleges require the
CSS/Financial Aid PROFILE. Click on the Pay for College link at collegeboard.com
and fill out the application online. You can register as early as October 1.
Please
be sure to update College and Retirement Solutionsí information section when you
know what schools you are applying to and what forms are needed. These forms will
not be filed on time if you do not report this to us.
- Ask if your colleges require
their own aid forms, too.
- If you plan to apply for Early
Decision, ask whether your college offers an early estimate of financial aid eligibility
and which forms to file.
October
- Research opportunities using
your library, financial aid guidebooks, and Web sites, including Scholarship Search
on collegeboard.com. Your counselors may have other resources, too. Look for the
following:
- federal financial aid sources;
- private scholarships;
- state and local programs;
or
- scholarships, including
merit and departmental scholarships, offered by colleges to which youíll apply.
Reference materials include books (College Board Scholarship Handbook) and search
engines (e.g., collegeboard.com);
both report on national sources of aid. For local
and state aid sources (often overlooked!), see your counselor and the public library.
- Begin work on aid applications.
Private scholarship programs may have very early deadlines. Contact our office for
any questions that you may have or call our hotline at<PHONE_NUMBER>
November
- The Free Application for Federal
Student Aid (FAFSA) will be available in school and at www.fafsa.ed.gov. It canít
be submitted before January 1.
- Visit www.pin.ed.gov and get
a personal identification number (PIN). You will need a PIN to use as an electronic
signature if you complete the FAFSA online at
www.fafsa.ed.gov (not at www.fafsa.com).
December
- You and your family may want
to save final pay stubs for the year. On aid forms that youíll file early in the
new year use the stubs to estimate income.
- Set up your tracking worksheet
to follow up on who you have heard from.
January
- Submit your FAFSA as soon as
you can after (but not before) January 1. Men 18 or older must register for the
Selective Service to receive federal financial aid. To register, complete a check-off
box on your FAFSA, or register at any post office.
February
- Parents and students are encouraged
to complete and file income tax returns as soon as possible. Colleges may request
copies of your tax returns to finalize aid offers.
March
- As you receive letters of acceptance,
check with aid offices to see if additional documentation must be submitted. Some
colleges may request copies of your familyís income tax forms, W-2 forms, and other
materials.
April
- Use the online Compare Your
Aid Awards tool at collegeboard.com to help you understand and compare financial
aid award offers from two or more colleges. Talk with financial aid officers if
you have questions. If you get no aid (or not enough), ask whether other financing
plans are available.
May
- If youíve been offered aid from
your chosen college, be sure to accept the offer as instructed in your award letter.
If you have received an award from a comparable school that is of greater financial
value, let the school of your choice know this and they may provide more aid to
your student in order to compel them to attend their school. Speak to your college
advisor at College and Retirement Solutions to discuss the appropriate strategy
on identifying the right talking points for this appeal or leveraging opportunity
(Note: Youíll need to reapply for financial aid every year.)
- If youíve received aid from
other schools, let them know that you wonít be attending.
Source: College
Counseling Sourcebook, 4th Edition
|
|
If investment, financial,
mortgage or insurance planning and/or products are required, College and Retirement
Solutions, LLC may refer you to one of its affiliates, including The Ziering Insurance
Agency. Any discussion of the Tax implications of planning is strictly for general
purposes. Neither "CRS" nor its representatives may give specific tax advice. One
should seek the advice and counsel of their accountant and/or tax advisor for information
regarding their particular situation. |


To re-write rules and break down barriers, creating amazing opportunities for those who need it most through
positive disruption, meaningful impact & measurable change.
To find a career with a socially conscious company who I feel great about working for.
In March of 2018 I participated in Go Code Colorado, an annual competition that challenges multidisciplinary teams to turn public data into useful business insights and tools. Go Code Colorado is the first and only statewide effort of its kind. I had a great time and am planning on attending in 2019.
Since 2016, I have been working as a part of the Humanitarian OpenStreetMap Team to improve the quality of the geospatial data and remote mapping in Botswana.The improved geospatial data allows the Botswana Ministry of Health and Wellness to continue their fight against malaria.
Every February I participate in the Cupid’s Undie Run, a “brief” fun run fundraiser to find a cure to Neurofibromatosis, a genetic disorder that affects 1 in every 3,000 children born. 2018 was my fourth year running.
In 2017 I volunteered more than 100 hours as an assistant zookeeper at the Denver Zoo. As an assistant primate keeper my responsibilities included preparing specialized diets for all the animals in the Enchanted Forest building. I also conducted ethogram observations of specific animals on a regular basis.


Survey Form
Let us know how we can improve
* Name
* Email
* Age
Which option best describes your current role?
Select an option
Student
Full Time Job
Full Time Learner
Prefer not to say
Other
* How likely is that you would recommend freeCodeCamp to a friend?
Definitely
Maybe
Not sure
What do you like most in FCC:
Select an option
Challenges
Projects
Community
Open Source
Things that should be improved in the future (Check all that apply):
Front-end Projects
Back-end Projects
Data Visualization
Challenges
Open Source Community
Gitter help rooms
Videos
City Meetups
Wiki
Forum
Additional Courses
Any Comments or Suggestions?
Submit


 It was predictable, shallow and uneven, but I like that Michelle Pfeiffer, even if she was horribly miscast in the role of a tough teacher who wins over a class of gangstas.
Michelle Pfeiffer arrives for her new job teaching an English class for "special" students to find out they're not the geniuses she hoped they'd be but rather the exact same class from SISTER ACT 2 (Or didn't you notice?) of aspiring rappers, pregnant girls and sleepers, a real public high school cross-section.
Still, she determines to make them learn by taking them all to the amusement park (What better place to learn about Shakespeare, right? "Forsooth! Methinks I see The Nauseator up ahead forwith. I will tame the savage beast or spew out chasms of chunder for a fortnight in the attempt! Zounds!") and giving out candy bars to students with correct answers. No teacher I've ever had has gone that far to encourage learning, although my third grade teacher used to buy those packages of stale wafer-thin butter cookies that come in boxes of 300 and sit in the factory until all hint of freshness and taste is sucked out, then sit on the supermarket shelf another few months and years until some woman on a teacher's salary comes in and decides she's gonna get her kids to learn even if it means spending that 99 cents on the 300 cookies. And it worked because, hey, we were kids, what did we know?
So slowly Pfeiffer's students warm up to the bribes and get high on learning (higher learning, right? Wrong! Different movie!), as we all knew they would. And then, about three-fourths of the way through, when it seems like all is going right for Michelle and her young charges, we get the age-old contrived conflict, just as we knew we would. Here, one of the students is needlessly axed just to further the plot and teach a valuable lesson--always remember to knock. If you've seen the movie, you know what I'm talking about. If you haven't, that leaves the other option.
Surely from reading this review, you see the myriad flaws both with DANGEROUS MINDS and my writing (I'm asking you to ignore the flaws in the writing.), but perhaps you'll see the movie anyway and fall prey, as I did, to the false sentiment and manufactured poignancy. I saw right through many other recent bad dramas along these lines (WITH HONORS, THE PROFESSIONAL) but DANGEROUS MINDS somehow got to me. I guess it's dangerous to let a movie like that get into your mind, but oh well.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


I earned a Master’s in Computer Science concentrated in AI and machine learning from Fordham University, which I attended from August 2018 - May 2020, and I am seeking a full-time software engineering role. I have 4+ years of experience coding in Python (including tools like Pandas and scikit-learn), C#, and C++. I have 2+ years of experience coding in Java and SQL. And, I've recently picked up JavaScript and ReactJS.
At Fordham, I was a Graduate Research Assistant for Professor Md. Ruhul Amin, Professor Ying Mao, and Professor Truong-Huy Nguyen. I was also lucky to have Professor Frank Hsu advise my Master's Thesis. As a graduate research assistant in the Department of Computer and Information Science, I completed three major research projects in gaming, cloud computing, and natural language processing.
From July 2017 - September 2019, I worked at Boyce Technologies where I started as a technical writing intern before joining the robotics team as the lead researcher, programmer, and system architect. During my time on the robotics team, I had the privilege to have Ajmal Aqtash as my mentor and friend.
MS in Computer Science, 2020
Fordham University
BA in English, 2017
University of Michigan
Used Python and state-of-the-art data mining and machine learning techniques to develop language models that predict and interpret a novel’s success based on its contents.
Developed with C# and Python. Demonstrated that combinatorial fusion analysis can effectively predict winners and enhance play strategy of Blizzard Entertainment’s collectible card game Hearthstone.
Developed a system with Python that monitors loss functions of machine learning and deep learning jobs at runtime to elastically make decisions on resource configuration.
Built with Python. Analyzes results of Autism indicator surveys to build an ensemble classifier. Final model combines Random Forest, K-Neighbors, and a Linear SVM to predict if the results of a completed survey indicates Autism.
Built in Python. A knowledge base implementation of an AI agent to play the Wumpus World game (example).
My first real experience with machine learning in Python. I attempted to predict an NFL player's success based on his collegiate performance. I scraped Pro Football Reference and College Football Reference to build my own SQL database of ~2,500 pro/college football players drafted into the NFL from 2004-2015. Then, I used a Decision Tree classifier to predict a college player's draft position based on his collegiate stats.
My first Python project. A procedural song lyric generator that uses a webscraped database to produce rhyming, original lyrics written in the style of Coldplay.


mime-types-data¶ ↑
Description¶ ↑
mime-types-data provides a registry for information about MIME media type definitions. It can be used with the Ruby mime-types library or other software to determine defined filename extensions for MIME types, or to use filename extensions to look up the likely MIME type definitions.
About MIME Media Types¶ ↑
MIME media types are used in MIME-compliant communications, as in e-mail or HTTP traffic, to indicate the type of content which is transmitted. The registry provided in mime-types-data contains detailed information about MIME entities. There are many types defined by RFCs and vendors, so the list is long but invariably; don't hesitate to offer additional type definitions for consideration. MIME type definitions found in mime-types are from RFCs, W3C recommendations, the IANA Media Types registry, and user contributions. It conforms to RFCs 2045 and 2231.
Data Formats Supported in this Registry¶ ↑
This registry contains the MIME media types in three formats:
-
A YAML format matching the Ruby mime-types library objects (MIME::Type). This is the primary user-editable format.
-
A JSON format converted from the YAML format. Prior to Ruby mime-types 3.0, this was the main consumption format and is still recommended for any implementation that does not wish to implement the columnar format.
-
An encoded text format splitting the data for each MIME type across multiple files. This columnar data format reduces the minimal data load substantially, resulting in a performance improvement at the cost of more complex code for loading the data on-demand. This is the default format for Ruby mime-types 3.0.
mime-types-data Modified Semantic Versioning¶ ↑
mime-types-data uses a heavily modified Semantic Versioning scheme to indicate that
the data formats compatibility based on a SCHEMA
version and
the date of the data update: SCHEMA.YEAR.MONTHDAY
.
-
If an incompatible data format change is made to any of the supported formts,
SCHEMA
will be incremented. The currentSCHEMA
is 3, supporting the YAML, JSON, and columnar formats required for Ruby mime-types 3.0. -
When the data is updated, the
YEAR.MONTHDAY
combination will be updated. An update on the last day of October 2015 would be written as2015.1031
, resulting in the full version of3.2015.1031
. -
If multiple versions of the data need to be released on the same day due to error, there will be an additional
REVISION
field incremented on the end of the version. Thus, if three revisions need to be published on October 31st, 2015, the last release would be3.2015.1031.2
(remember that the first release has an implied0
.)


This is bold tag.
This is italic.
This is a underline tag.
The style is attribute of paragraph tag
The element contains
| First_Nmae |
Last_Name |
Marks |
| Sonoo |
Jaiswal |
60 |
| James |
bond |
80 |
| Ram |
narayan |
90 |
| Shyam |
jain |
70 |


Trees are all around us. Forests are one of the most biodiverse environments on earth. Let your spirit free and reconnect with nature on one of our adventure tours.
We have tour packages for every level of your adventure and awakening. No matter if you have never retreated into nature before or it is a regular outing, we have a package for you.
For the newbie, we offer guided tours out into the wilderness. Our guides know all the secrets of the forest so you may see plenty of things you may have missed otherwise.
A bike more your speed? Check out our bike trail tours. We'll provide state-of-art mountain bikes and lunch is on us!
Ever wanted to take nature home with you? Now you can with our photo ops tours! These tours take you to all the best spots for picturesque scenery. Don't forget to take a selfie with a tree.
With our bus tours, you can get the full experience of being deep in the woods without ever leaving your seat. Leaving the navigation to us!.
This was the experince of a lifetime. I've always thought a wilderness excursion would help me disconnect but I never imagined I would enjoy it so much.
The bus tour was so nice. I got to see everything and never even had to get off the bus. Although I couldn't help but have my faced pressed to window most of the time!
I'm an avid wilderness explorer and absolutely love nature so the photo op tour was right up my alley. I snapped a few shots of the forest that were enough to bring me to tears.
Your next adventure starts here


Tutorial 16 - Review and Commenting
When going through Maqetta's tutorials, it is suggested that you have two side-by-side
browser windows open, one showing the tutorial, and the other where you run the application
and perform the steps listed in the tutorial.
This tutorial introduces Maqetta review and commenting feature,
where an author can share his sketch or prototype with colleagues,
who can then provide feedback via forum-style comments
and/or on-screen annotations.
This tutorial requires that you have completed some of the previous tutorials
and that you have saved one of the following files in your current project:
TutorialSketch.html, TutorialMobile.html and/or TutorialDesktop.html.
Create a Review
- ⇒
On the main menubar, choose the Create -> Review... command.
The following dialog should appear:
Click on the image to enlarge it.
As you can see, the New Review dialog is a 3-pane wizard. In the first pane,
you enter general information about the review session.
- ⇒
Enter "Tutorial review 1" as the title of your review,
and enter some text such as "Trying out Maqetta review/commenting tutorial" in the Description field.
We will accept default values for Window Size and Due Date for the time being.
- ⇒
Click on the "Next" button to go to the Select Review Files pane:
Click on the image to enlarge it.
- ⇒
Notice the red-colored text in the lower-left corner of the dialog:
"No files selected yet"
- ⇒
Click-select one of the tutorial files you created in previous tutorial sessions
(either TutorialSketch.html, TutorialMobile.html or TutorialDesktop.html).
Then click on the right arrow icon so that the selected files shows up in the
right-side list. Your screen should now look like this:
Click on the image to enlarge it.
Notice that the red-colored comment at the lower-left of the dialog has changed and now says
"No reviewers selected yet" because you have now selected at least one file.
Note that you can also add files to the right-side list by double-clicking on the filename from
the left-side list.
The current release of Maqetta only supports review/commenting on HTML files
that were created in Maqetta. Future releases might allow review/commenting
of other file types, such as images, SVG files, source files or themes.
- ⇒
Click on the "Next" button to go to the Select Reviewers pane:
Click on the image to enlarge it.
- ⇒
This is the pane where you list the emails of your colleagues that you want
to review and provide feedback on your sketch or prototype.
For this tutorial, you will only invite yourself: enter your email address
into the type-in field and then click the "Add" button:
Click on the image to enlarge it.
Notice that the red-colored comment at the lower-left of the dialog has disappeared
because you have now selected at least one file and at least one reviewer.
- ⇒
Click on the "Publish" button to send review invitations to all of the reviewers
(which in this case is just yourself).
What happens next depends on the installation of Maqetta that you are using.
If you are running Maqetta at Maqetta.org or off of another server which is email-enabled,
then a review invitation email will be sent to your email address.
Subject: Maqetta Review Invitation: Tutorial review 1
<EMAIL_ADDRESS>has invited you to review the page.
Description: Trying out Maqetta review/commenting tutorial
Click on the Review Link below to enter Maqetta's review and commenting module. If you haven't registered yet with Maqetta and/or are not currently logged into Maqetta, you may need to go through a registration and/or sign-in process before you can start reviewing. If so, you may need to click on the Review Link below once to go to the login and/or registration pages, and then once logged in, you may need to click on the Review Link again.
Review Link:
http://yourserver/maqetta?reviewDesigner=B&reviewVersion=2012-11-09T22:23:01Z
Reviewers will receive an email invitation, and then can simply click on the link in the email.
Maqetta will open up in a browser window, and (after potentially registering and/or logging into the server)
the reviewer can start adding review comments to the sketch or prototype.
Note, however, if you are running
a local install of Maqetta or running off a server that is not email-enabled,
then the review invitation email will not be sent and Maqetta will post
a warning dialog, which is OK for the purposes of this tutorial.
Click on the image to enlarge it.
- ⇒
Note that, after you clicked "Publish", Maqetta has opened a "review editor" so that
you can will see the same thing that your reviewers will see when they click on the email link.
- ⇒
Click on the review editor's close button -
- to close the review editor.
Reviews palette and opening existing reviews
- ⇒
Click on the large "Reviews" icon on the far left of the application
to expose the Reviews palette. This palette shows the list of review
sessions which either you initiated or to which you have been invited.
You should see the review session you just created.
Click on the "+" icon to the left of the review session to expand its content
so that the HTML file(s) from the review session are visible.
Click on the image to enlarge it.
- ⇒
Double-click on the HTML file (e.g., TutorialSketch.html) to open the review editor for that file.
Your screen should look something like this:
Click on the image to enlarge it.
Note the various parts of review editors:
- The center of the screen contains the sketch or prototype on which the author is requesting feedback.
- The yellow bar at the top reminds reviewers that the HTML page shown on the canvas
is a live application that actually runs, and that the review can interact with
the page either by using the mouse and keyboard on the canvas. They can also
switch between application states or mobile views using the Scenes palette.
(We'll try these features out subsequently in this tutorial.)
- The Comments palette at the top is where reviewers can provide textual feedback
and/or graphical annotations on the canvas.
- The Scenes palette allows reviewers to step through any of the HTML page's
custom application states and/or mobile views.
Interacting with the page
Reviewers can interact with the HTML page in two ways:
- They can actually run the application directly on the canvas (e.g., click on buttons).
- They can switch states and mobile views in the Scenes palette.
- ⇒
Try interacting with the application directly on the canvas.
If your review session is TutorialSketch.html, click on the "Show dialog" button,
the radio buttons and the Close box. Notice how the application is actually running.
But also notice that as you click on things on the canvas, the eyeball in the Scenes
palette changes.
Maqetta's review/commenting feature makes sure that the canvas and the Scenes
palette reflect the same value for current application state.
- ⇒
Now click on different states (or mobile views) in the Scenes palette.
Notice that the canvas changes as you walk through the various states (or mobile views).
Adding review comments and annotations
Now we will add some review comments and annotations.
- ⇒
In the Scenes palette, make sure that the initial state or mobile view is showing.
(For TutorialSketch.html, that would be the Background state).
- ⇒
Click on the "+" icon at the top of the Comments palette.
The Comments palette should look like this:
Click on the image to enlarge it.
- ⇒
Enter "Nice UI!" as the Subject and "but a little sparse" in the Comment area.
Then click "Submit". Your screen should look like this:
A review comment is not added to the review until the user clicks "Submit".
Your screen should now look like this:
Click on the image to enlarge it.
Note the following things:
- Each comment shows the reviewer who submitted the comment.
- Comments (and annotations) are color-coded. Each reviewer gets his own color.
- ⇒
Click on the "+" icon again at the top of the Comments palette.
For Subject, enter "What do these two buttons do?".
(Don't click Submit yet.)
- ⇒
Click on the arrow icon on the toolbar just above the "Subject" line.
Go to the canvas and drag out an arrow that goes from the middle of the canvas
to the "Second button" button. Then click on the rectangle icon on the same toolbar
and drag out a rectangle that surrounds both the "Second button" button and
the "Third button" button.
Finally, click on the text icon on the same toolbar.
Drag out a rectangle about 70px by 70px at the bottom of the arrow.
In the text box, enter "what are these for?" Your canvas should look something like this:
Click on the image to enlarge it.
- ⇒
Now click on the Submit button.
State-specific comments and annotations
- ⇒
In the Scenes palette, click on the "Show image" state. The Rectangle with its children
(e.g., Line, Text, RadioButtons, Close icon and Image) should become visible.
- ⇒
Click on the "+" icon again at the top of the Comments palette.
For Subject, enter "Nice clouds!".
Click on the arrow icon above the Subject line, then drag out an arrow
that points at the clouds on the image. Click on the Circle icon above the Subject line
and drag out a circle around the clouds on the image. Click Submit.
Click on the image to enlarge it.
- ⇒
In the Scenes palette, click on the "Show map" state. The map should be visible now.
- ⇒
Click on the "+" icon again at the top of the Comments palette.
For Subject, enter "I like Italy".
Click on the arrow icon above the Subject line, then drag out an arrow
that points at the map of Italy. Click Submit.
Click on the image to enlarge it.
- ⇒
In the Scenes palette, alternately click on "Background", "Show image" and "Show map".
Notice that the annonations are tied to specific states and are only visible in a particular state.
Previous / Next


Sintesis
Album illustrado: Mariano Melgar
Album illustrado:
Mariano Melgar
Mariano Melgar
Album illustrado: Mariano Melgar
Illustracíon para la inclusion
Infografía para niños
Ilustración y motion graph
En colaboración con audiovisuales.
En colaboración con audiovisuales.
El gran desafio
Children's book story.
Page 001.
Made in Photoshop.
Children's book story.
Page 001.
Made in Photoshop.
El gran desafio
Children's book story.
Page 002.
Made in Photoshop.
Children's book story.
Page 002.
Made in Photoshop.
El gran desafio
Children's book story.
Page 005.
Made in Photoshop.
Children's book story.
Page 005.
Made in Photoshop.
Original character
Mini version.
Mini version.
Original character
Standard size.
Standard size.
Royal eagle
Inks and pencil colors.
Inks and pencil colors.
Poster for children fair
Digital art.
Digital art.
Album illustrado
Original design inspired in vegetables.
Inks and pencil colors.
Original design inspired in vegetables.
Inks and pencil colors.
Metamorphosis
Natural - mechanical duality.
Inks, watercolors, pencil colors.
Natural - mechanical duality.
Inks, watercolors, pencil colors.
Danaerys Targaryen
Digital art made in Photoshop.
Digital art made in Photoshop.
Aurora
Fanart based on the videogame "Child of Light".
Digital art made in Corel Painter and Photoshop.
Fanart based on the videogame "Child of Light".
Digital art made in Corel Painter and Photoshop.
Arbok
Fanart made for the first Pokemon challenge.
Fanart made for the first Pokemon challenge.
Mini cards // Beach
Mini digital illustrations made for an agenda.
Mini digital illustrations made for an agenda.
Mini cards // Sweet beans
Mini digital illustrations made for an agenda.
Mini digital illustrations made for an agenda.
Mini cards // Glasses
Mini digital illustrations made for an agenda.
Mini digital illustrations made for an agenda.
Texture studies
Markers over paper.
Markers over paper.
The giant turtle // Pag 2
Illustration of a story original by Horacio
Quiroga
Illustration of a story original by Horacio
Quiroga
The giant turtle // Pag 6
Illustration of a story original by Horacio
Quiroga
Illustration of a story original by Horacio
Quiroga
Texture studies
Inks
Inks
Aurora
Glass bottle. Pencil colors and black paper were
used for it.
Glass bottle. Pencil colors and black paper were
used for it.
DSCF3578


There may be times when you don’t want documents to actually get deleted from the database, but “flagged” as deleted. Mongoid provides a Paranoia module to give you just that.
Benefits of Using MongoDB: Reduce Complexity & Adapt to Changes
NoSQL is really making a huge wave in the Web development world. Facebook is using NoSQL, Twitter is using NoSQL, Disney, foursquare, github, disqus are all using NoSQL.
In his talk at RedDotRubyConf 2011, Alex Nguyen, co-founder of Vinova, explained how MongoDB, a scalable, high-performance, open source NoSQL database, helped him reduce complexity and easily adapt to changes in Web application development
Advice for Computer Science College Students From Joel Spolsky
The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it’s not whether they prefer Python or Java. It’s whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless.
Joel is the CEO of Stack Overflow. In 2005 he wrote an article named “Advice for Computer Science College Students” in which he gave “Seven Pieces of Free Advice for Computer Science College Students”:
Learn how to write before graduating. Learn C before graduating. Learn microeconomics before graduating.  Take programming-intensive courses. Stop worrying about all the jobs going to India. No matter what you do, get a good summer internship. Despite being a 7-years old article, I find it still very useful for graduating CS students like me.
I recommend reading the original article in Joel blog, you’ll find many other great posts in there, too.
Install Moses on Ubuntu 10.10
Several months ago I had a chance to work on a Machine-translation project in which we use Moses for Statistical machine translation (SMT).
I had a hard time try to figure out how to make Moses run properly on my system (Ubuntu 10.10), since I was new to Linux OS at that time. This is a note I wrote for myself of how I did successfully install Moses on my machine.
Hope it will help someone ;)
Cool Technologies for Web Development
Just something I’ve noted down months ago, almost forgot that I intended to dive into later.
- Node.js: server-side javascript - http://nodejs.org
- Cappuchino: Objective-J, building web-apps that look & feel like desktop apps
- Brunch: A lightweight approach to building HTML5 applications with emphasis on elegance and simplicity
- Lessframework: Less Framework is a CSS grid system for designing adaptive websites.
- Radi: doing animation, effects,… the HTML5 way (no Flash!)
- Website Tour with jQuery: a little script that allows to create a tour on a website with jQuery.


Tabmarks
Close group
Save tabs as group
Create empty group
Preferences
Name:
Currently open tabs will be closed!


Sorry you had trouble. Some day this will be an online submission form. Right now, it will open
a link and send us an email.
P.S. It always helps developers a ton if you include a few things...
- Who you are and how to contact you
- The time of day you had a problem
- Big pictures and screencaps (hit printscreen and paste it into something)
- Screencaps that show the URL in your address bar
- At least a sentence about what went wrong, containing something that tell us more than "doesn't work."
- Thanks for reading!


About
The FHaTbadge was created as a result of a joint effort between Hackerspace Adelaide and Flinders University as an educational tool to provide insights into the following.
Back


A front-end web developer with AngularJS experience and exposure of various industries. Love cutting-edge technologies and always up for a challenge!


Installing rtf2xml involves 3 steps:
Unpacking the tarball.
Installing the rtf2xml module.
Moving the .rtf2xml configuration file (optional).
I've been informed that Windows users need to have the extension ".py" at the end of the script in order to execute it directly. If you want to name your script rtf2xml.py, change to the scripts directory and rename the "rtf2xml" script to "rtf2xml.py".
The .rtf2xml configuration file determines how the script rtf2xml runs. You will find the .rtf2xml file in same directory as the one in which the tarball got unpacked. (This file will probaby appear invisible if you are using unix.) You want to move this file to a location where the script can read it. If you do not move this file to a location where the script can read it, the script will simply use the default values. You probably want the script to read the configuration file so that you can permenantly set certain options.
Where you move the .rtf2xml file depends on what type on your operating system and your privleges. You can even have multiple configuration files on your system. How does the script rtf2xml determine which .rtf2xml file to read?
The script first looks for a file called .rtf2xml in your home directory. If it does not find it there, it looks for in the same directory as the rtf2xml script. If it does not find it in either location, it uses the value in the rtf2xml script. So if you cannot create an .rtf2xml file in any of the above locations, open the rtf2xml script with a text editor and fill in the path to your .rtf2xml file. If you leave the value in the rtf2xml script as an empty string (""), and the rtf2xml cannot find any configuration file, it will use the default values.


Frequently Asked Questions - Sdk
Estimated reading time: 4 minutes- How do I configure ProGuard to work with mesibo?
- Does mesibo support Objective-C?
- Does mesibo support Swift?
- Do I need CocoaPods to install Mesibo Framework?
- Can I customize the API or modules to suit my own requirements?
- Can I request custom features not available in Mesibo?
- Does Mesibo support running on Windows?
- Can I develop applications in Python using Mesibo?
- Does Mesibo support Julia?
- Does Mesibo support Raspberry Pi?:
- Can Mesibo be used with GUI written in Qt(PyQT/Qt C++),GTK,etc ?
- Mesibo does not support the platform that I need What should I do
- Can I use Mesibo with machine learning frameworks such as TensorFlow and Pytorch?
- How can I develop chatbots with Mesibo?
- How can I use Mesibo to build applications for IoT?
- Can Mesibo be used to build voice based assistants/voicebots?
How do I configure ProGuard to work with mesibo?
Mesibo ships with built-in proguard rules which will be automatically used by Android Studio. Hence, you don’t need to do any special configuration to use mesibo with ProGuard.
Does mesibo support Objective-C?
Yes, mesibo supports Objective-C. In fact, Objective-C source code of an entire WhatsApp like messaging application developed using mesibo is available on mesibo GitHub.
Does mesibo support Swift?
Yes! mesibo supports Swift. Refer to our iOS installation documentation for instructions on how to integrate the mesibo SDK in your app using Swift. You can also find Swift sample app source code in mesibo samples GitHub.
Do I need CocoaPods to install Mesibo Framework?
Although recommended, it is NOT mandatory CocoaPods to install mesibo frameworks. Installing Mesibo framework is as simple as downloading and dragging it to your Xcode project. Refer to our iOS installation documentation for exact instructions.
Can I customize the API or modules to suit my own requirements?
Yes, we do offer customized development and setup service to suit your specific requirements. You can contact us at https://mesibo.com/contact.html with your requirements.
Can I request custom features not available in Mesibo?
Certainly, please contact us at<EMAIL_ADDRESS>with your feature requests.
Does Mesibo support running on Windows?
Yes,Mesibo is provided as a shared library(libmesibo.dll) which you can use to build apps on Windows based systems. As of now the windows platform availability is pulled down and will be updated shortly.
Can I develop applications in Python using Mesibo?
Mesibo Python Library allows you to interface with any python library for scientific computing,etc such as numpy,matplotlib,scipy,etc
Mesibo Python API is an entirely open-source real-time library which can be built and installed from source. The entire source code and installation details can be found at our GitHub repo Mesibo Python API
Does Mesibo support Julia?
You could use Mesibo C/C++ library to develop custom extensions for Julia or for any language that supports interface with C-extensions for that matter(All major languages such as Python,Julia,Rust,etc support C-extensions)
Does Mesibo support Raspberry Pi?:
Instantly add real-time communication on your embedded devices by using Mesibo.You can control and communicate with your Raspberry Pi based devices from mobile apps, web, Linux, using the same API.
Mesibo on Raspberry Pi is available as a shared library(.so) which allows you to use it from any application OR languages of your choice like C, C++, Python, PHP, etc.
Can Mesibo be used with GUI written in Qt(PyQT/Qt C++),GTK,etc ?
Mesibo APIs are provided in platform specific / Native SDK which compile to native code. You can implement your UI in any framework you desire and integrate Mesibo with it- whether it be for mobile apps- React-Native,Swift,Flutter or for desktop Apps Qt,Gtk,etc .
Mesibo does not support the platform that I need What should I do
Mesibo provides API in Native SDK form. So,you can develop your own custom extensions or wrappers on top of it. For example,you can use the Mesibo C/C++ Libraries to develop custom extensions for Python,PHP,etc.
Can I use Mesibo with machine learning frameworks such as TensorFlow and Pytorch?
You can use the Mesibo Python Library to interface with any machine learning framework such as TensorFlow,Pytorch,Keras,Caffe,etc.
How can I develop chatbots with Mesibo?
You could implement the chatbot UI for web/Android and connect with Mesibo Native SDKs availbale for Web/Mobile. For the intelligence part, you can interface Mesibo with numerous machine learning frameworks such as Tensorflow,Keras,Pytorch,etc or chat bot development frameworks such as DialogFlow or Rasa.
How can I use Mesibo to build applications for IoT?
You can use Mesibo Native Libraries for C/C++,Python,Javascript,etc and connect with intelligent devices on Raspberry Pi/Arduino,etc
Can Mesibo be used to build voice based assistants/voicebots?
Yes,you can use the Mesibo APIs for audio calls and interface it with your voice bot.


--- layout: post authors: ["Greg Wilson"] title: "Instructor Training at TGAC" date: 2014-11-06 time: "15:45:00" tags: ["Instructor Training", "TGAC"] ---
Hayley London has written a great summary of the instructor training at TGAC in Norwich in October. Aleksandra Pawlik, Bill Mills, and I enjoyed meeting everyone, and I look forward to returning soon.


{% extends 'base.html' %} {% load static %} {% block content %}
12 Jun, 2019 in Design tips
Firmament morning sixth subdue darkness creeping gathered divide.
12 Jun, 2019 in Design tips
Firmament morning sixth subdue darkness creeping gathered divide.
12 Jun, 2019 in Design tips
Firmament morning sixth subdue darkness creeping gathered divide.


Cycle.js
Guide
API
Releases
GitHub
Cycle Run
Cycle RxJS Run
Cycle Most Run
Cycle DOM
Cycle HTML
Cycle HTTP
Cycle History
Cycle Isolate
Cycle State


FAQ
Frequently Asked Health and Safety Questions
Where can I smoke on campus?
Atmiya college has a zero tolerance smoke free zone. Penalties apply for violators.
Where do I put the parking permit on my vehicle?
The permit owner is required to affix the permit to the vehicle wind shield in the lower corner of the driver side and the front of the vehicle in the case of two wheelers.
How long can I apply for a permit?
College staff and students may hold monthly and yearly permits, while visitors can only hold daily and hourly permits.
How do I apply for a permit?
Staff and students apply here.
Visitors must visit click here.


#assign documentation="active">
Details on the integration with ElasticSearch. Automatic indexing changes into ElasticSearch etc.
Support historical queries query.asOf(timestamp)
and versions query.findVersionsBetween()
against historic/old versions of the rows. This supports Oracle Total Recall and for Postgres/MySql etc will
generate the appropriate history tables, triggers and views.
Postgres and Oracle especially has built in support for storing JSON documents in the database. Ebean has built in support for this included support for query expressions.
Easily convert your entity bean object graphs to/from JSON. Ebean provides JSON marshalling/unmarshalling support taking into account bi-directional relationships, all the supported types (Enums, Joda, Java8) and partially loaded object graphs.
The various options to hook into persist and query events.
How to use the read auditing feature to log all the read access by the application.
Use the built in change log feature to log the insert/update/delete activity of the application. The default implementation logs the events in JSON formatter to a logger.
Uses a second set of tables to provide a "live" and "editing" version of object graphs. Typically this is used when the model is content that can be edited, previewed and published to live.
Describes the L2 caching feature and how it is configured and used.
Using Ebean with Kotlin, Groovy and Scala.
Running Ebean in a Cluster.
Monitoring performance, identifying issues such as N + 1 and slow queries.


NBA venues rated on Popcorn - according to Steph Curry
Overall
Butteriness
Crunchiness
Freshness
Presentation
Saltiness
See code on GitHub


 This will invalidate your current two-factor devices and recovery codes.
When you sign in, you'll enter your username and password like always. Then you'll have to enter a code from your phone or tablet to finish logging in.
Set up with an appYou can use any phone/tablet app that is compatible with standard time-based one-time passwords. Examples include Authy, 1Password, LastPass Authenticator, and Google Authenticator.


FROM: ENGR. PETERSIDE DOUGLAS REPLY TO<EMAIL_ADDRESS>My Dear, I am ENGR. PETERSIDE DOUGLAS, Director of Project,Department of Petroleum Resources.I am making this contact with you based on the committee's need for an individual/company who is willing to co operate with us to receive the floating Funds in my department. This amount $15M represents the balance of the total contract value executed on behalf of Department of petroleum Resources by a foreign contracting firm, which we the officials over-invoiced deliberately, of which the actual sum has been paid. I highly assure you that no risk is involved because this information is known only to you and my colleagues. As soon as I receive an acknowledgement of receipt and acceptance of our mutual business proposal,I will furnish you with the necessary step to follow and the sharing ratio. I await your immediate response. Yours faithfully, Engr.Peterside Douglas<EMAIL_ADDRESS>___________________________________________________________________________ Mail fra en fotballsupporter -- http://www.fotballsupporter.no/


[% PROCESS book_block
name => 'learnperl',
title => 'Learning Perl, 7th Edition',
isbn => '1491954329',
link => '',
author => 'by Randal L. Schwartz, brian d foy, Tom Phoenix;
394 pages;
O\'Reilly Media, Inc.;
(October 2016)',
description => "
A tutorial book, covering how
you could spend the first 30 to 40 hours with Perl. The seventh edition
covers up to Perl 5.24. Reflecting years of classroom testing and
experience, this edition is packed with exercises that let you
practice the concepts while you follow the text.
",
%]
[% PROCESS book_block
name => 'beginningperl',
title => 'Beginning Perl (2012)',
isbn => '1118013840',
#link => 'http://www.amazon.com/Beginning-Perl-Curtis-Poe/dp/1118013840/',
author => 'by Curtis "Ovid" Poe. 744 pages. Wrox Press Inc. (September 19, 2012).',
description => "
The latest Perl book targeting new Perl programmers is unique in that it focuses heavily on 'real world Perl' rather than the latest and greatest features. Despite the title of the book, this is far more than a beginner's book. By the time you're finished with the last chapter, you'll have finished building a Web application to fight DMCA takedown notices. Using tools such as DBIx::Class, Catalyst, Moose, Plack, and many others, this book teaches you the technologies that employers are asking for, but assumes no prior knowledge of Perl.
",
%]
[% PROCESS book_block
name => 'beginningperl',
title => 'Beginning Perl (2000)',
isbn => '1861003145',
link => '/books/beginning-perl/',
author => 'by Simon Cozens, Peter Wainwright. 700 pages. Wrox Press Inc. (May 25, 2000).',
description => "
Although a bit old, this book is available online for free,
it is useful for learning some of the basics of Perl, once you have
mastered these then look at the Modern Perl book (also online for free)
below for more current best practices.
",
%]
[% PROCESS book_block
name => 'modernperl',
title => 'Modern Perl',
isbn => '1680500880',
link => 'http://www.onyxneon.com/books/modern_perl/index.html',
author => 'by chromatic (2015).',
description => "Modern Perl is suitable for programmers of every level. It's more than a Perl tutorial—only Modern Perl focuses on Perl 5.20 and 5.22, to demonstrate the latest and most effective time-saving features. Only Modern Perl explains how and why the language works, to let you unlock the full power of Perl.",
%]
[% PROCESS book_block
name => 'beginningperl2nd',
title => 'Beginning Perl, 3rd Edition (2010)',
isbn => '1430227931',
link => '',
author => 'by James Lee;
464 pages;
Apress, LLC;
(Mar 2010)',
description => "
Beginning Perl is a different kind of Perl book. It's written
particularly with the beginning programmer in mind, but experienced programmers will not feel patronised.
It covers a lot of ground, from the very basics of programming, right
through to developing CGI applications for the web. More importantly, it
emphasises good Perl practice, and readable and maintainable code.
",
%]
More books
See Perl book library
for a bigger list of recommended books at all levels.


Write SQL queries to retrive data.
Annotate variables in the query by using '$' sign before and after the variable name as in select * from mytable where column1=$column$
select * from mytable where column1=$column$


This app does not use your internet connection and has no access to your actual money.
We do our best, but do not gurantee anything or accept any liability for financial loss as the use of the app, please use at your own risk.
This app is the idea and work of Sepand, with development support volunteered by David Rust-Smith.


Some Emacs Notes (mostly hide-show)
I spent most of yesterday troubleshooting someone else's code and I found these commands useful (among others - these are just the ones that I had to look up).
At one point, for instance, I thought that two class names looked the same, so I guessed that whoever wrote the code probably lost track of the classes that they had defined and duplicated (at least) one of them. To check I entered:
M-x occur class
Which brought up a list of lines that had the word 'class' in them and found that they had indeed duplicated that class definition. The argument 'class' is a regular expression so if there were other places where the word 'class' was used (e.g. in a nested class or a comment), you could add a start of line character:
M-x occur ^class
This would only bring up lines that started with the work 'class'.
If, for example, you had these class definition:
After you folded it you would see:
To enable hide-show for the buffer you're in:
M-x hs-minor-mode
But in my case I want it to always be on when I'm editing a python file so I added this to my ~/.emacs.d/init.el file:
(defun turn-on-hideshow () (hs-minor-mode 1))
(add-hook 'python-mode-hook 'turn-on-hideshow)
I don't know why but emacs doesn't seem to have a way to automatically associate minor-modes with file-extensions so the work-around is to first define a function that turns on the minor mode (called 'turn-on-hideshow' in this case) and then add it to the hook of the major-mode ('python-mode-hook' in this case). Once you have hideshow working, you have a few options available to you (see the wiki) but I only use three of them most of the time.
The main trigger for 'hs-minor-mode' is C-c @ which you follow with the actual command. For instance, to hide (fold) everything that isn't flush-left:
C-c @ C-M-H
which translates to control-c, @, control-alt-shift-h ('H' is for hide).
The opposite (show all the hidden text) is:
C-c @ C-M-S
The only other command that I use a lot (so far) is toggle block:
C-c @ C-c
What this does is toggle the block where your cursor is currently located. A block is the line that is flush left and all the lines that follow it that are indented. So, if you have multiple classes and functions defined, each one of them would be a block. If the block you're at isn't folded, then entering C-c @ C-c will hide the indented lines and if they are already hidden then it will un-hide them.
To jump to the previous paragraph:
M-x {
To go to the next paragraph:
M-x }
C-c @ C-M-H
Then I noticed the duplicate class names so I listed all the classes that had that name:
M-x occur class <class name>
Occur gives you the line numbers so you can jump right to the line (although if the line is within a folded block you have to un-fold it first) so I created two windows:
C-x 2
Then I jumped to the starting line of the first definition in the first window (line 5 in this example) and un-hid it:
M-g-g 5
C-c @ C-c
Then navigated to the other window and jumped to the starting line of the second definition (line 50 in this example) and un-hid it:
C-x o
M-g-g 50
C-c @ C-c
Inspecting the definitions revealed that they had the same attributes but were assigned different values so I had no way of knowing which was the class definition to keep and the person who wrote them was on vacation so I decided not to fix it (I needed a different class in the module so this didn't directly affect me).
Occur
One problem that I ran across was that there were around two dozen class definitions, all of which were similar so the bugs that were in one tended to be in all the other classes as well. I found that using the M-x occur command was useful for looking at all instances of certain lines, so I could search for things that were common among all the class definitions (occur is aliased by the list-matching-lines command).At one point, for instance, I thought that two class names looked the same, so I guessed that whoever wrote the code probably lost track of the classes that they had defined and duplicated (at least) one of them. To check I entered:
M-x occur class
Which brought up a list of lines that had the word 'class' in them and found that they had indeed duplicated that class definition. The argument 'class' is a regular expression so if there were other places where the word 'class' was used (e.g. in a nested class or a comment), you could add a start of line character:
M-x occur ^class
This would only bring up lines that started with the work 'class'.
Hide-show
This is an emacs mode that I keep rediscovering so I figured I should write it down. This mode enables code-folding (since I program in python this means hiding code that is indented.If, for example, you had these class definition:
class Test(object):
def __init__(self, x):
self.x = x
class TestTest(Test):
def __init__(self, y, *args, **kwargs):
super(TestTest, self).__init__(*args, **kwargs)
self.y = y
After you folded it you would see:
class Test(object):
class TestTest(Test):
To enable hide-show for the buffer you're in:
M-x hs-minor-mode
But in my case I want it to always be on when I'm editing a python file so I added this to my ~/.emacs.d/init.el file:
(defun turn-on-hideshow () (hs-minor-mode 1))
(add-hook 'python-mode-hook 'turn-on-hideshow)
I don't know why but emacs doesn't seem to have a way to automatically associate minor-modes with file-extensions so the work-around is to first define a function that turns on the minor mode (called 'turn-on-hideshow' in this case) and then add it to the hook of the major-mode ('python-mode-hook' in this case). Once you have hideshow working, you have a few options available to you (see the wiki) but I only use three of them most of the time.
The main trigger for 'hs-minor-mode' is C-c @ which you follow with the actual command. For instance, to hide (fold) everything that isn't flush-left:
C-c @ C-M-H
which translates to control-c, @, control-alt-shift-h ('H' is for hide).
The opposite (show all the hidden text) is:
C-c @ C-M-S
The only other command that I use a lot (so far) is toggle block:
C-c @ C-c
What this does is toggle the block where your cursor is currently located. A block is the line that is flush left and all the lines that follow it that are indented. So, if you have multiple classes and functions defined, each one of them would be a block. If the block you're at isn't folded, then entering C-c @ C-c will hide the indented lines and if they are already hidden then it will un-hide them.
Paragraph Navigation
This is one of those things that you learn when you first go through the emacs tutorial, but somehow I always forget it - emacs will jump between paragraphs (it uses newlines so it doesn't work quite right for code, but works for expository text).To jump to the previous paragraph:
M-x {
To go to the next paragraph:
M-x }
How I Used It
I don't want to share the code (since it wasn't mine) but in a nutshell what I faced was a file with a couple-dozen class definitions (this was a django-factory-boy module so each model (database table) had two classes, a straight factory and a fuzzy version), so the first thing I did was fold all the classes to make it easier to get a high-level view:C-c @ C-M-H
Then I noticed the duplicate class names so I listed all the classes that had that name:
M-x occur class <class name>
Occur gives you the line numbers so you can jump right to the line (although if the line is within a folded block you have to un-fold it first) so I created two windows:
C-x 2
Then I jumped to the starting line of the first definition in the first window (line 5 in this example) and un-hid it:
M-g-g 5
C-c @ C-c
Then navigated to the other window and jumped to the starting line of the second definition (line 50 in this example) and un-hid it:
C-x o
M-g-g 50
C-c @ C-c
Inspecting the definitions revealed that they had the same attributes but were assigned different values so I had no way of knowing which was the class definition to keep and the person who wrote them was on vacation so I decided not to fix it (I needed a different class in the module so this didn't directly affect me).


“My goal is not to be better than anyone else, but to be better then I used to be.”
“TILL THE FULL STOP DOESN'T COME, THE SENTENCE IS NOT COMPLETE.” ― MS Dhoni
Introduction
Mahendra Singh Dhoni (born 7 July 1981), is a former Indian international cricketer who captained the Indian national team in limited-overs formats from 2007 to 2017 and in Test cricket from 2008 to 2014.
Under his captaincy, India won the inaugural 2007 ICC World Twenty20, the 2010 and 2016 Asia Cups, the 2011 ICC Cricket World Cup and the 2013 ICC Champions Trophy.
A right-handed middle-order batsman and wicket-keeper, Dhoni is one of the highest run scorers in One Day Internationals with more than 10,000 runs scored and is considered an effective "finisher" in limited-overs formats.
He is widely regarded as one of the greatest wicket-keeper batsmen and captains in the history of the game.He was also the first wicket-keeper to effect 100 stumpings in ODI cricket.


| 017:051 Khan | : |
"Or some created thing that is yet greater (or harder) in your breasts (thoughts to be resurrected, even then you shall be resurrected)" Then, they will say: "Who shall bring us back (to life)?" Say: "He Who created you first!" Then, they will shake their heads at you and say: "When will that be?" Say: "Perhaps it is near!" |
| 017:051 Maulana | : |
Or some other creature of those which are too hard (to receive life) in your minds! But they will say: Who will return us? Say: He Who created you at first. Still they will shake their heads at thee and say: When will it be? Say: Maybe it has drawn nigh. |
| 017:051 Pickthal | : |
Or some created thing that is yet greater in your thoughts! Then they will say: Who shall bring us back (to life). Say: He Who created you at the first. Then will they shake their heads at thee, and say: When will it be? Say: It will perhaps be soon; |
| 017:051 Rashad | : |
"Even if you turn into any kind of creation that you deem impossible." They will then say, "Who will bring us back?" Say, "The One who created you in the first place." They will then shake their heads and say, "When will that be?" Say, "It may be closer than you think." |
| 017:051 Sarwar | : |
or anything that you think is harder to be brought to life." They will soon ask, "Who will bring us back to life?" Say,"The One who created you in the first place." They will shake their heads and say, "When will He bring us back to life?" Say, "Perhaps very soon. |
| 017:051 Shakir | : |
Or some other creature of those which are too hard (to receive life) in your minds! But they will say: Who will return us? Say: Who created you at first. Still they will shake their heads at you and say: When will it be? Say: Maybe it has drawn nigh. |
| 017:051 Sherali | : |
'Or created matter of any kind which appears hardest in your minds, even then shall you be raised up.' Then will they ask, 'Who shall restore us to life?' Say, 'He who created you the first time.' Still they will shake their heads at thee and say, ''When will it be?' Say, 'May be, it is nigh, |
| 017:051 Yusufali | : |
"Or created matter which, in your minds, is hardest (to be raised up),- (Yet shall ye be raised up)!" then will they say: "Who will cause us to return?" Say: "He who created you first!" Then will they wag their heads towards thee, and say, "When will that be?" Say, "May be it will be quite soon! |
Concepts/Themes Covered: أركان الإسلام > التوحيد > الملحدون المنكرون ليوم البعث Pillars of Islam> Islamic> The Apostates Who Denies the Resurrection الإيمان > اليوم الآخر > البعث Faith> The Hereafter> The Resurrection القرآن الكريم > محاججة المنكرين والجاحدين The Holy Quran> Arguing the Denyers and the Unbelievers
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


Putting a DML statement inside a while loop is a performance problem since it can send more DML requests than necessary. Instead, create a list containing all of the records you want to query and include them all in a single DML statement.
while(true) { merge newAcct; }
while(true) { ... } merge newAcct;


Lingvist: The future of human learning? (Review)
In this post I'm taking a look at Lingvist, a spaced repetition platform. Lingvist uses neural networks and machine learning to offer some of the most innovative language learning software on the planet.
Almost everyone has tried to use flashcards to learn things with.
Whether it's the old-fashioned way of writing the question on one side of a card, and the answer on the other – or online where it's all happening automatically.
And the crazy part is they work ridiculously well.
Spaced repetition works by repeating the information at tactically increasing delays, and hence telling the brain that this piece of information is important.
So for language learning the ideal time to see a word you're trying to learn might look something like this:
20 minutes, 1 hour, 4 hours, 1 day, 3 days, 7 days, 2 weeks, 6 weeks, 12 weeks…etc etc etc..
The more reviews you do of a piece of information, the longer you can wait until reviewing it again.
This reduces the risk of forgetting the information.
Sounds easy right? Just space the words out and you have a winner.
Well, yes and no.
In this review I'm taking a deep look at how Lingvist is trying to accomplish this.
Table of contents
- The challenge of spaced repetition
- Using machine learning for optimised spaced repetition
- The mission and foundation of Lingvist
- Lingvist Features Lingvist Unlimited Lingvist Free
- The main interface Course Wizard Lingvist Challenges
- Which languages can you learn with Lingvist? What does Lingvist cost?
- Lingvist Review Conclusion
- Lingvist Alternatives
The challenge of spaced repetition
The biggest problem with implementing the theory of spaced repetition is that we're all different.
We all have different learning backgrounds, histories, cultural awareness, and even personalities.
So, how could you possibly build a system that accounts for everyone whilst still maintaining the highest accuracy of reviews?
You see, in order for a review of a piece of information (like a word in a foreign language) to be the most effective, it should come JUST before you were about to forget it.
Come too late and you've forgotten it, and come too early and you might score poorly on future revisions.
Using machine learning for optimised spaced repetition
This is where software like Lingvist comes in.
Instead of setting arbitrary delays between revisions, or even worse, asking the user themselves to identify “if they have learnt a word or not” Lingvist uses an algorithm that optimises everything for your learner profile.
This is visible in how you start out your new profile:
As you can see, the software asks me to estimate my current level in German.
Then, following that the software will use my success rate to estimate my actual level.
This allows Lingvist to offer me challenging materials I can learn, and not things I already know that are too easy.
The mission and foundation of Lingvist
Lingvist founder Maik Müntel was a guest on the podcast in episode 163 and in the episode he shared the mission for Lingvist:
Our goal is to accelerate human learning and language learning is just the first step of it. Mait Müntel, AFP 163
Mait believes, along with a lot of other people that retraining of the workforce will become extremely important in the future as we develop more and more machines to automate jobs that are currently held by people.
Today Lingvist uses machine learning algorithms to hone in on the optimal learning for any given user, at any time.
Lingvist Features
Lingvist operates a freemium model, which means there are two access levels for everyone.
Unlimited includes every feature (as the name suggests.)
Here's what's included in each membership:
Lingvist Unlimited
- Learn up to 5000 of the most commonly used words.
- Learn as many new words per day as you want.
- Practice and learn new words on our Android and iOS apps by typing or speaking.
- Unlimited access to all reading, listening, and speaking challenges.
- Choose a course focus relevant to your interests.
- Keep track of everything you’ve learned at a glance in the word list.
- Access to priority support.
Lingvist Free
- Limited to 3000 of the most commonly used words.
- New words per day are limited, but you can review as many as you need.
- Practice and learn new words by typing your answers.
- Practice your reading, speaking, and listening skills with one challenge per day.
- Access to free support.
The main interface
The main interface of Lingvist looks like a physical flashcard, but with the vocabulary word missing.
It features high-quality human recordings (no synthesised voices here!)
It is possible to disable the English translation in the settings, but I find it impossible to know the context sometimes, so I just keep it enabled.
If you are not being tested by Lingvist to find your level (this only takes about 100 reviews or so.) you'll instead see small dots on top of the card.
These represent the amount of times you need to repeat the card before it moves on to the next ‘phase'
There's really not much to say about the interface other than that. It works really well, and the mobile experience does not suffer in anyway on iOS or Android.
You can also bring up the foreign keyboard if you struggle to make some of the characters on your own keyboard.
The last feature is the statistics. If you click the little bars on the top right of the screen you get shown your daily and historical progress as well as your estimated Vocabulary.
Course Wizard
Included with the Unlimited plan. Currently only available with Spanish and German.
A really cool feature of Lingvist is that you can build your own course, and use their neural network and machine learning engine to learn exactly what you need to learn.
It even suggests words you might want to learn.
Like in this example where I typed in actor, and the software automatically suggested Comédien
I think there's massive potential for that, as you can simply paste a list of key words from what you need yourself.
This way you won't have to struggle through learning the same useless travel phrase vocabulary or 15 different types of fish that other software starts out with.
Lingvist Challenges
The challenge section are like quizzes that you can use to test your own knowledge. They come in a variety of levels, and feature different types of media.
Some of the challenges you have to listen to an audio file and answer a question right. Other times you simply need to pick the correct answer to a text question.
It's a small thing, but I like it for the variety that it adds to the learning.
Which languages can you learn with Lingvist?
Here are the languages you can learn with Lingvist:
- German
- Spanish
- Latin American Spanish (Beta)
- French
- Russian
Lingvist Estonian
Being based in Estonia, Lingvist also features a special mini-course, where you can learn the top 100 Estonian words to celebrate the centennial of the Estonian rebublic.
What does Lingvist cost?
Lingvist operates a freemium model, where you can get access to a lot of features for free. The paid subscription cost as little as $7.50 per month, if paid annually.
Here are the full, latest prices (October, 2019)
The yearly membership appears to have ridiculous value compared to the monthly fee, but I speculate that the monthly is just hyper-inflated to make the yearly deal seem a lot better.
Assuming about $6/month this is pretty similar to other language learning subscriptions like Babbel, Memrise, and even Duolingo.
Lingvist Review Conclusion
I think Lingvist is one of the most innovative spaced repetition companies out there, and I really welcome the addition of the “Course Wizard” to the arena of language learning app features.
It's reasonably priced, and the recordings and sentences are of the highest quality.
The downsides to Lingvist are the limitations on the free model (you'll quickly get banners with your limit being reached, if you're keen.) and the fact that it only offers 4 languages at this point.
Give it a go with the free version, and if you like it — I'd say it's worth those 2 cups of coffee a month to have the full set of features and no restrictions.
Click here to try Lingvist (free)
Lingvist Alternatives
Memrise – they have a similar philosophy to Lingvist, but having struggled with user-generated content for a long time they are only now on their way back. Not sure of the technical comparison.
Hope you enjoyed my review of Lingvist.
Have you tried it – which spaced repetition software is your favourite?
Disclaimer : Lingvist is a partner of Actual Fluency and has paid a sponsorship fee for lingvist review to be featured on Actual Fluency. The post is produced by Actual Fluency without any editorial input from Lingvist. Do you want to have your company featured on Actual Fluency? Check out our packages.
Just a learner says: at
I have been using lingvist for a long time, its been very useful for a while but then it just became boring because its simply the same thing you seee everyday, i still use it time to time but now I simultaneously use various apps to learn a language.
Reply Close dialog
Session expired
Please log in again. The login page will open in a new tab. After logging in you can close it and return to this page.
>


What is the relationship between bitnan and BRT?
Bitnan is a profit sharing digital currency trading platform based on the Ethereum square centric protocol.
BRT is a token issued by the ICO.In addition to trading in the parallel market,the holder will regularly receive bitnan profit sharing.
When does the BRT issue start?
BRT issue will start from 20:00 September 1, 2017, to the end of the 19:59 September 30th,
the actual start and end times may vary slightly due to Ethereum smart contract use of block heights as a unit of time calculation.
Which kind of digital currency does BRT issue support?
Only ETH are supported.
When can I receive the BRT?
BRT's release is based on the Ethereum smart contract, which sends the corresponding amount of BRT to your source address in real time when your transfer accounts is received.
When will the bitnan trading platform formally release?
According to the road map, we will complete the subsequent development,testing and marketing after the successful collection, is expected in mid July 2018 bitnan formally launched operations.
The development schedule and any messages about bitnan can be viewed and discussed on our facebook/twitter/medium.
Meanwhile ico.bitnan.com will regularly publish announcements, bitnan will use the www.bitnan.com as the main domain name.
When can I trade BRT on the markets?
After the BRT sale is over, it is expected to be on-line trading in the middle of October 2017
How to get bitnan share profits?
After the bitnan formally released, You just need to complete the registration and login of bitnan and recharge your BRT to the bitnan account.
After each quarterly profit settlement, bitnan sends a certain amount of ETH to your bitnan account.


Toggle navigation
Home
Transfers
Bandwidth
DHT
Settings
Help
Queuing
Download Slots
Recycle unused slots for uploads
Upload Slots
Recycle unused slots for downloads
Auto Start / Stop
Stop seeding on upload ratio above
Stop constant seeds on upload ratio above
Stop created seeds on upload ratio above
Start new transfers
Start previously running on startup
Web interface
Show filter-box for transfers in Web Interface


Quick-start¶
Quick-start for xl_link
Installation¶
xl_link depends on at least Pandas 0.19.
On windows this is most easily installable by using Anaconda which you can get here:
https://www.anaconda.com/download/
Anaconda is a Python installation pre-packed with a bunch of scientific python libraries, including Pandas.
To install is as simple as:
pip install xl_link
Excel Engines¶
Similarly to Pandas, xl_link provides a wrapper to some popular excel writing modules, which it uses to provide easy chart creation from DataFrames.
Which one you use is dependent on what features you want, and what API syle you prefer.
Currently supported engines are:
- XlsxWriter: http://xlsxwriter.readthedocs.io (version >=0.9)
- openpyxl: https://openpyxl.readthedocs.io (version >=2.4)
Both of which have similar capabilities and syntaxes, and can be installed through pip.
Pandas DataFrames¶
Pandas is a ‘Powerful data analysis toolkit’, with the core class being the DataFrame
. A DataFrame
is essentially a table,
but pandas provides a ton of additional methods and properties that make manipulating these DataFrames easy.
For more detail on some of the capabilities of pandas check out their documentation here:
From our perspective the most important feature of DataFrames is that they can be exported as Excel spreadsheets.
This is done by calling the to_excel
method e.g.:
>>> import pandas as pd
>>> f = pd.DataFrame(data={'x': list(range(10)),
'y': list(range(10, 20))})
>>> f.to_excel("book.xlsx")
Whilst this is useful, what if you want to add things to book.xlsx
based off of f
? With both xlsxwriter and openpyxl, you need to know either the cell name or range,
or the row and column number to make changes.
Given that you know the shape of your DataFrame, and where in the spreadsheet they were written surely there must be a way to know where each element of your frame is in the document…?
This is where xl_link steps in. xl_link provides a subclass of DataFrame
, XLDataFrame
where the to_excel
method has been modified to return an XLMap
object:
The XLMap class¶
The XLMap
class is returned from XLDataFrames.to_excel
, and acts similarly to the original DataFrame, however, rather than holding the data from the original frame, it holds it’s position within the spreadsheet.
This is perhaps easier to demonstrate:
>>> from xl_link import XLDataFrame # Rather than pandas DataFrame
>>> f = XLDataFrame(data={'x': list(range(10)),
'y': list(range(10, 20))})
>>> xlmap = f.to_excel("book.xlsx")
>>> xlmap
<XLMap: index: <XLRange: 'Sheet1'!A2:A11>, columns: <XLRange: 'Sheet1'!B1:C1>, data: <XLRange: 'Sheet1'!B2:C11>>
so xlmap represents f
within Sheet1, where the index occupies A2:A11, the columns occupy B1:C1, and the data B2:C11.
index
, columns
and data
are all attributes of xlmap, and can be accessed directly.
These attributes are all XLRange objects, simply represent a range in a spreadsheet, and can be turned into their corresponding range string through xl_range.range
, they can do a bunch of other stuff which you should check out in the API!
As well as the index
, columns
and data
attributes, you can also use pandas indexing on the XLMap
to get XLRange
s and XLCell
s:
At present XLMap
implements loc
, iloc
, at
and iat
indexing, as well as __getitem__
(e.g. f['x']
). Here are some examples:
>>> xlmap.data
<XLRange: 'Sheet1'!B2:C11>
>>> xlmap.iloc[2:4, 1]
<XLRange: 'Sheet1'!C4:C5>
>>> xlmap['y']
<XLRange: 'Sheet1'!C2:C11>
These methods become particuarly useful when combined with your excel engine of choice.
Both xlsxwriter
and openpyxl
are based on workbook, and worksheet classes, and more detail of using them can be found in their respective documentation.
xl_link utilises the pandas.ExcelWriter
class which wraps both xlsxwriter and openpyxl, providing access to the worksheet and workbook for a particuar document.
pandas.ExcelWriter
object can be created directly, taking the filename, and engine as parameters e.g.:
>>> import pandas as pd
>>> writer = pd.ExcelWriter('example.xlsx', engine='xlsxwriter')
>>> writer
<pandas.io.excel._XlsxWriter at 0x283dd9cf588>
The workbook object can be accessed with:
>>> writer.book
<xlsxwriter.workbook.Workbook at 0x283dd9cf3c8>
And a dictionary of the workbook’s sheets:
>>> writer.sheets
When looking through the documentation for your excel engine, knowing how to access your workbook and sheets is very useful.
A pandas ExcelWriter
can be passed as the first argument to XLDataFrame.to_excel
, or if a path is provided, internally, a writer is created, corresponding to the filename and engine.
XLMap
keeps ahold of a reference to the writer used to create itself, and also the sheet it was written to (Note this is a single sheet, not the same as sheet**s**!) e.g. with xlmap from above:
>>> xlmap.writer
<pandas.io.excel._XlsxWriter at 0x283db2cccc0>
>>> xlmap.sheet
<xlsxwriter.worksheet.Worksheet at 0x283db2cca20>
The sheet attribute is handy for adding charts to the same sheet as your frame!
Note¶
when using xlsxwriter
as your engine, because xlsxwriter
can’t modify existing documents,
xl_link suppresses the saving of xlsxwriter.workbook.Workbook
objects after calling to_excel (the default behaviour in Pandas). This means your spreadsheet won’t appear until you explicitly save it this can be done by calling ExcelWriter.save()
e.g.:
>>> xlmap.writer.save()
or
>>> writer.save()
or if directly using a Workbook object
>>> workbook.save()
Charts¶
The final thing XLMaps
can do is generate charts. These charts belong to whatever engine you are using, so if there are any tweaks you want to make to the charts,
first check out the XLMap.create_chart
method in the API (because there might be an easy way!), or check out the chart docs in your excel engine.
The create_chart
method is intended to be similar to the DataFrame.plot
method, whereby sensible defaults mean you often hardly have to specify any arguments.
Expanding on the example above:
Let's make some changes to f
>>> f['y2'] = [1, 6, 8, 1, 4, 8, 3, 8, 7, 10]
>>> f.set_index('x', inplace=True, drop=True)
Get our XLMap
>>> xlmap = f.to_excel('chart.xlsx', engine='openpyxl')
create a scatter chart, and insert it into the document
>>> chart = xlmap.create_chart('scatter')
>>> xlmap.sheet.add_chart(chart, 'D1') # from openpyxl docs (xlsxwriter is different!)
>>> xlmap.writer.save()
Creates:
The first parameter is the chart type, all chart types for each engine should be supported i.e.:
xlsxwriter :
- area
- bar
- column
- line
- pie
- doughnut
- scatter
- stock
- radar
check out their chart docs here: http://xlsxwriter.readthedocs.io/chart.html
openpyxl :
- Area Charts
- Bar and Column Charts
- Bubble Charts
- Line Charts
- Scatter Charts
- Pie Charts
- Doughnut Charts
- Radar Charts
- Stock Charts
- Surface charts
check out their chart docs here: https://openpyxl.readthedocs.io/en/default/charts/introduction.html
chart subtypes are also supported, just pass the subtype
keyword parameter to create_chart
Other parameters you may want to use are:
values - in all charts is the dependent variable (e.g. y)
categories - for most charts this is used to categorise values data, but can also be used as x values (e.g. in scatter), multiple series can be under the same category.
names - these are used to label each series.
Things to keep in mind is, how to add your chart to a sheet. e.g.:
in xlsxwriter
>>> sheet.insert_chart('A1', chart) # position comes first
in openpyxl
>>> sheet.add_chart(chart, 'A1') # position comes second
Make sure you don’t mix two different engines, also charts can only be inserted into a sheet from the workbook that created it.
Where Next?¶
That concludes the quickstart for xl_link, any feedback or questions, submit an issue on the xl_link github: https://github.com/0Hughman0/xl_link/issues
Check out the API docs for more info!


The mailing list for PgAccess is<EMAIL_ADDRESS>If you have some questions regarding PgAccess you should mail to this address. I will also answer to messages addresed directly to me but it would be better to post your messages here because it might be possible to get an answer quickly from another user of PgAccess.
To subscribe please send a mail message to :
<EMAIL_ADDRESS>having a single line in the body message : subscribe
In a couple of minutes , if everything is ok, you must receive something like that :
Welcome to the pgsql-interfaces mailing list!
Please save this message for future reference. Thank you.
If you ever want to remove yourself from this mailing list, you can send mail to<EMAIL_ADDRESS>with the following command in the body of your email message:
unsubscribe pgsql-interfaces yourname@yourdomain


2 Corinthians 11:33
And through a window in a basket was I let down by the wall, and escaped his hands.


previous
play
next
mute
max volume
Update Required
To play the media you will need to either update your browser to a recent version or update your
Flash plugin
.


Magical Movie Search
by
Ajax
Search for Movie
Title:
IMDB Rating:
Genre:
Year:
Director:
Screenplay:


|
mtoc++
1.5
mtoc++: Doxygen filter for MatLab .m files
|
Doxygen documentation guidlines example class. More...
Public Member Functions | |
| Class () | |
| This a class constructor. | |
| function barType rv = | example_function (double param1,Class param2) |
| First line: short description text for example function. | |
| function [
fooType ret1 , Class ret2 , ret3 ] = | many_return_args (fooType arg1,fooType arg2) |
| This is a base function with three left hand side arguments! | |
| function
returnarg = | iwillbeoverridden (matrix arg1,matrix arg2) |
| This is a base function which will be overridden in a subclass! |
Public Attributes | |
| Class | SomeClass = Class |
| Some comment on the property SomeClass. | |
| int | SomeProp = 0 |
| Summary comment for SomeProp. | |
| rowvec | MyRowVec = "[1 2 3]" |
| Some row vector property. | |
| integer | SomeDepProp |
| Short description for a dependent property. | |
| EVENT | Test |
| This is the Test event's commentary. | |
| EVENT | UndocumentedEvent |
| UndocumentedEvent. |
Protected Member Functions | |
| function | noRealArguments () |
| This is the function brief description. |
This is the documentation guideline file for class and function documentation. KerMor uses doxygen
and a custom tool mtoc
to create the documentation from the source files. Doxygen has specific tags to enable easy documentation formatting/layout within the source files. Doxygen commands always begin with an at-character(@) OR a backslash(\).
For a full list of commands supported by doxygen look up http://www.stack.nl/~dimitri/doxygen/commands.html.
These commands are available to you within class and function comments.
The doxygen filter provides the following shortcuts for non-default text content:
'word'results in the output:
word
,` \sum_{n=0}^N \frac{1}{n} `results in the output: and
`` \sum_{n=0}^N \frac{1}{n} ``results in the output:
You therefore need to be careful with the use of characters
' `
If you want to say something about the transposed of a Matrix A
, better do it in a Tex-Environment as or in a verbatim/code environment as
@c @f$, @f$ @f[, @f]in order to increase readability in the default matlab documentation output created by
doc
or help
.If, however, a double-colon at the end of a line is succeeded by: whitespace characters, like spaces or tabulators the line is not written in a bold font.
STRG+I
removes any empty spaces after a line, so "Sometext: " will become "Sometext:" and will be treated by doxygen as paragraph!Blocks starting with @verbatim or @code and are ended with @endverbatim or @endcode are written unformatted in a type-writer font and are not interpreted by doxygen.
/| |\ ( |-| ) ) " ( (>(Y)<) ) ( / \ ( (m|m) ) hjw ,-.),___.(,-.\`97 \`---\' \`---\'
Listings can be added by prepending lines with a dash(-)
and they are ended by an empty documentation line.
Enumerations can be added by prepending lines with a dash and hash (-#)
After the first empty documentation line, paragraphs of the detailed description begin.
Lines beginning with the words "Parameters" or "Return values" start a block of argument respectively return argument descriptions.
Parameters and return values can have specified types by use of one of the keyword strings "of type" or " in its documentation block. The word followed by this keyword string is interpreted as the typename.
The "of type" keyword only works if the option "ENABLE_OF_TYPE_PARSING" is enabled and only in the first two lines of the documentation block.
References to other classes/members/properties can be made in the matlab-fashion via
or using the @see
doxygen command
See also
keyword is simply replaced by @see upon parsing. It is just a convenience implementation.| param1 | first parameter |
| param2 | second parameter with description Default: [] |
| rv | return value |
After the first non-comment line, doxygen stops parsing
comments. An exception are comment blocks starting with '%%|', which are interpreted as doxygen documentation blocks by mtoc++ and can include doxygen commands like @todo :
\xrefitem todo 1.
This are function details described in the class Class.
Blah. Blah.
| arg1 | A variable . The type information for this parameter is also copied to inherited classes if @copydoc or @copydetails are used. |
| arg2 | A variable . The type information for this parameter is also copied to inherited classes if @copydoc or @copydetails are used. |
| function [ fooType ret1 , Class ret2 , ret3 ] = examples.Class.many_return_args | ( | fooType | arg1, |
| fooType | arg2 | ||
| ) |
This are function details described in the class Class. To all three return values, one can attach type information and documentation.
Blah. Blah.
| arg1 | A variable |
| arg2 | A variable |
| ret1 | A return value |
| ret2 | A return value |
| ret3 | A return value with no specified type. |
|
protected |
Here are more details on the no real arguments function. And even some more!
Sealed
set to true. It cannot be overwritten. | examples.Class.SomeClass = Class |
Properties can have specified types by use of one of the keyword strings "of type" or " in its documentation header or documentation block. The word followed by this keyword string is interpreted as the typename.
The "of type" keyword only works if the option "ENABLE_OF_TYPE_PARSING" is enabled and only in the first two lines of the documentation block.
SetAccess = private, GetAccess = public
| examples.Class.SomeDepProp |
Equals SomeProp times five.
Default: 0
Dependent
set to true. Reimplemented in examples.InheritedClass.
| examples.Class.SomeProp = 0 |
Getter brief description.
Brief setter method description.
Detailed comment for SomeProp. Here you can write more detailed text for the SomeProp property.
Default: 0
More details on the setter
More details on the getter!
Reimplemented in examples.InheritedClass.


Ok, here's my interpretation. But first, a declaration (pun intended). I have googled the term, watched videos, read articles, scanned Stack Overflow but this blog post is purely my own definition. So apologies for misleading you.
When you create but do not declare a variable, your code will be read and 'executed' at top level, throughout the whole programme.
JavaScript 'thingy' will read and execute your code as a blanket rule, applying the same variable throughout your programme. YOur variable will be same value every where on your programme (the Window level).
When you create and declare (assign value) a variable within a function, or a method, then the JavaScript 'thingy' will look for and execute it at that level (the Document level).
DOcument belongs to the Window
In other words:
I have no idea what I'm talking about, right?