Sunday, May 14, 2023
MS Computer Science (MSCS) program at UPLB (Part 1)
Sunday, March 19, 2023
How to succeed in group programming projects?
Group programming projects will test a student's technical skills and ability to work in a team. This post will discuss how to succeed in group programming projects.
The Answer: Choose an excellent group leader!
In group projects, the role of the group leader is very important. Although technical expertise is a desired quality for a group leader, leadership skills, project management skills, and communication skills are more important to ensure the success of the group project. (I am speaking from experience here because I've always been selected as the group leader when I was an undergrad :) ).
Common issues in group projects
* Schedule - cannot find a common time to meet and work on the project
Role of the group leader
In general, the role of the group leader is to handle the issues mentioned above.
* Facilitate communication - identify channels of communication, set meetings, follow up, etc.
* Assign tasks - based on the abilities of the members, members should be honest about their technical skill level
* Monitor progress - updates from group members, can be done through tools
* Provide assistance - technical, etc.
* Manage conflicts - need to make decisions at some point
A group member should not accept the nomination as group leader if he/she does not possess these qualities.
* Collaborative - group leader should ensure that every member of the team can contribute, no matter how small the contribution is
* Adaptable - be able to make adjustments based on circumstances
* Positive and cool attitude
* Accountable - and responsible
Of course without the contribution of group members the project will not move forward. (May not always be true because a highly technical, grade-conscious, and introvert group leader may 'make buhat' the group but secretly fail everyone else in the team in the peer eval :) ).
* Seek help(of prof) if needed
Appendix: Example work log
(Photo by Annie Spratt on Unsplash)
Thursday, November 24, 2022
UPLB Student Registration Systems: 1996-2022
Tuesday, November 15, 2022
Thoughts on Learning and My Teaching Philosophy
I've been teaching in UPLB since 2002 (that's >20 years already!). I haven't really put into writing my thoughts about learning and my teaching philosophy. Here are some items (which will be updated from time to time because things happen and change):
- Since this is UPLB, I assume that my students are really smart (but some will be "slow"). Of course, some students will be smarter than me. This is one reason I like teaching here.
- Since I teach Systems subjects, I want my students to work on hands-on activities and experiment (build, break, and rebuild stuff).
- I don't believe in "learning styles". I believe that students can learn any topic (no matter what their learning styles are) if they really give time and effort to learn the topic. They can always ask for help on difficult topics. Even if I am a boring lecturer, for sure they will learn something.
- My role is just a facilitator of learning (and possibly a source of inspiration), not the source of knowledge. Students are free to explore other knowledge sources outside the syllabus and the classroom. Using AI Tools is welcome in my classes.
- I don't tolerate academic dishonesty. It is better for students to fail (then retake the subject) than to cheat in graded activities such as exams. However, I don't police students on this matter. For me policing is a waste of my time. I have high respect for students who fail because they did not resort to academic dishonesty. Also, a student can just drop the course if he/she is failing rather than resort to academic dishonesty.
- High grades matter only if students will apply to grad school or apply for a teaching position after they graduate. Students should aim for the "learning" and "mastery" as well as skills development. High grades will just be an end result in the pursuit of "learning" and "mastery".
- Some students are "grade conscious" (or GC) which means they want/beg for a grade of 1.0! If they want high grades, sure I can give it to them as long as they turn in excellent work. This is the reason I give bonus points, though some students don't avail of these bonus points.
- Feedback is not just the score students get from graded activities (wrongly termed as "learning assessment"). If students code worked on the given test cases, that is already feedback. If a student wants feedback, he/she needs to talk to me directly during class and consultation hours. The only way I can help "slow" students is if they intentionally ask for my help. Otherwise they are on their own.
- Not all students currently taking BSCS are really interested in computing(or a Nerd) . I am biased towards students who are passionate about computing. Thus course materials, difficulty, and delivery are more geared towards challenging these passionate students to the best of my abilities.
- I want my classes to be "world class", thus I try to adhere to the ACM curriculum recommendations when creating and delivering course content. I also consult course websites of other top universities and incorporate topics and approaches in my syllabus.
- I try to focus on teaching the fundamentals. However, computing is a rapidly evolving field so I try to teach the state of the art given the resource constraints and bureaucracy.
- Textbooks are important in my classes. I prefer to use free or open source textbooks. I give paper readings from time to time to encourage students to do research.
- I encourage students to ask questions, even the simplest or 'stupidest' questions.
- I prefer to create videos that are more than 15 minutes. TL;DR/TL;DW is not for me and should not be for my students. I don't want my students to take 'shortcuts'.
- I want my students to do great work without desiring for my validation.
Saturday, August 27, 2022
DevStack on Ubuntu 20.04
I need a small IaaS cloud infra for my CMSC291: Modern Distributed Systems class this semester so I decided to set up an OpenStack instance on one of SRG's servers running Ubuntu 20.04. I have used OpenStack in the past so I'm quite comfortable using it.
What is DevStack?
"DevStack is a series of extensible scripts used to quickly bring up a complete OpenStack environment based on the latest versions of everything from git master. It is used interactively as a development environment and as the basis for much of the OpenStack project’s functional testing."
- https://docs.openstack.org/devstack/latest/
[1] I thought the process will be straightforward but unfortunately minor tweaks were needed. Below is the configuration of the host.
[2] This is the commit hash that worked for me, make sure to checkout this particular commit : d9e2d10d28ebc70129ed90ac9afe11591e7bb7d3
[3] Get the IP address of the host (using ifconfig) and export it as HOST_IP environment variable. Let's say the IP address is 192.168.3.100.
[5] Edit lib/neutron_plugins/ovn_agent.
[6] Unstack and Clean.
$sudo /usr/share/openvswitch/scripts/ovs-ctl restart
[8] Stack. This may take a while so grab a cup of coffee.
Friday, February 18, 2022
YouTube channels/playlists for systems and cybersecurity topics
- Distributed Systems by Lindsey Kuper
- Distributed Systems at MIT
- Virtualization and Cloud Computing by Mythili Vutukuru
- Distributed Systems Reading Group
- Distribute My System
- Jim Kurose's Networking Videos
- The Networking Channel
Friday, July 9, 2021
Humans of Computer Systems
Professor Murat has an interesting section in his blog called the Humans of Computer Systems. I've been thinking about documenting my own "history in computing/systems" so I decided to answer some of the questions in HCS.
Programming
How did you learn to program?
I first learned to program using programmable calculators which I borrowed from my rich high school classmates. I was amazed how using variables saves time when computing some formula. Some of my classmates even have graphing calculators. I usually borrow their calculator and the manual overnight to try it out. I then learned BASIC on my own when my father brought home an IBM PS/2 laptop. I learned other programming languages in school.
Tell us about the most interesting/significant piece of code you wrote.
When I was in college and taking an assembly language programming course, I wrote a text editor in C, which I called ASMEdit. It allows me to assemble and link inside the editor. For me, this was an interesting project since I learned how to use pointers to functions to implement the menu system. I also learned to call external programs, TASM.EXE and TLINK.EXE, inside another program. I also implemented syntax coloring for the assembly instructions. This project was developed for the MS-DOS operating system.
Who did you learn most from about computer systems?
I learned about computer systems in my undergraduate OS class, mostly by reading the dinosaur book by Silberschatz et. al. It was in this class that was able to use a Unix OS called Solaris running on Sun hardware. My undergraduate SP/Thesis adviser was a systems and networks guy so I also learned a lot from him. I even learned a lot more about systems when I switched to linux desktop starting with Red Hat 7.3.
Who is the greatest programmer you met, and what is impressive about them?
Some of my college classmates were really good programmers. They can easily implement advanced data structures and algorithms, especially graph and network algorithms. There was no Stack Overflow then.
What is the best code you have seen?
Over time, I realized that there is actually no best code. I do admire readable and maintainable code. OS kernel source code is quite messy.
What do you believe are the most important skills to be successful in your field?
Desire to learn new things. Oral and written communication. Working in a team. Navigating the academic politics.
What quality or ability do you value most in a computer systems person?
The desire to learn and experiment or tinker with various things. The ability to "see" the big picture at the same time can work on the specifics. Courage to break things.
Personal
Which of your work/code/accomplishments are you most proud of?
I am proud that I was able to get tenure at the university. This gave me the freedom to work on various areas in computer systems that interest me without worrying too much about job security despite the low pay. The ICS-OS paper actually gave me tenure. I enjoyed working on it and using it in my classes.
What comes to you easy that others find hard? What are your superpowers?
Understanding systems. Connecting/integrating things together.
What was a blessing in disguise for you? What seemed like a failure at the time but led to something better later for you?
I was not accepted in the private company that I applied to after graduation. My rejection in that company led me to apply as an Instructor in the university since I also want to pursue graduate studies.
What do you feel most grateful for?
I feel grateful for everything I have right now.
What does your perfect day look like?
Learning something new. Helping some people. Exercising and playing sports.
What made you most happy in the last year?
I was able to survive despite the pandemic. Though anxiety kicks in from time to time.
Work
What was your biggest mess up? What was the aftermath?
Some colleagues were pissed when they lost internet access because my private cloud setup has an exposed DHCP server which assigned IP addresses to their machines. We were able to isolate and resolve the problem but it was already late in the afternoon.
What was your most interesting/surprising or disappointing interaction at work?
I need to babysit the son of my colleague on a weekend because he needs to argue/discuss with another colleague about the "draconian" network access filtering.
What do you like most about your job/profession?
The freedom to tinker. The opportunity to share what I know. The chance to mentor and help others. Working with smart people. Playing the publications game. Navigating academic politics.
What would be the single change that would improve your work environment most?
Improving the research culture. Most of my colleagues are great teachers but they disregard the research aspect of the profession. CS is a fast-changing field. We need to keep up with the advances.
Technical
What do you think are the hardest questions in your field?
System reliability and performance. Ethics. Should we build this system because we can? Is there one operating system to rule them all?
What are you most disappointed about the state-of-the-art in your field?
Sometimes the state of the art is just an incremental step or just scaling up.
What are the topics that you wish received more attention? What do you think is a promising future direction in your field?
System reliability and performance. Ethics.
What is your favorite computer systems paper? Why?
*XEN and the Art of Virtualization *A view of cloud computing *MapReduce: Simplified Data Processing on Large Clusters
I reread these papers from time to time.
Story
Is there an interesting story you like to tell us?
Yes.
Tell us your story.
I wrote an EXE non-overwriting computer virus bundled with ASMEdit I described above. My classmates and instructor who copied the program had no idea of the presence of the virus. The virus just replicates though, there is no destructive payload. AV then were signature-based so they never detected the virus I wrote.
Rant your heart out.
We are in a research university. Why are we not reading at least one research paper per week? :)
Saturday, February 20, 2021
Experiences in remote learning
Saturday, October 17, 2020
Virtual international academic conferences and workshops
A lot of major academic conferences in computing are being held online/virtual these days. The conferences and workshops I was able to attend so far include the following:
- ACM SIGMETRICS 2020
- ACM HPDC 2020
- SEED Workshop
- EuroSys 2021
- CHEOPS Workshop
- HotStorage 2021
- SIGCOMM 2021
These conferences waived the registration fees this year. I hope to add more to this list.
If you are interested, here is a list of upcoming conferences from various professional organizations:
Friday, October 2, 2020
On remote learning/teaching
Remote learning poses some new challenges to students and instructors. As an instructor, the question that I always ask is "How can I effectively and efficiently deliver my courses to students?" I've been using technologies in teaching already so it is a little bit easier for me to transition to remote learning. The challenge I think is in the assessment and enforcing academic honesty.
Coming up with the course guide was the first step. It contains the "outline" for the semester with topics, learning outcomes, and laboratory activities specified per week. Materials such as video lectures will be prerecorded or delivered live and uploaded. Exams will be delivered online, multiple choice type. Additional materials such as slides and handouts will be made available for download also. Communications will be done through email and messaging tools.
Thus, this semester the following tools occupy my screen most of the time:
- Google Classroom - general class housekeeping
- Github/Github Classroom - lab/programming activities
- OBS Studio - recording/streaming lectures
- Youtube - storage and streaming of lectures
- Zoom - video conferencing
- Shotcut - video editing
- Veikk A30 Tablet - for use in whiteboard app
- Openboard - whiteboard app
- Kahoot - quiz engine
- G Suite - documents, presentations, spreadsheets, storage, calendar
- Slack - messaging/collaboration
- Gmail - email
![]() |
Green screen setup |
Sunday, December 22, 2019
A review of my CMSC 131 class offering
Last semester I taught, for the first time, the Introduction to Computer Organization and Machine Level Programming course for undergrads. Traditionally this course mainly teaches students x86 (32-bit) assembly language programming in an Ubuntu environment using NASM. I decided to "upgrade" the course by directing the course towards systems programming and introducing x86-64 assembly language. My main reason for the upgrade is to prepare the students for their Operating Systems class which they will take later and which I also teach. In order to achieve this goal, I needed textbooks to guide me which led me to use the following:
- [CS:APP2e]: Randal E. Bryant and David R. O'Hallaron (2011). Computer Systems: A Programmer's Perspective (2nd ed.).Prentice Hall.(Video Lectures)
- [ALPU]: Ed Jorgensen (2019).x86-64 Assembly Language Programming with Ubuntu.Creative Commons.
The topics (based on the CS:APP2e contents) I was able to cover in the lecture are the following:
- A tour of computer systems
- Representing and manipulating information
- Machine-level representation of programs
- Memory hierarchy
- Linking
In the lab, I was able to cover most of the chapters in ALPU, excluding DDD, Macros, Stack Buffer Overflow, I/O Buffering, Floating Point, and Parallel Processing.
I introduced GDB in the lab to help students debug their programs. I also used GitHub Classroom for distributing boilerplate code and code submission.
In my lectures, the emphasis is on how the GCC compiler translates C source code into assembly language and how the processor executes the machine code. I always have terminals open to fire up GCC and GDB during lectures.
For future improvement of the offering of this course, I recommend the following:
- Use same syntax in both the lecture and lab. CS:APP2e uses AT&T syntax while ALPU uses Intel syntax.
- CS:APP2e is still 32-bit with a little introduction to 64-bit. It may be possible to use the 3rd edition which I believe is purely 64-bit.
- Most of the programming exercises do not accept input and produce output interactively. A GDB command/script file can be used to provide input and produce output by explicitly stating the variable names, memory addresses, or registers. Checking of programming exercises can be automated using GDB command scripts.
- Introduce assembly language programming in Windows environments using Microsoft Native Build Tools.
- Introduce ARM assembly language programming using an emulator or RPi.
I would like to thank Prof. Rizza DC. Mercado and Prof. Kendall Jaen for sharing their teaching materials. It was fun teaching this course and I learned some new topics in depth.
Saturday, December 21, 2019
How to determine research potential
As professors, we are often on the lookout for graduate/undergraduate students (or junior faculty) with research potential to join our research groups. We want to encourage these students to pursue graduate studies in order to further advance the field by becoming researchers or professors in the future.
We base our evaluation initially on their grades from the courses they took. Our belief/claim is that the higher the General Weighted Average (GWA) of a student, the higher the research potential.
Research potential, as described in Costromina et. al. (2014), is a multidimensional and multilayered system of individual psychological traits (motivational, cognitive, and behavioral characteristics) that act together to allow an individual to conduct research activity efficiently and fruitfully. These traits are described below:
Motivational
- Intolerance for ambiguity - capacity to experience positive feelings in new, unstructured, and varied situations
- Satisfaction in solving problems - capacity to feel gratification from the process of finding ways and means for coping with scientific tasks
- Intellectual curiosity - the conscious desire to receive information about objects and to enjoy learning
- Intolerance for novelty - reveals thirst for experimentation, innovations, etc.
Cognitive
- Flexible thinking - can overcome conventional thinking
- Critical thinking - capacity to reveal mistakes and inconsistency, to correct errors, justify the validity of hypothesis
- Logical thinking - ability to use facts and laws to confirm the accuracy of conclusions promptly
- Quick thinking - ability to understand the situation and to make decisions in a timely manner
- Original thinking - capacity to propose new, unconventional ideas
Behavioral
- Self-organization - structuring of a researcher's personal activity to reach objectives
- Self-control - following research procedures and completing work tasks
- Adaptability - reduces time necessary to accept the changing conditions of a research task
- Assertiveness - maintaining stability while working in unstable conditions
Costromina et. al. (2014) conducted a study to compare undergraduates, master's students, and professors along the above dimensions. In their conclusion, they were able to obtain data on the high predictive validity of theoretical abilities in defining students' level of research potential.
At the undergraduate level, intolerance for novelty, self-control, adaptability, assertiveness and critical thinking are the characteristics that should have been developed, according to the study.
It seems, therefore, that the use of GWA as first screener of a student's research potential is valid. In addition however, a student should also be evaluated based on the traits described above.
Reference
- Kostromina, Svetlana & Bordovskaia, N.V. & Rosum, S.I. & Moskvicheva, Natalia & Iskra, Natalia. (2014). Research potential and cognitive features of students. Psychology in Russia: State of the Art. 7. 122-136. 10.11621/pir.2014.0411.
Thursday, November 7, 2019
SRG Authorship Guiding Principles
1. Authorship credit should be distributed only to those researchers directly involved with the paper or project in question. Researchers with indirect or minimal involvement may be mentioned in an additional "acknowledgements" section if necessary. All contributors should appear on paper; "ghost writing" is an invalid way even for a busy researcher to produce publications.
- Should you include your adviser and your committee members?
- Should you include project leader, project staff, research assistants?
- Should you include your research group leader?
- Should you include ALL members of your research group?
- Should you include your special someone?
2. All authors should be paired with short descriptions of their contributions to the project. These descriptions need not be on the title page but should apparent for anybody seeking further information about the research presented. This principle extends to the acknowledgements list. In general, any individuals or organizations mentioned by the paper should be identified to avoid "honorary" authorship and make explicit the division of work leading to the final results.
3. The list of authors should be divided by level of contribution. Within each division, authors should be ordered by the amount they contributed to the particular paper in question. Truly equal co-authorship relationships should be marked as such, with none of the authors identified as a "corresponding" author. The lack of a single corresponding author can be addressed by creating a simple email that alias that contacts all the principal authors simultaneously. Those researchers who would be considered "inventors" should be marked as such for the purposes of verifying future patent applications.
4. Upon publication, authors should be required to sign that the work in the paper is at least partially their own and that no other authors should be given credit.
5. Any and all decisions involving authorship should involve the mutual consent of all authors, which should be established via individual contact.
6. Any discovered cases of authorship fraud should be dealt with in much the same way as data fabrication. Once they are caught, authors should be required to explain their incorrect practices in a published statement and rectify any disadvantages suffered by parties not receiving appropriate credit.
References:
[1] Solomon, Justin. (2009). Programmers, Professors, and Parasites: Credit and Co-Authorship in Computer Science. Science and engineering ethics. 15. 467-89. 10.1007/s11948-009-9119-4.
[2] Allison Gaffey. (2015). Determining and negotiating authorship. Retrieved October 6, 2019 from https://www.apa.org/science/about/psa/2015/06/determining-authorship.
Wednesday, July 31, 2019
Notes from "It's not how good you are, it's how good you want to be"
- All creative people need something to rebel against, its what gives their lives excitement.
- There is no instant solution, the only way to learn is through experience and mistakes.
- Aim beyond what you are capable of.
- People who are conventionally clever get jobs on their qualifications (past), not on their desire to succeed, (the future).
- Do not seek praise. Seek criticism.
- If you accept responsibility, you are in a position to do something about it.
- If you give away everything you have (ideas), you are left with nothing. This forces you to look, to be aware, to replenish.
- Don't look for the next opportunity. The one you have in hand is the opportunity.
- Accentuate the positive. Eliminate the negative.
- Do not put your cleverness in front of the communication.
- Don't promise what you can't deliver.
- Give your client what he wants and he may well give you what you want.
- Don't take no for an answer. Work out a new approach.
- When it can't be done, do it. If you don't do it, it doesn't exist.
- If you can't solve a problem, its because you're playing by the rules.
- The pesron who makes mistakes is unlikely to make anything.
- It is wrong to be right, because people who are right are rooted in the past, rigid-minded, dull and smug.
- It is right to be wrong. Being wrong isn't in the future, or in the past.
- Don't be afraid of silly ideas.
- Play your cards right.
- It's not what you know, it's who you know.
- Don't give a speech. Put on a show.
- Getting fired can be a positive career move.
- Rough layouts sell the idea better than polished ones.
- If you get stuck, draw with a different pen.
- Don't be afraid to work with the best.
- Do not try to win awards.
Saturday, July 20, 2019
How to solve problems
Definitions
- Exercise - something that can be solved by a routine method
- Problem - something that will require more thought; will require the application of routine methods learned in exercises
Sample Problems
- How many zeroes are at the end of 100! (100 factorial)
- Suppose that X and Y are two infinite sets. Find a formula that relates |X|, |Y|, | X intersection Y| and |X union Y|.
- Show that the equation x^2 + y^2 = z^n has positive integer solutions for every n = 1,2 ,3, ...
Polya's four-step plan
Understanding the problem
- Understand all the words and symbols in the problem - Know the meaning of the symbols as well as the important definitions and theorems
- Guess - use your intuition - Make an educated guess
- What do you know about the hypothesis and conclusion? - Write down what you know about the hypothesis and conclusion
- Work backwards and forwards - You can start with the conclusion and think what it would imply.
- Work with initial and special cases - Some problems have an index (n in P3). Solve for the initial cases to get a 'feel'.
- Work with a concrete case - For abstract problems, look at a concrete case. Create instantiations of the variables. (P2)
- Draw a picture - Venn diagrams (P2)
- Think about a similar problem - Recall problems you've solved before that may be related to the problem you are solving.
- Find an equivalent problem - Reformulate a problem, say to show that two functions are equal, they can be represented as a new function with difference of zero.
- Solve an easier problem - In P1, solve 10! first to get a feel.
- Rewrite in symbols or word -
- Break the problem into pieces -
- Find the right level - there are many ways to approach a problem so select the right one
- Give things names - "Let X be ..."
- Systematically choose a method - A proving problem can be solved solve using different approaches.
- Check each step - don't use intuition
- Check the answer - Test.
- Find another solution
- Reflect - Think about what solved the problem.
Saturday, July 13, 2019
Internship at KAIST
Tuesday, May 28, 2019
Sections I read in an SP paper
First I read the title to identify the general area(e.g. web/mobile app, ML, algorithms) of the project. Second, I read the abstract to get an overview view of the work. Third I focus on the objectives to know the specifics of what should be achieved by the project. Lastly, the results and discussion to check whether the objectives were met.
It is unfortunate that some advisers don't bother to read/edit the SP papers of their students before the presentation. Nonetheless, the four sections I mentioned above, I think, should be written with care.
Thursday, April 4, 2019
PCSC 2019 Experience
Sunday, March 24, 2019
Sunday, September 9, 2018
Citation and References
Side note:
--
Copyright - safeguards the ownership of an intellectual property
License - document that lets someone use the intellectual property
--
Now, as an assistant professor, I need to prepare materials for teaching and research which include the following:
- course syllabus
- course website
- handouts
- exams
- quizzes
- presentations
- research papers
- programs/software
- blog
- grant proposals
- audio/video
- figures/photos
- letters
- computer programs
For research papers and grant proposals, there is usually a standard to follow. In my field, which is Computer Science, the ACM Citation Styles and Reference Formats [1] is widely used. This guideline can also be applied in course websites, course syllabus, blogs, and handouts. A "References" section is placed at the end of these materials which contains the list of other materials cited. In presentations, borrowed images and pictures must also be cited. At the minimum, the following information are needed for a reference entry (d-a-t-t-u):
- date/year of publication
- author/publisher (can be a person, organization, legal entity)
- title
- type
- url/source
Examples:
[1] Joseph Anthony C. Hermocilla. 2018. CMSC 137: Data Communicatons and Networking (First Sem 2018-2019). Retrieved September 9, 2018 from https://jachermocilla.org/teaching/137/2018-1/.
[2] McMillan, T. 2009. Fantail vector [JPG Image]. Retrieved September 9, 2018 from http://www.kiwiwise.co.nz/photo/fantail-vector.
[3] Marie Betel B. de Robles, Joseph Anthony C. Hermocilla, and Miyah D. Queliste. 2017. Buffer Overflow Exploitation on 64-bit Linux Systems [Google Slides Presentation]. Retrieved September 9, 2018 from http://srg.ics.uplb.edu.ph/resources/presentations.
[4] Joseph Anthony C. Hermocilla. 2018. Homework 3: Environment Variables, Processes, and Threads [PDF Handout]. Retrieved September 9, 2018 from https://jachermocilla.org/teaching/125/2017-2/hw3.pdf
[5] Joseph Anthony C. Hermocilla. 2018. Homework 3: Environment Variables, Processes, and Threads [Printed Handout].
Some authors find it cumbersome to cite because the information needed are not readily available. It seems that the best way then is to provide a "Reference as:" or "Citation:" element or section in your own materials which include the minimum information, d-a-t-u, above.
References:
- [1]ACM, Inc. 2018. Citation Styles and Reference Formats. Retrieved September 9, 2018 from https://www.acm.org/publications/authors/reference-formatting.